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 }