baseDao抽取

BaseDao是什么

1)可以把dao层重复代码抽取

2)在dao里面做crud操作,调用hibernateTemplate里面的方法都一样,只是传递参数不一样。如果添加客户传递客户对象,如果添加联系人传递联系人对象


技术:反射+泛型

泛型术语介绍

1List<User>

* < >:称为typeof

* List<User>整体部分,称为参数化类型

* <>里面User,这个User,称为实际类型参数

第一步创建BaseDao接口,定义crud操作的方法

/**

 * 创建接口,定义crud操作方法

 * 在类或者接口上面添加<>,里面大写字母,泛型类,

 * 大写字母代表任意类型

 */

publicinterface BaseDao<T>{

 

    //添加

    publicvoid add(Tt);

   

    //修改

    publicvoid update(Tt);

   

    //删除

    publicvoid delete(Tt);

   

    //根据id查询

    publicTfindOne(intid);

   

    //查询所有

    public List<T> findAll();

}

 

第二步创建BaseDao接口实现类,实现crud操作的方法

publicclass BaseDaoImpl<T>extends HibernateDaoSupportimplements BaseDao<T> {

 

    privateClassclazz;

    //根据id查询

    @SuppressWarnings("unchecked")

    public T findOne(intid) {

       //get方法第一个参数传递实体类class

       return (T)this.getHibernateTemplate().get(clazz,id);

    }

 

    //查询所有

    @SuppressWarnings("unchecked")

    public List<T> findAll(){

       return (List<T>)this.getHibernateTemplate().find("from"+clazz.getSimpleName());

    }

   

    //添加

    publicvoid add(Tt) {

       this.getHibernateTemplate().save(t);

    }

 

    //修改

    publicvoid update(Tt) {

       this.getHibernateTemplate().update(t);

    }

 

    //删除

    publicvoid delete(Tt) {

       this.getHibernateTemplate().delete(t);

    }

}

第三步让具体接口继承BaseDao接口

1)去掉crud操作的方法

第四步让具体接口实现类继承BaseDao实现类

1)去掉crud操作的方法

第一种实现:在BaseDaoImpl实现类里面获取实体类class

第二种实现:使用反射术语操作

* List<User>整体部分:称为参数化类型

* <User>:里面User,称为实际类型参数

    //生成无参数构造

    public BaseDaoImpl() {

       //1获取子类对象class

       Class clazz = this.getClass();

       //2获取参数化类型 getGenericSuperclass()

       //返回Type代表参数化类型,一般使用这个Type接口子接口ParameterizedType

       Type type = clazz.getGenericSuperclass();

       ParameterizedType ptype = (ParameterizedType) type;

      

       //3获取实际类型参数 getActualTypeArguments()

       // Type[]数组类型

       Type[] types = ptype.getActualTypeArguments();

       Class tclass = (Class) types[0];

       this.clazz =tclass;

    }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值