Mysql-DBUtils(三)

一、为简化代码,使用DBUtils。

commons-dbutils是Apache提供的一个开源JDBC工具类库,它是对JDBC的简单封装。其中QueryRunner类封装了sql语句的执行,是线程安全的

(1)可以实现增、删、改、查、批处理

(2)考虑了事务处理需要共用Connecton

(3)简化了sql查询,它与ResultSetHandler组合在一起使用可以完成大部分数据库单

public int[ ] batch(Connection conn, String sql,ResultHandler<T>rsh.Object[][] params) throws SQLException:支持批处理insert,update,delete语句

二、Handler类型

ArrayHandler将结果集中第一条记录封装到Object[]数组中,数组中每一个元素就是这条记录中每一个字段的值
ArrayListHandler将结果集中每一条记录都封装到一个Object[]数组中,将这些数组再封装到List集合中
BeanHandler将结果集第一条记录封装到一个指定的javaBean中
BeanListHandler

将结果集每一条记录封装到指定的javaBean中,将这些javaBean再封装到List集合中

 utils包中JDBCTools类如下:

package com.xpu.jdbc.utils;


/*utils工具类中会三个提供方法:
1、获取连接池对象
2、从连接池中获取连接
3、将连接归还到连接池
*/


import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class JDBCTools {
    private static DataSource dataSource;
    static {
        try {
            //1、使用类加载器读取配置文件,转换成字节输入流
            InputStream is = JDBCTools.class.getClassLoader().getResourceAsStream("druid.properties");

            //2、使用properties对象加载字节输入流
            Properties properties = new Properties();
            properties.load(is);

            //3、使用DruidDataSourceFactory创建连接池对象
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**

    获取连接池对象
    @return

     */
    public static DataSource getDataSource() throws Exception {
        return dataSource;
    }

    /**
     * 获取连接池对象
     * @return
     *
     */
    public  static Connection getConnection()  {
        try {
            return dataSource.getConnection();
        } catch (Exception throwables) {
            throwables.printStackTrace();
            throw new RuntimeException(throwables.getMessage());
        }
    }

    public static void releaseConnection(Connection connection)  {
        //这里并不抛出编译时异常,而是当用户在运行时产生异常时,才会将这个异常抛出
        try {
            connection.close();
        } catch (Exception throwables) {
            throwables.printStackTrace();
            throw  new RuntimeException(throwables.getMessage());
        }
    }
}

 TestDBUtils类如下:

import com.xpu.jdbc.User;
import com.xpu.jdbc.utils.JDBCTools;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Before;
import org.junit.Test;

import java.sql.SQLException;
import java.util.List;

public class TestDBUtils {
    private QueryRunner queryRunner;
    @Before
    public void init() throws Exception {
        //1、创建QueryRunner对象
        queryRunner = new QueryRunner(JDBCTools.getDataSource());
    }
    @Test
    public void testInsert() throws Exception {
        /*
        //第一种方式:需要自己在执行sql语句是手动传入连接对象
        //往user表中添加一行数据
        QueryRunner queryRunner = new QueryRunner();
        //2、调用queryRunner对象的方法执行sql语句,如果实质性增删改的sql语句则调用update方法
        String sql = "insert into user(username,password,nickname) values(?,?,?)";
        // queryRunner.update(连接对象,sql语句,问号处的参数(属于可变参数))
        queryRunner.update(JDBCTools.getConnection(),sql,"dd","123456","ddd");
         */

        //第二种方式:直接将连接池对象交给QueryRunner
        // QueryRunner queryRunner = new QueryRunner(JDBCTools.getDataSource());
        //2、调用queryRunner对象的方法执行sql语句,如果实质性增删改的sql语句则调用update方法
        String sql = "insert into user(username,password,nickname) values(?,?,?)";
        // queryRunner.update(sql语句,问号处的参数(属于可变参数))
        queryRunner.update(sql,"dd","123456","ddd");
    }
    @Test
    public void testDelete() throws SQLException {
        //注意:这里也不需要关闭资源,因为底层已经关闭了
        //删除id为5的用户
        String sql = "delete from user where id=?";
        queryRunner.update(sql,5);
    }
    @Test
    public void testUpdate() throws SQLException {
        String sql ="update user set nickname=? where id=?";
        queryRunner.update(sql,"gai",4);
    }

    @Test
    public void testBatchAdd() throws Exception {
        //测试批量添加
        //编写sql语句
        String sql = "insert into user (username,password,nickname) values (?,?,?)";
        //创建一个二维数组,用于存储批量参数,第一维表示批量操作多少条数据,第二维表示每条数据要设置多少个参数
        Object[][] params = new Object[100][3];
        //循环设置批量添加的数据
        for(int i=0;i<100;i++){
            params[i][0] = "aobama" + i;
            params[i][1] = "123456";
            params[i][2] = "qq" + i;
        }
        queryRunner.batch(sql,params);
    }

    @Test
    public void testFindByID() throws SQLException {
        //使用DBUtils执行查询一行数据存到DBUtils中
        //查询到的这一行数据封装到User对象中
        String sql = "select * from user where id =?" ;
        //queryRunner执行查询的语句
        //这里用的是反射技术,DBUtils在编写时并不知道要将结果集存到哪个对象中,传user.class通过反射拿到字节码对象,将数据存到user中
        User user = queryRunner.query(sql, new BeanHandler<>(User.class), 7);
        System.out.println(user);
    }

    @Test
    public void testFindMore() throws SQLException {
        //查询多条数据:
        // 与查询一条数据的区别:使用的是List<User>集合,以及用的是BeanListHandler<>(User.class)

        String sql = "select * from user where id<?";

        //多条数据封装到List<User>中
        List<User> users = queryRunner.query(sql, new BeanListHandler<>(User.class), 10);
        System.out.println(users);
    }

    @Test
    public void testFindCount() throws SQLException {
        //目标:查询总用户数
        String sql = "select count(*)  from user ";
        //ScalarHandler<>()是处理单个数据的结果集
        Long query = queryRunner.query(sql, new ScalarHandler<>());
        System.out.println(query);
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
commons-dbutils-1.7 jar是Apache Commons项目中的一个Java库,主要用于简化和优化数据库操作。该jar包提供了一组实用工具类,可以减少编写JDBC代码的工作量,同时提供了一种简单而强大的方式来处理数据库连接和查询。 commons-dbutils-1.7 jar主要包括以下几个核心类和接口: 1. QueryRunner:用于执行SQL语句,提供了一系列的查询方法,可以方便地执行查询操作并返回结果。 2. ResultSetHandler:用于处理SQL查询结果集,提供了多种实现类如BeanHandler、BeanListHandler、ScalarHandler等,方便处理不同类型的查询结果。 3. ResultSetExtractor:用于提取结果集中的数据,可以通过自定义的方式从结果集中获取数据并进行处理。 4. BatchExecutor:用于执行批量SQL语句,可以一次性执行多个SQL语句,提高数据库操作的效率。 通过使用commons-dbutils-1.7 jar,可以简化数据库操作代码的编写过程,减少重复劳动。它隐藏了许多JDBC的细节,提供了一种更高级别的抽象,使开发者可以更加专注于业务逻辑的实现,而不是过多关注数据库操作的细节。 另外,commons-dbutils-1.7 jar还具备良好的可扩展性和灵活性,可以与其他开源框架(如Spring、Hibernate)和数据库(如MySQL、Oracle)无缝集成,以满足不同项目的需求。 总之,commons-dbutils-1.7 jar是一个功能强大且易于使用的Java库,可以简化和优化数据库操作,提高开发效率和代码质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值