JDBCTemplate 是 Spring 框架操作数据库的简单封装,可以简化对 JDBC 的开发
(比如简化 PrepareStatement 参数,以及自动归还连接对象等)
1.导入 jar 包
点击这里进行下载 , 需要导入 5 个 jar 包
maven引入如下坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
2.创建 JDBCTemplate 对象,它依赖于数据源 DataSource
( 这个数据源就是 “数据库连接池” 对象)
JdbcTemplate template = new JdbcTemplate(ds);
3.调用 JdbcTemplate 方法完成 CRUD 操作
- update(); 执行 DML 语句,增删改
- queryForMap(); 将查询结果封装为 map 集合
- queryForList(); 将查询结果封装为 list 集合
- query(); 将结果封装为 JavaBean 对象
- queryForObject(); 查询结果,封装为对象
4.对 Update 的详细解释:
int count = template.update(sql,"参数1","参数2"...);
返回值:这里返回影响的条数
参数列表:第一个是 sql 语句,后面的是 ? 的内容
5.对 queryForMap 的详细解释
Map<String, Object> map = template.queryForMap(sql, "args1","args2"...);
只能返回一条结果,否则报错
可以用于查询一条数据, 返回的是键值对的形式
6. queryForList 的详细解释
List<Map<String, Object>> list = template.queryForList(sql,"args1","args2"..);
每个list 都是一个 map ,其中的每一条信息,就是 一个 map, 可以用于查询多条记录, 多个记录就使用它
7. query 方法的详细解释
List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
这里需要一个 rowMapper 类型的数据(假设封装的类为 Emp )
(这个类,需要把普通类型,转换为 引用类型,如 int -> Interger )
8. queryForObject 的详细解释
Long total = template.queryForObject(sql, Long.class);
封装为一个对象,这里假设是 Long 类型
封装为指定的对象时, 对象的属性和表属性必须对应, 否则不对应的字段为null, 若设计时无法对应, 那么你要使用forMap, 它能手动封装
9.简单用法, 这里仅展示一下快速使用
仅需 2 步就可以完成jdbc操作
package dao.impl;
import dao.UserDao;
import domain.User;
import util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
public class UserDaoImpl implements UserDao {
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public List<User> findAll() {
//使用JDBC操作数据库
//1.定义sql
String sql = "select * from user";
//2.使用
List<User> users = template.query(sql,new BeanPropertyRowMapper<User>(User.class));
return users;
}
@Override
public User findUserByUsernameAndPassword(String username, String password) {
try {
String sql = "select * from user where username = ? and password = ?";
User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username, password);
return user;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}