JavaWeb学习笔记整理2

JavaWeb学习笔记整理2

Dao持久层BaseDao抽象类

在Dao持久层中,编写一个BaseDao抽象类,用作后面所有Dao实现类的父类;

后面根据功能先编写接口给定要用的方法,然后再编写实现类实现该接口,如下图所示:

 


实现类依功能而定,主要看BaseDao抽象类中的方法

先导入 commons.dbutils.jar工具类包

DBUtils封装了对JDBC的操作,简化了JDBC操作

DBUtils三个核心功能介绍:

QueryRunner类,提供对sql语句操作的API
ResultSetHandler接口,用于定义select操作后,怎样封装结果集
DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法


.QueryRunner类

QueryRunner(Database ds),提供了数据源(连接池),DBUtils底层自动维护connection

update(String sql, Object... params),执行更新数据。(增、删、改)

query(String sql, ResultSetHandler rsh, Object... params),执行查询
 

update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作;

query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作;

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

DBUtils提供了很多个ResultSetHandler接口的实现。

  • MapHandler:单行处理器!把结果集转换成Map,其中列名为键
  • MapListHandler:多行处理器!把结果集转换成List>;
  • BeanHandler:单行处理器!把结果集转换成Bean,该处理器需要Class参数,即Bean的类型;
  • BeanListHandler:多行处理器!把结果集转换成List;
  • ColumnListHandler:多行单列处理器!把结果集转换成List,使用ColumnListHandler时需要指定某一列的名称或编号,例如:new ColumListHandler(“name”)表示把name列的数据放到List中。
  • ScalarHandler:单行单列处理器!把结果集转换成Object。一般用于聚集查询,例如select count(*) from tab_student。
public abstract class BaseDao {
    //使用DBUtils
    private QueryRunner queryRunner = new QueryRunner();

    /**
     * update()方法用来执行:Insert,Update,Delete语句
     * @return  如果返回-1,说明执行失败,返回其他表示影响的行数
     */
    public int update(String sql,Object...args){
        Connection connection = JdbcUtils.getConnection();
        try {
            return queryRunner.update(connection,sql,args);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            throw new RuntimeException(throwables);
        }
    }

    /**
     * 查询返回一个JavaBean的sql语句
     * @param type 返回的对象类型
     * @param sql  执行的sql语句
     * @param args sql对应的参数值
     * @param <T>  返回的类型的泛型
     * @return
     */

    public <T> T queryForone(Class<T> type,String sql,Object...args){
        Connection connection = JdbcUtils.getConnection();
        try {
            return queryRunner.query(connection,sql,new BeanHandler<T>(type),args);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            throw new RuntimeException(throwables);
        }
    }

    /**
     * 查询返回多个JavaBean的sql语句
     * @param type 返回的对象类型
     * @param sql  执行的sql语句
     * @param args sql对应的参数值
     * @param <T>  返回的类型的泛型
     * @return
     */

    public <T> List<T> queryForlist(Class<T> type, String sql, Object...args){
        Connection connection = JdbcUtils.getConnection();
        try {
            return queryRunner.query(connection,sql,new BeanListHandler<T>(type),args);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            throw new RuntimeException(throwables);
        }
    }

    /**
     * 执行单行单列的sql语句,一般用于聚集查询,例如select count(*) from tab_student。
     * @param sql 执行的sql语句
     * @param args sql对应的参数
     * @return
     */

    public Object queryForSingleValue(String sql, Object...args){
        Connection connection = JdbcUtils.getConnection();

        try {
            return queryRunner.query(connection,sql,new ScalarHandler(),args);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            throw new RuntimeException(throwables);
        }
    }
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值