DBUtils

    xiaoxiao2025-10-31  8

    1 DBUtils简介

    DBUtils是Apache Commons组件中的一员,开源免费!

    DBUtils是对JDBC的简单封装,但是它还是被很多公司使用!

    DBUtils的Jar包:dbutils.jar

     

    2 DBUtils主要类

    l  DbUtils:都是静态方法,一系列的close()方法;

    l  QueryRunner:

    Ø  update():执行insert、update、delete;

    Ø  query():执行select语句;

    Ø  batch():执行批处理。

     

    3 QueryRunner之更新

    QueryRunner的update()方法可以用来执行insert、update、delete语句。

    1.       创建QueryRunner

    构造器:QueryRunner();

     

    2.       update()方法

    intupdate(Connection con, String sql, Object… params)

     

        @Test

        public void fun1() throws SQLException {

           QueryRunner qr = new QueryRunner();

           String sql = "insert into user values(?,?,?)";

           qr.update(JdbcUtils.getConnection(), sql, "u1", "zhangSan", "123");

        }

     

      还有另一种方式来使用QueryRunner

    1.       创建QueryRunner

    构造器:QueryRunner(DataSource)

     

    2.       update()方法

    intupdate(String sql, Object… params)

     

    这种方式在创建QueryRunner时传递了连接池对象,那么在调用update()方法时就不用再传递Connection了。

        @Test

        public void fun2() throws SQLException {

           QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());

           String sql = "insert into user values(?,?,?)";

           qr.update(sql, "u1", "zhangSan", "123");

        }

     

    4 ResultSetHandler

    我们知道在执行select语句之后得到的是ResultSet,然后我们还需要对ResultSet进行转换,得到最终我们想要的数据。你可以希望把ResultSet的数据放到一个List中,也可能想把数据放到一个Map中,或是一个Bean中。

    DBUtils提供了一个接口ResultSetHandler,它就是用来ResultSet转换成目标类型的工具。你可以自己去实现这个接口,把ResultSet转换成你想要的类型。

    DBUtils提供了很多个ResultSetHandler接口的实现,这些实现已经基本够用了,我们通常不用自己去实现ResultSet接口了。

    l  MapHandler:单行处理器!把结果集转换成Map<String,Object>,其中列名为键!

    l  MapListHandler:多行处理器!把结果集转换成List<Map<String,Object>>;

    l  BeanHandler:单行处理器!把结果集转换成Bean,该处理器需要Class参数,即Bean的类型;

    l  BeanListHandler:多行处理器!把结果集转换成List<Bean>;

    l  ColumnListHandler:多行单列处理器!把结果集转换成List<Object>,使用ColumnListHandler时需要指定某一列的名称或编号,例如:new ColumListHandler(“name”)表示把name列的数据放到List中。

    l  ScalarHandler:单行单列处理器!把结果集转换成Object。一般用于聚集查询,例如select count(*) from tab_student。

     

    Map处理器

     

    Bean处理器

     

    Column处理器

    Scalar处理器

     

    5 QueryRunner之查询

    QueryRunner的查询方法是:

    public<T> T query(String sql, ResultSetHandler<T> rh, Object… params)

    public<T> T query(Connection con, String sql, ResultSetHandler<T> rh,Object… params)

    query()方法会通过sql语句和params查询出ResultSet,然后通过rh把ResultSet转换成对应的类型再返回。

     

        @Test

        public void fun1() throws SQLException {

           DataSource ds = JdbcUtils.getDataSource();

           QueryRunner qr = new QueryRunner(ds);

           String sql = "select * from tab_student where number=?";

           Map<String,Object> map = qr.query(sql, new MapHandler(), "S_2000");

           System.out.println(map);

        }

       

        @Test

        public void fun2() throws SQLException {

           DataSource ds = JdbcUtils.getDataSource();

           QueryRunner qr = new QueryRunner(ds);

           String sql = "select * from tab_student";

           List<Map<String,Object>> list = qr.query(sql, new MapListHandler() );

           for(Map<String,Object> map : list) {

               System.out.println(map);

           }

        }

       

        @Test

        public void fun3() throws SQLException {

           DataSource ds = JdbcUtils.getDataSource();

           QueryRunner qr = new QueryRunner(ds);

           String sql = "select * from tab_student where number=?";

           Student stu = qr.query(sql, new BeanHandler<Student>(Student.class), "S_2000");

           System.out.println(stu);

        }

       

        @Test

        public void fun4() throws SQLException {

           DataSource ds = JdbcUtils.getDataSource();

           QueryRunner qr = new QueryRunner(ds);

           String sql = "select * from tab_student";

           List<Student> list = qr.query(sql, new BeanListHandler<Student>(Student.class)) ;

           for(Student stu : list) {

               System.out.println(stu);

           }

        }

       

        @Test

        public void fun5() throws SQLException {

           DataSource ds = JdbcUtils.getDataSource();

           QueryRunner qr = new QueryRunner(ds);

           String sql = "select * from tab_student";

           List<Object> list = qr.query(sql, new ColumnListHandler("name")) ;

           for(Object s : list) {

               System.out.println(s);

           }

        }

       

        @Test

        public void fun6() throws SQLException {

           DataSource ds = JdbcUtils.getDataSource();

           QueryRunner qr = new QueryRunner(ds);

           String sql = "select count(*) from tab_student";

           Number number = (Number)qr.query(sql, new ScalarHandler() );

           int cnt = number.intValue();

           System.out.println(cnt);

        }

     

    5 QueryRunner之批处理

    QueryRunner还提供了批处理方法:batch()。

    我们更新一行记录时需要指定一个Object[]为参数,如果是批处理,那么就要指定Object[][]为参数了。即多个Object[]就是Object[][]了,其中每个Object[]对应一行记录:

    @Test

    public void fun10() throws SQLException {

        DataSource ds = JdbcUtils.getDataSource();

        QueryRunner qr = new QueryRunner(ds);

        String sql = "insert into tab_student values(?,?,?,?)";

        Object[][] params = new Object[10][];//表示要插入10行记录

        for(int i = 0; i < params.length; i++) {

           params[i] = new Object[]{"S_300" + i, "name" + i, 30 + i, i%2==0?"":""};

        }

        qr.batch (sql, params);

    }

    转载请注明原文地址: https://ju.6miu.com/read-1303703.html
    最新回复(0)