dbutils学习笔记

前言:

刚昨天分离了dao层代码:
自定义工具类分离Dao层

今天又学习了dbutils这个工具组件:
我以为之前的分离dao层已经算是”极致”分离了,结果这个工具come out
让之前我写的那些冗余代码缩得只剩几行,真的是进步啊。
其实它的这个dbutils这个工具组件也算是封装了我的dao层,只是暴露了接口给我们调用而已。

工具是方便了操作 不过工具会让人变傻,让代码更像是粘贴复制的搬砖,  
所以底层的实现还是得一清二楚。

主要需要的实体类:不过一般都是前两个就行了。

BeanHandler: 查询返回单个对象
BeanListHandler: 查询返回list集合,集合元素是指定的对象
ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
ScalarHandler 查询返回结果记录的第一行的第一列  (在聚合函数统计的时候用)
MapHandler  查询返回结果的第一条记录封装为map
class dbutils {

    //处理单个更新
    @Test
    void updateTest() throws Exception {
        Connection conn = jdbcUtil.getConnection();
        QueryRunner queryRunner = new QueryRunner();
        String sql = "INSERT INTO student values(?,?)";

        queryRunner.update(conn, sql, 1, "聪聪");

        DbUtils.close(conn);
    }

    //批量处理修改操作
    @Test
    void batchTest() throws Exception {
        Connection conn = jdbcUtil.getConnection();
        QueryRunner queryRunner = new QueryRunner();
        String sql = "INSERT INTO student(id,name) values(?,?)";

        queryRunner.batch(conn, sql, new Object[][] { { 3, "丽萨" }, { 4, "凯莉" } });

        DbUtils.close(conn);
    }

    // 自定义方法
    @Test
    public void testquery() throws Exception {
        ResultSetHandler<Student> resultSetHandler = new ResultSetHandler<Student>() {
            @Override
            public Student handle(ResultSet arg0) throws SQLException {
                if (!arg0.next()) {
                    return null;
                }
                ResultSetMetaData resultSetMetaData = arg0.getMetaData();
                int count = resultSetMetaData.getColumnCount();
                Student student = new Student();
                for (int i = 0; i < count; i++) {
                     String name = resultSetMetaData.getColumnName(i+1);
                        Object value = arg0.getObject(name);
                        try {
                            BeanUtils.setProperty(student, name, value);
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                }
                return student;
            }
        };
        String sql = "SELECT *FROM student where id=?";
        Connection conn = jdbcUtil.getConnection();
        QueryRunner queryRunner = new QueryRunner();
        Student student = queryRunner.query(conn, sql, resultSetHandler, 11);
        System.out.println(student);
        DbUtils.close(conn);
    }

    //处理单个查询
        @Test
        void QueryOneTest() throws Exception {

            Connection conn = jdbcUtil.getConnection();
            QueryRunner queryRunner = new QueryRunner();
            String sql = "SELECT *FROM student where id=?";

            Student student = queryRunner.query(conn, sql, new BeanHandler<Student>(Student.class), 11);
            System.out.println(student);
            DbUtils.close(conn);
        }
        //处理多个查询
        @Test
        void QueryManyTest() throws Exception {

            Connection conn = jdbcUtil.getConnection();
            QueryRunner queryRunner = new QueryRunner();
            String sql = "SELECT *FROM student";

            List<Student> students = queryRunner.query(conn, sql, new BeanListHandler<Student>(Student.class));

            System.out.println(students);
            DbUtils.close(conn);
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值