JDBC——Spring JDBCTemplate的使用

目录


SpringJDBC

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

目的: 简化JDBC编程
  • 需要导入jar包

JdbcTemplate

跳转到目录
使用步骤:

  1. 导入jar包
  2. 创建JdbcTemplate对象,依赖于DataSource
JdbcTemplate template = new JdbcTemplate(ds);
  1. 调用JdbcTemplate的方法来完成CRUD的操作
    方法:
  • update() 执行DML语句, 增删改语句
  • queryForMap() 查询结果将结果集封装为map集合

注意: 这个方法查询的结果集长度只能为1, 将列名作为key, 值作为value封装为一个map集合

  • queryForList() 查询结果将结果集封装为list集合,将每一条记录封装到map集合中, 然后再将map装入到List集合中
  • query() 查询结果, 将结果封装为JavaBean对象

query的参数: RowMapper
1、一般我们使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装
2、new BeanPropertyRowMapper<类型>(类型.class)

  • queryForObject() 查询结果, 将结果封装为对象, 一般用来执行一些聚合函数的
使用JdbcTemplate练习

跳转到目录

/*
 *      1. 调用JdbcTemplate方法来完成CRUD操作
 *          update() : 执行DML语句, 增删改语句
 *
 *          queryForMap(): 查询结果将结果集封装为map集合
 *              这个方法查询的结果集长度只能为1, 将列名作为key, 值作为value封装为一个map集合
 *
 *          queryForList(): 查询结果将结果集封装为list集合
 *              将每一条记录封装到map集合中, 然后再将map装入到List集合中
 *
 *          query(): 查询结果, 将结果封装为JavaBean对象
 *              *query的参数: RowMapper
 *                  一般我们使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装
 *                  new BeanPropertyRowMapper<类型>(类型.class)
 *
 *          queryForObject(): 查询结果, 将结果封装为对象
 *              一般用来执行一些聚合函数的
 *
 *      练习:
 *          1. 修改1号数据的 salary为10000
 *          2. 添加一条记录
 *          3. 删除刚才添加的记录
 *          4. 查询id为1的记录, 将其封装为map集合
 *          5. 查询所有记录, 将其封装为list
 *          6. 查询所有记录, 将其封装完为Emp对象的List集合
 *          7. 查询总记录数
 */
public class JdbcTemplateDemo2 {

    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    // Junit单元测, 可以让方法独立执行

    /**
     * 修改1号数据的 salary为10000
     */
    @Test
    public void test1() {
        //1. 获取JDBCTemplate对象
        //2. 定义sql
        String sql = "UPDATE emp SET salary = ? WHERE id = ?";
        //3. 执行sql 并给 ? 赋值
        int count = template.update(sql, 20000, 1015);
        System.out.println(count);
    }

    /**
     * 添加一条记录
     */
    @Test
    public void test2() {
        String sql = "INSERT INTO emp(id, ename, dept_id) VALUES(?, ?, ?)";
        int count = template.update(sql, 1015, "朝阳", 10);
        System.out.println(count);

    }

    /**
     * 删除刚添加的记录
     */
    @Test
    public void test3() {
        String sql = "DELETE FROM emp WHERE id = ?";
        int count = template.update(sql, 1015);
        System.out.println(count);
    }

    /**
     * 查询id为1的记录, 将其封装为map集合
     */
    @Test
    public void test4() {
        String sql = "SELECT * FROM emp WHERE id = ?";
        Map<String, Object> map = template.queryForMap(sql, 1001);
        System.out.println(map);
    }

    /**
     * 查询所有记录, 将其封装为list
     */
    @Test
    public void test5() {
        String sql = "SELECT * FROM emp";
        List<Map<String, Object>> list = template.queryForList(sql);
        for (Map<String, Object> map : list) {
            System.out.println(map);
        }
    }

    /**
     * 查询所有记录, 将其封装完为Emp对象的List集合
     */
    @Test
    public void test6() {
        String sql = "SELECT * FROM emp";
        List<Emp> list = template.query(sql, new RowMapper<Emp>() {
            Emp emp;

            // 此方法每调用一次就会封装一个emp对象返回,并存储到List
            @Override
            public Emp mapRow(ResultSet rs, int i) throws SQLException {

                // 获取数据
                int id = rs.getInt("id");
                String ename = rs.getString("ename");
                int job_id = rs.getInt("job_id");
                int mgr = rs.getInt("mgr");
                Date joindate = rs.getDate("joindate");
                double salary = rs.getDouble("salary");
                double bonus = rs.getDouble("bonus");
                int dept_id = rs.getInt("dept_id");
                // 创建emp对象, 并赋值
                emp = new Emp();
                emp.setId(id);
                emp.setEname(ename);
                emp.setJob_id(job_id);
                emp.setMgr(mgr);
                emp.setJoindate(joindate);
                emp.setSalary(salary);
                emp.setBonus(bonus);
                emp.setDept_id(dept_id);
                // 装入集合
                return emp;
            }
        });

        for (Emp emp : list) {
            System.out.println(emp);
        }
    }

    /**
     * 查询所有记录, 将其封装完为Emp对象的List集合
     */
    @Test
    public void test6_2() {
        String sql = "SELECT * FROM emp";
        List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
        for (Emp emp : list) {
            System.out.println(emp);
        }
    }

    /**
     * 查询总记录数
     */
    @Test
    public void test7() {
        String sql = "SELECT COUNT(id) FROM emp";
        Long total = template.queryForObject(sql, Long.class);
        System.out.println(total);
    }
}
发布了149 篇原创文章 · 获赞 68 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/m0_37989980/article/details/104069761
今日推荐