使用dbutils

环境准备:
包结构:
这里写图片描述

mysql导出sql脚本:

//product
CREATE TABLE `product` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `description` varchar(20) DEFAULT NULL,
  `create_date` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
==============================
//user
CREATE TABLE `user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(10) DEFAULT NULL,
  `password` varchar(10) DEFAULT NULL,
  KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

===============================
使用dbutils:
导入jar包:commons-dbutils-1.3.jar
测试:

//dbutils: jdbc 的工具类. 使用它可以更好的使用JDBC
    @Test
    public void testDbutilsUpdate(){
        //1. 创建 QueryRunner 的实例
        QueryRunner queryRunner = new QueryRunner();

        //2. 调用其方法进行 CRUD 操作: create read update delete
        //2.1 update(Connection, sql, args); 可以进行 CREATE、UPDATE 和 DELETE 操作
        Connection connection = null;

        try {
            connection = JdbcUtils.getConnection();
             String sql="insert into product(name,description,create_date) values(?,?,?)";
        //String sql="update product set name=?,description=?,create_date=? where id=?";
        //String sql = "delete from product where id=?";

            queryRunner.update(connection, sql, "PRO 5","MEIZU", new Date());
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            JdbcUtils.close(connection);
        }
    }
=======================================
@Test
    public void testDbUtilsQuery(){
        //1. 创建 QueryRunner 的实例
        QueryRunner queryRunner = new QueryRunner();

        //2. 进行READ操作: 调用QueryRunne的query()方法
        Connection connection = null;

        try {
            connection = JdbcUtils.getConnection();
            String sql = "SELECT id, name, description as \"desc\", create_date as \"createDate\" "
                    + "FROM product";

            //选择合适的 ResultSetHandler. 
            ResultSetHandler<List<Product>> rsh = new BeanListHandler(Product.class);
            List<Product> products = queryRunner.query(connection, sql, rsh);

            System.out.println(products);
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            JdbcUtils.close(connection);
        }
    }
==================================

    @Test
    public void testDbUtilsResultSetHandler(){
        //1. 创建 QueryRunner 的实例
        QueryRunner queryRunner = new QueryRunner();

        //2.进行READ操作: 调用QueryRunne的query()方法
        Connection connection = null;

        try {
            connection = JdbcUtils.getConnection();
            String sql = "SELECT id, name, description as \"desc\", create_date as \"createDate\" "
                    + "FROM product";

            //具体返回什么样式的数据, 取决于传入的 ResultSetHandler 的类型.
            //1. 若传入 ArrayListHandler, 则返回的是 数组类型的 List. 
//          ResultSetHandler rsh = new ArrayListHandler();
            //2. 若传入 MapListHandler, 则返回的是 Map 类型的 List
            ResultSetHandler rsh = new MapListHandler();

            //选择合适的 ResultSetHandler. 
            List results = queryRunner.query(connection, sql, rsh);
            for(Object object: results){
                System.out.println(object);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            JdbcUtils.close(connection);
        }
    }

=========================================
@Test
    public void testDbUtilsResultHandler2(){
        //1. 创建 QueryRunner 的实例
        QueryRunner queryRunner = new QueryRunner();

        //2.进行READ操作: 调用QueryRunne的query()方法
        Connection connection = null;

        try {
            connection = JdbcUtils.getConnection();
            String sql = "SELECT id, name, description as \"desc\", create_date as \"createDate\" "
                    + "FROM product WHERE id = ?";

            //具体返回什么样式的数据, 取决于传入的 ResultSetHandler 的类型.
            ResultSetHandler rsh = new ArrayHandler();

            //选择合适的 ResultSetHandler. 
            Object results = queryRunner.query(connection, sql, rsh, 1);
            System.out.println(results);
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            JdbcUtils.close(connection);
        }
    }

小结:
1、 进行 UPDATE 操作(增、删、改): 调用 QueryRunner 的
public int update(Connection conn, String sql, Object… params) 方法即可.
2、进行 READ (查)操作: 调用 QueryRunner 的
public T query(Connection conn, String sql, ResultSetHandler rsh,
Object… params) 方法.

=================================
关于READ操作的关键点是:ResultSetHandler
它是结果集处理器: 可以把结果集转为需要的目标类型.
经典的实现:
BeanHandler: 适用于返回单条数据. 把结果集转为一个 JavaBean 对象返回
BeanListHandler: 适用于返回多条数据. 把结果集转为一个 JavaBean 的集合返回

MapHandler: 适用于返回单条数据. 把结果集转为一个 Map 对象返回.
MapListHandler: 适用于返回多条数据. 把结果集转为以个 Map 的 List 返回

==============
此部分结果集的处理还涉及到集合知识点,需要学习,未完待续!

posted @ 2017-09-07 22:32  libingshen  阅读(93)  评论(0编辑  收藏  举报