5.自定义BaseDao类

dao:data access object 数据库访问对象

1.针对所有表的查询抽象类

这个类不具体实现,都由其他类继承并实现相应的表的具体操作
抽象类中也可以没有抽象方法
定义了所有数据库事务增删改查操作的基本实现方法

public abstract class  BaseDao {
   
//        1.事务的增删改操作通用模板
//      主要是为了防止关闭连接后自动提交
    public void update(Connection conn, String sql, Object...vals){
   
//        可变形参vals的数量就是占位符的数量
        PreparedStatement ps=null;
        try {
   
//        2,实例化PreparedStatement对象
            ps=conn.prepareStatement(sql);
//        3.填充占位符
            for(int i=0;i<vals.length;i++){
   
                ps.setObject(i+1,vals[i]);
            }
//        4.执行
            ps.execute();
        } catch (Exception e) {
   
            e.printStackTrace();
        }finally {
   
            //        5.关闭资源
//            conn在方法外打开,也需要在方法外关闭
            JDBCUtils.closeResource(null,ps);
        }
    }
//    2.返回一个查询对象的方法
    //    <T>表示这是一个泛型方法,返回类型为T,T类型由实参传入
    public <T> T getInstance(Connection conn,Class<T> clazz,String sql,Object...vals){
   
        PreparedStatement ps= null;
        ResultSet rs= null;
        try {
   
//            2.预编译sql语句,占位符赋值
            ps = conn.prepareStatement(sql);
            for(int i=0;i<vals.length;i++){
   
                ps.setObject(i+1,vals[i]);
            }
//            3.获取结果集
            rs = ps.executeQuery();
            ResultSetMetaData rsmd=rs.getMetaData();
            int columnCount=rsmd.getColumnCount();
//            4,生成返回的结果集对象
            if(rs.next()){
   
//                通过声明的构造器,new一个T类型的对象
                T t=clazz.getDeclaredConstructor().newInstance();
                for(int i=0;i<columnCount;i++){
   
                    Object columnVal=rs.getObject(i+1);
                    String columnLabel=rsmd.getColumnLabel(i+1);
//                    反射为对象属性赋值
                    Field field=t.getClass().getDeclaredField(columnLabel);
                    field.setAccessible(true);
                    field.set(t,columnVal);
                }
                return t;
            }
        } catch (Exception e) {
   
            e.printStackTrace();
        }finally {
   
//            5.关闭资源连接
            JDBCUtils.closeResource(null,ps,rs);
        }
        return null;
    }
//    3.返回多个查询对象的方法
    //    返回多条记录
    public <T> List<T> getForList(Connection conn,Class<T> clazz, String sql, Object...vals){
   
        PreparedStateme
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值