JDBCTemplate
1. 介绍
JDBCTemplate是Spring框架提供的对JDBC封装对象,目的是简化JDBC开发,是因为传统JDBC代码有着大量的重复。
2. 加载jar包
如果是Maven/Gradle项目则从Maven中央仓库配置,如果是要手动导入,则从FTP下载。
- Apache Commons Logging:http://repo1.maven.org/maven2/commons-logging/commons-logging/
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
- Spring Core:http://repo1.maven.org/maven2/org/springframework/spring-core/
- Spring JDBC:http://repo1.maven.org/maven2/org/springframework/spring-jdbc/
- Spring Transaction:http://repo1.maven.org/maven2/org/springframework/spring-tx/
springframework的这几个包的区别就是<artifactId>
标签不同。
3. 使用JDBCTemplate
配合JDBCUtils,JDBCTemplate提供了多种功能的封装,极大的简化了语句,只要关心SQL语句即可。
- 创建JDBCTemplate对象
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
可以将创建对象语句做成员变量,使用private修饰,这样类中每一个业务就不需要重复创建对象,可以直接使用template了。 - 使用JdbcTemplate提供的方法
- upadate(SQL语句, 参数列表):执行DML语句,执行添、删、改语句。返回影响行数。
tring sql = "UPDATE user SET age = ? WHERE id = ?"; int count = template.update(sql, 60, 1);
- queryForMap(SQL语句, 参数列表):执行DQL语句,执行查询语句。返回被封装到Map集合的数据集。
/* 注意,这个方法将列名和值作为键值对封装为Map集合 只能查询唯一一条结果集,如果是多条结果一定不能使用这个方法 */ String sql = "SELECT * FROM user WHERE id = ?"; Map<String,Object> map = template.queryForMap(sql, 1); System.out.println(map);
- queryForList(SQL语句, 参数列表):执行DQL语句,执行查询语句。返回被封装到List集合的数据集。
/* 用这个方法可以打印多条封装成Map集合的结果集 其实就是将每一条记录封装成一个Map集合,然后将Map集合装到List集合中 */ String sql = "SELECT * FROM user WHERE id = ? OR id = ?"; List<Map<String,Object>> list = template.queryForList(sql, 1, 2); for(Map<String,Object> stirngObjectMap : list) { System.out.println(stirngObjectMap); }
- query(SQL语句, 参数列表):执行DQL语句,执行查询语句。返回的数据集封装到JavaBean对象。
/* 使用提供的BeanPropertyRowMapper方法,完成数据到JavaBean的自动封装 注意:domain类中的数据类型一定要是引用数据类型,否则可能会出错 */ String sql = "SELECT * FROM user"; List<类型> list = template.query(sql, new BeanPropertyRowMapper<类型>(类型.class)); for (类型 user : list) { System.out.println(user); } /* domain 类 */ public class User { private Integer id; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Override public String toString() { return "User{" + "id=" + id + '}'; } }
- queryForObject(SQL语句, 参数列表):执行DQL语句,执行查询语句。返回的数据集封装为对象。
/* queryForObject方法一般都是执行聚合函数的方法 */ String sql = "SELECT COUNT(id) from user"; Long total = template.queryForObject(sql, Long.class); System.out.println(total);
- upadate(SQL语句, 参数列表):执行DML语句,执行添、删、改语句。返回影响行数。