Spring JDBC

Spring 框架对 JDBC 的简单封装。提供了一个 JDBCTemplate 对象简化 JDBC 的开发

  1. 导入 jar 包
  2. 创建 JdbcTemplate 对象。
    依赖于数据源 DataSource * JdbcTemplate template = new JdbcTemplate(ds);
  3. 调用JdbcTemplate的方法来完成CRUD的操作
    • update():执行DML语句。增、删、改语句
    • queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
      • 注意:这个方法查询的结果集长度只能是1
    • queryForList():查询结果将结果集封装为list集合
      • 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
    • query():查询结果,将结果封装为JavaBean对象
      • query的参数:RowMapper
        • 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
        • new BeanPropertyRowMapper<类型>(类型.class)
    • queryForObject:查询结果,将结果封装为对象
      • 一般用于聚合函数的查询
  4. 练习:
    • 需求:
      1. 修改1号数据的 salary 为 10000
      2. 添加一条记录
      3. 删除刚才添加的记录
      4. 查询id为1的记录,将其封装为Map集合
      5. 查询所有记录,将其封装为List
      6. 查询所有记录,将其封装为Emp对象的List集合
      7. 查询总记录数
  1. import cn.itcast.domain.Emp;
  2. import cn.itcast.utils.JDBCUtils;
  3. import org.junit.Test;
  4. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  5. import org.springframework.jdbc.core.JdbcTemplate;
  6. import org.springframework.jdbc.core.RowMapper;
  7. import java.sql.Date;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import java.util.List;
  11. import java.util.Map;
  12. public class JdbcTemplateDemo2 {
  13. //Junit单元测试,可以让方法独立执行
  14. //1. 获取JDBCTemplate对象
  15. private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
  16. /**
  17. * 1. 修改1号数据的 salary 为 10000
  18. */
  19. @Test
  20. public void test1(){
  21. //2. 定义sql
  22. String sql = "update emp set salary = 10000 where id = 1001";
  23. //3. 执行sql
  24. int count = template.update(sql);
  25. System.out.println(count);
  26. }
  27. /**
  28. * 2. 添加一条记录
  29. */
  30. @Test
  31. public void test2(){
  32. String sql = "insert into emp(id,ename,dept_id) values(?,?,?)";
  33. int count = template.update(sql, 1015, "郭靖", 10);
  34. System.out.println(count);
  35. }
  36. /**
  37. * 3.删除刚才添加的记录
  38. */
  39. @Test
  40. public void test3(){
  41. String sql = "delete from emp where id = ?";
  42. int count = template.update(sql, 1015);
  43. System.out.println(count);
  44. }
  45. /**
  46. * 4.查询id为1001的记录,将其封装为Map集合
  47. * 注意:这个方法查询的结果集长度只能是1
  48. */
  49. @Test
  50. public void test4(){
  51. String sql = "select * from emp where id = ? or id = ?";
  52. Map<String, Object> map = template.queryForMap(sql, 1001,1002);
  53. System.out.println(map);
  54. //{id=1001, ename=孙悟空, job_id=4, mgr=1004, joindate=2000-12-17, salary=10000.00, bonus=null, dept_id=20}
  55. }
  56. /**
  57. * 5. 查询所有记录,将其封装为List
  58. */
  59. @Test
  60. public void test5(){
  61. String sql = "select * from emp";
  62. List<Map<String, Object>> list = template.queryForList(sql);
  63. for (Map<String, Object> stringObjectMap : list) {
  64. System.out.println(stringObjectMap);
  65. }
  66. }
  67. /**
  68. * 6. 查询所有记录,将其封装为Emp对象的List集合
  69. */
  70. @Test
  71. public void test6(){
  72. String sql = "select * from emp";
  73. List<Emp> list = template.query(sql, new RowMapper<Emp>() {
  74. @Override
  75. public Emp mapRow(ResultSet rs, int i) throws SQLException {
  76. Emp emp = new Emp();
  77. int id = rs.getInt("id");
  78. String ename = rs.getString("ename");
  79. int job_id = rs.getInt("job_id");
  80. int mgr = rs.getInt("mgr");
  81. Date joindate = rs.getDate("joindate");
  82. double salary = rs.getDouble("salary");
  83. double bonus = rs.getDouble("bonus");
  84. int dept_id = rs.getInt("dept_id");
  85. emp.setId(id);
  86. emp.setEname(ename);
  87. emp.setJob_id(job_id);
  88. emp.setMgr(mgr);
  89. emp.setJoindate(joindate);
  90. emp.setSalary(salary);
  91. emp.setBonus(bonus);
  92. emp.setDept_id(dept_id);
  93. return emp;
  94. }
  95. });
  96. for (Emp emp : list) {
  97. System.out.println(emp);
  98. }
  99. }
  100. /**
  101. * 6. 查询所有记录,将其封装为Emp对象的List集合
  102. */
  103. @Test
  104. public void test6_2(){
  105. String sql = "select * from emp";
  106. List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
  107. for (Emp emp : list) {
  108. System.out.println(emp);
  109. }
  110. }
  111. /**
  112. * 7. 查询总记录数
  113. */
  114. @Test
  115. public void test7(){
  116. String sql = "select count(id) from emp";
  117. Long total = template.queryForObject(sql, Long.class);
  118. System.out.println(total);
  119. }
  120. }