BaseDao是什么

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

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

baseDao抽取


技术:反射+泛型

泛型术语介绍

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

baseDao抽取

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

* 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;

    }


相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-17
  • 2022-02-20
  • 2021-06-17
  • 2021-09-02
猜你喜欢
  • 2021-09-09
  • 2021-12-02
  • 2022-12-23
  • 2022-12-23
  • 2021-12-20
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案