zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    Java for LeetCode 229 Majority Element II
    Java for LeetCode 228 Summary Ranges
    Java for LeetCode 227 Basic Calculator II
    Java for LintCode 颜色分类
    Java for LintCode 链表插入排序
    Java for LintCode 颠倒整数
    Java for LintCode 验证二叉查找树
    Java for LeetCode 226 Invert Binary Tree
    Java for LeetCode 225 Implement Stack using Queues
    Java for LeetCode 224 Basic Calculator
  • 原文地址:https://www.cnblogs.com/mindzone/p/12769945.html
Copyright © 2011-2022 走看看