当前位置: java基础教程 > 20-jdbc > 阅读正文

JDBCTemplate

2021.5.23.   852 次   2001字

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;
        }

    }
}

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群