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