JdbcTemplate是什么
JdbcTemplate是Spring对JDBC的封装,应用于dao层,对数据库进行CRUD的操作。
为什么要用JdbcTemplate
传统的JDBC操作需要经过以下步骤:
1. 导入驱动jar包
2. 注册驱动
3. 获取数据库连接对象 Connection
4. 定义sql
5. 获取执行sql语句的对象 Statement
6. 执行sql,接受返回结果
7. 处理结果
8. 释放资源
其中多数代码较为固定,JdbcTemplate对这些步骤进行了封装,处理了资源的建立和释放,我们只需要专注于SQL语句的编写和结果的获取,大大的精简了代码。
JdbcTemplate的基本使用
使用步骤
1.导入jar包
spring-beans-5.0.0.RELEASE.jar
spring-core-5.0.0.RELEASE.jar
spring-jdbc-5.0.0.RELEASE.jar
spring-tx-5.0.0.RELEASE.jar
mysql-connector-java-5.1.37-bin.jar
druid-1.0.9.jar
commons-logging-1.2.jar
2.创建JdbcTemplate对象(该对象的创建依赖于数据源DataSource,这里使用Druid数据库连接池,关于数据库连接池可以通过封装的Druid连接池的工具类获取,这里不作赘述)
3.调用JdbcTemplate的方法完成CRUD的操作
代码示范
增、删、改
/**
* 在user表中插入一条记录
*/
public void add(){
//1.获取JdbcTemplate对象,构造函数参数为数据库连接池对象
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
//2.定义sql
String sql = "insert into user(uid, username, age) values(?,?,?)";
//3.执行sql,其中第一个参数是你要执行的sql语句,后面的参数为可变参数,是sql语句中?的值
// 返回值为受影响的条数。
int count = template.update(sql, 1, "kaori", 18);
//输出返回值
System.out.println(count);
}
删和改的操作相同,只需改变sql语句即可
查
查询一条记录
/**
* 查询user表中的一条记录
* 需要提前创建对应user表的user类,将返回值封装为user对象
*/
public void findOne(){
//1.获取JdbcTemplate对象,构造函数参数为数据库连接池对象
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
//2.定义sql
String sql = "select * from user where uid = ?";
//3.执行sql。参数1:执行的sql语句,参数2:BeanPropertyRowMapper对象(把查询结果
// 转化成我们想要的Java类对象),参数3:?的值。返回值为转换的user对象
User user = template.queryForObject(sql,
new BeanPropertyRowMapper<User>(User.class), 1);
//输出返回值
System.out.println(user);
}
查询多条记录
/**
* 查询user表中的多条记录
* 需要提前创建对应user表的user类,将返回值封装为user对象
*/
public void findAll(){
//1.获取JdbcTemplate对象,构造函数参数为数据库连接池对象
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
//2.定义sql
String sql = "select * from user";
//3.执行sql。参数1:执行的sql语句,参数2:BeanPropertyRowMapper对象(把查询的每一条
// 结果转化成我们想要的Java类对象。返回值为User类型的list集合
List<User> list = template.query(sql,
new BeanPropertyRowMapper<User>(User.class));
//输出返回值
for (User user : list) {
System.out.println(user);
}
}
查询记录数
/**
* 查询总记录数
*/
public void count(){
String sql = "select count(uid) from user";
//参数1:执行的sql,参数2:返回值的class对象。返回值为查询的总记录数
Long count = template.queryForObject(sql, Long.class);
System.out.println(count);
}