# JdbcTemplate 详解

# 一,JdbcTemplate (概念和准备)

  1. 什么是 JdbcTemplate (Template 译为模板)
    • Sprint 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作
  2. 准备工作
    1. 引入相关 jar 包,我们还需要导入连接数据库的相关 jar 包,比如: druid,mysql-connector-java

image-20221217143453718

我们需要的是 spring-jdbc-5.0.0.RELEASE.jar , 除了要导入这个 jar 包外,还需要导入一个 spring-tx-5.0.0.RELEASE.jar (它 是 和事务相关的)

spring JDBC

Spring 框架对 JDBC 的简单封装,提供了一个 JDBCTemplate 对象简化 JDBC 的开发

  • 步骤:
    1. 导入 jar 包
    2. 创建 JdbcTemplate 对象,依赖于数据源 DataSource
      • JdbcTemplate template = new JdcbTemplate(ds);

调用 JdbcTemplate 的方法来完成 CRUD 的操作

  1. update (): 执行 DML 语句,增,删,改语句

  2. queryForMap (): 执行 DQL 查询结果将结果集封装为 map 集合

  3. queryForList (): 执行 DQL 查询结果将结果集封装为 list 集合

    • 将每一条记录封装为一个 Map 集合,再将 Map 集合装载到 List 集合中
  4. query (): 执行 DQL 查询结果,将结果封装为 JavaBean 对象

  5. queryForObject (): 执行 DQL 查询结果,将结果封装为对象

    • 一般用于聚合函数的查询
  • 案例:

JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
   String sql = "insert into user values(?,?)";
   int update = jdbcTemplate.update(sql, null, "王五");
   if(update > 0){
       System.out.println("执行成功!");
   }else{
       System.out.println("执行失败!");
}
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
    String sql = "delete from user where id=?";
    int update = jdbcTemplate.update(sql, 1);
    if(update > 0){
        System.out.println("执行成功!");
    }else{
        System.out.println("执行失败!");
}
public static void main(String[]args){
    JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
    String sql = "update user set name='马牛逼' where id=?";
    int update = jdbcTemplate.update(sql, 2);
    if(update > 0){
        System.out.println("执行成功!");
    }else{
        System.out.println("执行失败!");
    }
}

DQL

  • queryForMap 查询单行
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from user where id = ?";
Map<String, Object> map = jdbcTemplate.queryForMap(sql,  2);
System.out.println(map);
  • queryForList 查询多行
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from user where id = ? or id = ?";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql,  2,3);
System.out.println(maps);
  • queryForObject 查询单行,返回对象 一般用于聚合函数的查询
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from user where id = ?";
User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), 2);
System.out.println(user);
//===========================================================
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select count(id) from user";
int i = jdbcTemplate.queryForObject(sql,int.class);
System.out.println(i);
  • query 查询多行,返回 JavaBean 对象并封装到 List 集合中
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "select * from user";
List<User> list = jdbcTemplate.query(sql,new BeanPropertyRowMapper<User>(User.class));
System.out.println(list);