Spring JDBC
Spring 框架是对 JDBC 的简单封装,提供了一个 JDBCTemplate 对象简化 JDBC 的开发。
步骤:
1、导入 jar 包
2、创建 JDBCTemplate 对象,依赖于数据源 DataSource。
JdbcTemplate template = new JdbcTemplate(ds);
3、调用 JdbcTemplate 的方法来完成 CRUD 操作
常用方法:
1、update():执行DML语句。增、删、改语句。 2、queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合,(注意:这个方法查询的结果集长度只能是1) 3、queryForList():查询结果将结果集封装为list集合(注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中)
4、query():查询结果,将结果封装成 JavaBean 对象,
query的参数:RowMapper
① 创建一个匿名内部类 RowMapper,重写里面的方法
② 一般使用 BeanPropertyRowMapper 实现类,可以完成数据到 JavaBean 的自动封装
new BeanPropertyRowMapper<类型>(类型.class)
5、queryForObject():查询结果,将结果封装成对象,一般用于聚合函数的查询
案例:
在bookstores 数据库中有一个book表,表结构和记录如下:
需求:
(1)修改1号数据的 num 为10;
(2)添加一条记录;
(3)删除刚刚添加的记录;
(4)查询 id 为1的记录,将其封装为 Map 集合;
(5)查询所有记录,将其封装为 List;
(6)查询所有记录,将其封装为 Emp对象的 List 集合;
(7)查询总记录数。
代码实现:
1 import cn.ks.beans.Book; 2 import cn.ks.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 8 import java.sql.ResultSet; 9 import java.sql.SQLException; 10 import java.util.List; 11 import java.util.Map; 12 13 public class JdbcTemplateDemo { 14 15 //1获取JDBCTemplate 对象 16 private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); 17 18 /* 19 * 1、修改1号数据的 num 为10; 20 */ 21 @Test 22 public void test1() { 23 24 // 2 定义SQL 25 String sql = "update book set num=10 where id=1"; 26 // 3 执行SQL 27 int count = template.update(sql); 28 29 System.out.println(count); 30 31 } 32 33 /* 34 * 2 添加一条记录; 35 */ 36 @Test 37 public void test2() { 38 String sql = "insert into book values(?,?,?,?,?)"; 39 int count = template.update(sql, null, "红楼梦", 3, 33.0, 6); 40 System.out.println(count); 41 } 42 43 /* 44 * 3、删除刚刚添加的记录; 45 */ 46 @Test 47 public void test3() { 48 String sql = "delete from book where id=?"; 49 int count = template.update(sql, 3); 50 System.out.println(count); 51 } 52 53 /* 54 * 4、查询 id 为1的记录,将其封装为 Map 集合; 55 * 注意,这个方法查询的结果长度只能是1 56 */ 57 @Test 58 public void test4() { 59 // String sql = "select * from book where id=? or id=?"; 60 // Map<String, Object> map = template.queryForMap(sql, 1, 2); 61 String sql = "select * from book where id=?"; 62 Map<String, Object> map = template.queryForMap(sql, 1); 63 System.out.println(map); 64 //{id=1, name=西游记, kind=1, price=22.0, num=5} 65 } 66 67 /* 68 5、查询所有记录,将其封装为 List; 69 */ 70 @Test 71 public void test5() { 72 String sql = "select * from book"; 73 List<Map<String, Object>> list = template.queryForList(sql); 74 75 for (Map<String,Object> item : list) { 76 System.out.println(item); 77 } 78 } 79 80 /* 81 6、查询所有记录,将其封装为 Emp对象的 List 集合; 82 */ 83 @Test 84 public void test6() { 85 String sql = "select * from book"; 86 List<Book> list = template.query(sql, new RowMapper<Book>() { //匿名内部类 87 @Override 88 public Book mapRow(ResultSet resultSet, int i) throws SQLException { 89 Book book = new Book(); 90 book.setId(resultSet.getInt("id")); 91 book.setName(resultSet.getString("name")); 92 book.setKind(resultSet.getString("kind")); 93 book.setPrice(resultSet.getDouble("price")); 94 book.setNum(resultSet.getInt("num")); 95 96 return book; 97 } 98 }); 99 100 for (Book book : list) { 101 System.out.println(book); 102 } 103 } 104 105 /* 106 6、查询所有记录,将其封装为 Emp对象的 List 集合; 107 */ 108 @Test 109 public void test7() { 110 String sql = "select * from book"; 111 List<Book> list = template.query(sql, new BeanPropertyRowMapper<Book>(Book.class)); 112 for (Book book : list) { 113 System.out.println(book); 114 } 115 } 116 117 /* 118 * 7、查询总记录数。 119 */ 120 @Test 121 public void test8() { 122 String sql = "select count(id) from book"; 123 Long aLong = template.queryForObject(sql, Long.class); 124 System.out.println(aLong); 125 } 126 }