【Java】JDBC Part6 Apache-DBUtil & Spring-JdbcTemplate

Apache-DBUtils

开源的JDBC工具类,对JDBC的简单封装

SQL操作交给了QueryRunner的实例

Maven依赖

<!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
<dependency>
    <groupId>commons-dbutils</groupId>
    <artifactId>commons-dbutils</artifactId>
    <version>1.7</version>
</dependency>

常用API

插入语句测试【删改同理操作】

    @Test
    public void dbTest() throws SQLException {
        QueryRunner queryRunner = new QueryRunner();
        Connection connectionByOriginalJdbc = CompleteJdbcUtils.getConnectionByOriginalJdbc();
        String sql = "insert into user(user_name,user_password,user_createTime) values(?,?,?);";
        int update = queryRunner.update(connectionByOriginalJdbc, sql, "你弟含王", "121314",CompleteJdbcUtils.parseToSqlDate("1997-09-06"));
        System.out.println(update);
        CompleteJdbcUtils.releaseResource(connectionByOriginalJdbc,null,null);
    }

查询单个的QueryRunner 

- BeanHandler<T> 

    @Test
    public void dbTest2() throws SQLException {
        QueryRunner queryRunner = new QueryRunner();
        Connection connectionByOriginalJdbc = CompleteJdbcUtils.getConnectionByHikari();
        // 实体类处理器对象
        BeanHandler<User> beanHandler = new BeanHandler<User>(User.class);
        String sql = "select * from user where user_id = ?;";
        // 根据BeanHandler反射过去 只能处理单个对象返回
        User query = queryRunner.query(connectionByOriginalJdbc, sql, beanHandler,3);
        System.out.println(query);
        CompleteJdbcUtils.releaseResource(connectionByOriginalJdbc,null,null);
    }

用Map封装单个记录的 MapHandler,默认泛型<String,Object>

    @Test
    public void dbTest21() throws SQLException {
        QueryRunner queryRunner = new QueryRunner();
        Connection connectionByOriginalJdbc = CompleteJdbcUtils.getConnectionByHikari();
        // 实体类处理器对象
        MapHandler mapHandler = new MapHandler(); // <String,Object>
        String sql = "select * from user where user_id = ?;";
        // 根据BeanHandler反射过去 只能处理单个对象返回
        Map<String, Object> map = queryRunner.query(connectionByOriginalJdbc, sql, mapHandler, 3);
        System.out.println(map);
        CompleteJdbcUtils.releaseResource(connectionByOriginalJdbc,null,null);
    }

多个记录的BeanListHandler<T>处理

    @Test
    public void dbTest3() throws SQLException {
        QueryRunner queryRunner = new QueryRunner();
        Connection connectionByOriginalJdbc = CompleteJdbcUtils.getConnectionByHikari();
        // 实体类处理器对象
        BeanListHandler<User> beanHandler = new BeanListHandler<User>(User.class);
        String sql = "select * from user;";
        // 根据BeanHandler反射过去 返回List集合封装的对象的处理
        List<User> users = queryRunner.query(connectionByOriginalJdbc, sql, beanHandler);
        for (User user:users) {
            System.out.println(user);
        }
        CompleteJdbcUtils.releaseResource(connectionByOriginalJdbc,null,null);
    }

或者是MapListHandler,泛型是<String,Object>

    @Test
    public void dbTest31() throws SQLException {
        QueryRunner queryRunner = new QueryRunner();
        Connection connectionByOriginalJdbc = CompleteJdbcUtils.getConnectionByHikari();
        // 实体类处理器对象
        MapListHandler mapListHandler = new MapListHandler();
        String sql = "select * from user;";
        List<Map<String, Object>> maps = queryRunner.query(connectionByOriginalJdbc, sql, mapListHandler);
        for (Map map:maps) {
            System.out.println(map);
        }
        CompleteJdbcUtils.releaseResource(connectionByOriginalJdbc,null,null);
    }

ScalarHandler 用于特殊值的获取,例如聚合函数的操作

https://www.bilibili.com/video/BV1eJ411c7rf?p=53

自定义结果集处理器的方法

https://www.bilibili.com/video/BV1eJ411c7rf?p=54

JdbcTemplate来源于SpringJDBC

提供一个JDBC的模板来实现CRUD

本身不提供连接池和JDBC的功能,专门用于CRUD

所以你还需要前面所学过 厂商驱动 & 数据源【连接池】

这里不再赘述

导入依赖

        <!-- SpringJDBC JdbcTemplate -->

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>

常用的方法:

- update() 增、删、改

- queryForMap() 查询单个结果返回Map容器

- queryForList() 查询多个结果返回List容器

- query() 查询单个结果返回实体类对象

- queryForObject() 查询单个结果返回原型

UPDATE

    @Test
    public void update(){
        org.springframework.jdbc.core.JdbcTemplate jdbcTemplate = new org.springframework.jdbc.core.JdbcTemplate(CompleteJdbcUtils.getDataSourceFromHikari());

        String sql = "UPDATE user SET user_name = ?,user_password = ? WHERE user_id = ?";

        int update = jdbcTemplate.update(sql,"阿伟2","333666",1);

        System.out.println(update);
    }

调用存储过程和函数的资料:

https://www.cnblogs.com/lz2017/p/7500411.html
原文地址:https://www.cnblogs.com/mindzone/p/12769945.html