DBUtils工具类 —— 操作数据库工具类Apache

DBUtils工具类(会用)

1.必须会用
2.先感叹,再导入jar包。
    * commons-dbutils-1.4.jar   

3.核心的类和方法
    * QueryRunner类(完成增删改查的功能)
        * QueryRunner()                     -- 没有帮咱们管理连接
        * QueryRunner(DataSource ds)        -- 传入连接池进来(自己已经帮咱们去管理连接了)

        * int update(String sql, Object... params) 
        * int update(Connection conn, String sql, Object... params)

        *  <T> T query(String sql, ResultSetHandler<T> rsh, Object... params) 
        *  <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) 

    * 总结
        * 如果不使用事务
            * QueryRunner(DataSource ds) 
            * int update(String sql, Object... params) 
            * <T> T query(String sql, ResultSetHandler<T> rsh, Object... params) 

        * 如果使用事务
            *  QueryRunner() 
            *  int update(Connection conn, String sql, Object... params)
            *  <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) 

        * 为什么有用?
            * 事务加在业务层,在业务层中开启事务,把conn传递到DAO层。
            * 在DAO层编写JDBC的代码(可以使用DBUtils来完成的),

    * ResultSetHandler接口,用户使用查询的功能,必须要提供该接口的实现类,提供了9个实现类。
        *  ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, ColumnListHandler, KeyedHandler, MapHandler, MapListHandler, ScalarHandler

    * DbUtils
        * 和释放资源和管理事务相关的类
        *  static void  commitAndClose(Connection conn)
        *  static void  rollbackAndClose(Connection conn) 
        *  static void  rollback(Connection conn) 
        *  static void  close(Statement stmt)

修改我的工具类(自己修改工具类)

1.代码
    /**
     * 获取C3P0的连接池
     * @return
     */
    public static DataSource getDataSource(){
        return dataSource;
    }

2.代码(测试QueryRunner类)

    import java.sql.ResultSet;
    import java.sql.SQLException;

    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.ResultSetHandler;
    import org.junit.Test;

    import cn.itcast.utils.MyJdbcUtil2;
    import cn.itcast.vo.Account;

    public class DbutilsDemo {

        @Test
        public void run1(){
            QueryRunner runner = new QueryRunner(MyJdbcUtil2.getDataSource());
            String sql = "insert into t_account values (null,?,?)";
            // 如果做增删改的操作
            try {
                runner.update(sql, "冠西",100);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        @Test
        public void run2(){
            QueryRunner runner = new QueryRunner(MyJdbcUtil2.getDataSource());
            String sql = "select * from t_account where id = ?";
            try {
                Account ac = runner.query(sql, new BeanHandler(), 4);
                System.out.println(ac);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }


    class BeanHandler implements ResultSetHandler<Account>{
        public Account handle(ResultSet rs) throws SQLException {
            Account ac = new Account();
            // 自己封装
            if(rs.next()){
                ac.setId(rs.getInt("id"));
                ac.setUsername(rs.getString("username"));
                ac.setMoney(rs.getDouble("money"));
            }
            return ac;
        }
    }

ResultSetHandler接口的实现类(重点的要掌握)

1.不想使用实现类,没有任何问题,自己定义实现类。
2.使用实现类,编写代码更简单。
    * (掌握)BeanHandler           -- 将一条记录,封装到一个Java对象。Account
    * (掌握)BeanListHandler       -- 将一条记录,封装到一个Java对象中,把这些对象封装到一个List集合中。List<Account>

    * ArrayHandler          -- 将一条记录,封装到一个数组中。
    * ArrayListHandler      -- 将已经记录封装到数组中,把这些数组封装到List集合中。

    * MapHandler            -- 将一条记录,封装到一个Map集合中
    * MapListHandler        -- 将一条记录封装到一个Map集合中,在把map集合封装到List集合中

    * (掌握)ScalarHandler     -- 编写聚集函数。(分页)      
    * ColumnListHandler -- 有可能查询只有某一列数据。(select money from t_account)
    * (掌握)KeyedHandler      -- 把一条记录封装到一个Map集合中,再把Map集合封装到一个大的Map集合。

你可能感兴趣的:(apache,DBUtils工具类)