JDBC(六)JDBCTemplate

JdbcTemplate

JdbcTemplate是Spring框架对JDBC的简单封装对象。
步骤:

  • (1)导入jar包:
    |-- 【1】commons-logging-1.2.jar (这是日志接口,如果不想使用具体日志实现类,就可以使用接口来记录日志,Spring中使用的是commons-logging来记录日志)
    |-- 【2】spring-beans-5.0.0.RELEASE.jar
    |-- 【3】spring-core-5.0.0.RELEASE.jar
    |-- 【4】spring-jdbc-5.0.0.RELEASE.jar
    |-- 【5】spring-tx-5.0.0.RELEASE.jar

  • (2)创建JdbcTemplate对象,依赖于数据源DataSource(默认执行方法时底层使用的连接就是通过连接池来创建,只不过不用我们来创建和回收,都在底部定义好了
    |-- JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);

  • (3)使用JdbcTemplate的方法来完成CRUD操作
    |-- update():执行DML语句。
    |-- queryForMap():查询结果集封装为map集合(只能查询单条记录
    |-- queryForList():查询结果集封装为list集合(查询多条,List>
    |-- query():查询结果集封装为JavaBean对象(可以选择自己实现RowMapper接口,也可以使用已经实现好的封装Bean对象接口:new BeanPropertyRowMapper(T.class))
    (使用BeanPropertyRowMapper时,如果数据库中属性为null,为赋值失败,此时可以将基本数据类型转化为对应的包装类即可)
    |-- queryForObject():查询结果集封装为对象(用于获取聚合函数结果

小例子:

public class JdbcTemplateDemo1 {
    public static void main(String[] args) {
        //1.创建数据库连接池
        DataSource dataSource = JdbcUtils.getDataSource();

        //2.创建JdbcTemplate对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        //3.调用JdbcTemplate对象的方法来完成sql操作
        String sql = "update emp set empno = 9999 where empno = ?";
        int count = jdbcTemplate.update(sql,7999);
        System.out.println(count == 1 ? "修改成功" : "修改失败");
    }
}
image.png

使用JdbcTemplate来执行DML与DQL语句

Demo:

package jdbctemplate;

import entity.Emp;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import util.JdbcUtils;

import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * @author LianZH
 * @date 2020/8/9 - 21:45
 */
public class JdbcTemplateDemo2 {
    public static void main(String[] args) {
        //1.获取连接池
        DataSource dataSource = JdbcUtils.getDataSource();
        //2.创建JdbcTemplate对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        //3.执行sql
        //3.1 update
//        String updateSql = "update emp set empno = ? where empno = ?";
//        int count = jdbcTemplate.update(updateSql,10001,9999);
//        System.out.println(count == 1 ? "执行成功" : "执行失败");

        //3.2 insert
//        String insertSql = "insert into emp(empno,ename) values(?,?)";
//        int count = jdbcTemplate.update(insertSql,10002,"张三");
//        System.out.println(count == 1 ? "执行成功" : "执行失败");

        //3.3 delete
//        String deleteSql = "delete from emp where empno = ? or empno = ?";
//        int count = jdbcTemplate.update(deleteSql,10001,10002);
//        System.out.println(count == 2 ? "执行成功" : "执行失败");

        //3.4 select
        //queryForMap方法只能查询一条记录,如果结果有多条会报错
//        String querySql = "select empno,ename from emp where empno = ?";
//        Map map = jdbcTemplate.queryForMap(querySql, 7369);
//        System.out.println(map);//{empno=7369, ename=SMITH}

//        String querySql = "select empno,ename from emp";
//        List> list = jdbcTemplate.queryForList(querySql);
        //[{empno=7369, ename=SMITH}, {empno=7499, ename=ALLEN},...]
//        System.out.println(list);

//        String querySql = "select empno,ename from emp";
//        List list = jdbcTemplate.query(querySql, new RowMapper() {
//            @Override
//            public Emp mapRow(ResultSet resultSet, int i) throws SQLException {
//                Emp emp = new Emp();
//                emp.setEmpno(resultSet.getInt("empno"));
//                emp.setEname(resultSet.getString("ename"));
//                return emp;
//            }
//        });
        /*
         * Emp{empno=7369, ename='SMITH'}
         * Emp{empno=7499, ename='ALLEN'}
         * ...
         * */
//        list.stream().forEach((emp)-> System.out.println(emp));

//        String querySql = "select empno,ename from emp";
//        List list = jdbcTemplate.query(querySql,new BeanPropertyRowMapper<>(Emp.class));
//        list.stream().forEach(emp -> System.out.println(emp));

        String querySql = "select count(*) from emp";
        Long count = jdbcTemplate.queryForObject(querySql, long.class);
        System.out.println("count : " + count);
    }
}

你可能感兴趣的:(JDBC(六)JDBCTemplate)