JDBC Template

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

JDBC Template的最大用处我觉得就是可以自动释放资源,少了很多工作。还可以自动把查询结果封装成对象。

1.步骤

(1)导入jar包

commons-logging-1.2.jar

spring-beans-5.0.0.RELEASE.jar

spring-core-5.0.0.RELEASE.jar

spring-jdbc-5.0.0.RELEASE.jar

spring-tx-5.0.0.RELEASE.jar

(2)创建JdbcTemplate对象。依赖于数据源DataSource
  JdbcTemplate template = new JdbcTemplate(ds);

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

update():执行DML语句。增、删、改语句


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


queryForList():查询结果将结果集封装为list集合。注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中


query():查询结果,将结果封装为JavaBean对象
 * query的参数:RowMapper
 * 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
* new BeanPropertyRowMapper<类型>(类型.class)


queryForObject:查询结果,将结果封装为对象。一般用于聚合函数的查询。

2.部分示例

public class JDBCTemplateDemo1 {

    // 获取JDBC Template对象
    private JdbcTemplate getJdbcTemplate() throws Exception {
        Properties properties = new Properties();
        InputStream is = JDBCTemplateDemo1.class.getClassLoader().getResourceAsStream("druid.properties");
        properties.load(is);
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        return new JdbcTemplate(dataSource);
    }


    // queryForMap()
    // 查询id为1001的记录,将其封装为Map集合  注意:这个方法查询的结果集长度只能是1
    @Test
    public void test1() throws Exception {
        // 获取JDBC Template对象
        JdbcTemplate template = getJdbcTemplate();

        // Sql语句
        String sql = "select * from emp where id = ? or id = ?";

        // queryForMap 返回的是Map对象,只能封装一条数据
        Map<String, Object> map = template.queryForMap(sql, 1001,1002);

        //{id=1001, ename=孙悟空, job_id=4, mgr=1004, joindate=2000-12-17, salary=10000.00, bonus=null, dept_id=20}
        System.out.println(map);
    }


    // queryForList()
    // 查询所有记录,将其封装为List
    @Test
    public void test2() throws Exception {
        // 获取JDBC Template对象
        JdbcTemplate template = getJdbcTemplate();

        String sql = "select * from emp";
        List<Map<String, Object>> list = template.queryForList(sql);

        for (Map<String, Object> stringObjectMap : list) {
            System.out.println(stringObjectMap);
        }
    }



    // query()
    // 查询所有记录,将其封装为Emp对象的List集合
    @Test
    public void test3() throws Exception {

        // 获取JDBC Template对象
        JdbcTemplate template = getJdbcTemplate();

        String sql = "select * from emp";

        // important
        List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));

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


    // queryForObject
    // 查询总记录数
    @Test
    public void test4() throws Exception {

        // 获取JDBC Template对象
        JdbcTemplate template = getJdbcTemplate();
        
        String sql = "select count(id) from emp";
        Long total = template.queryForObject(sql, Long.class);
        System.out.println(total);
    }
}
原文地址:https://www.cnblogs.com/chichung/p/10319676.html