021 ssh综合(5)

==========================

抽取通用DAO

经过前面的编写,我们发现dao层很多东西都差不多,比如customer有查询全部,按id查询,分页查询,修改,保存

而linkMan也是同样的,甚至连函数名都一样,只是调用的对象不同,那么我们就可以写一个通用的方法

所有dao里相同的方法都给抽取出来,特有的方法我们保留

比如删除,保存,更新,只需要用泛型代替即可

再用具体的dao来继承通用的dao

那些update,save,delete就可以删掉了

实现类就不再是继承HibernateSupport,而是继承BaseDaoImp,同理customer也可以这样做

抽取查询

这个有点麻烦,我们先抽取查询一个数据的方法

但是查询的方法并不能直接用

可以提供构造方法来解决

这个时候子类就会报错,因为父类没有无参的构造函数,我们上面写了一个参数构造

所以子类也需要一个构造函数

改造一下,默认调用父类一个参数的构造

这个时候直接传入Customer.class即可解决

解决上面的问题,那么只要有具体类型的查询,那么就可以抽取

可以通过类属性描述符调用方法直接获取类的名称,这样就可以拼接了

而下面2个条件查询,可以直接写下来

用户模块里可以把save删了,但是login不行,因为只有user有login方法

字典的也可以改造

现在每个dao里面只需要提供构造方法即可,现在我连构造方法都不想提供

那么在baseDao里提供一个无参的构造方法即可,但是我们还需要具体的类提供类的描述符

所以就可以通过泛型的反射来解决

new的是哪个类,就是哪个类的class,如果new 父类,那么就是父类的class,如果new子类,那么就是子类的class

因为子类创建会默认调用父类的无参构造函数,所以可以在父类的构造函数里,取到具体的类型描述符

现在我们要获取的是这个上面的类

在api里有这2个方法

这个class就是我们调用的那个具体的类,比如customerDaoImp,而这个类描述符再调用getGenericSuperclass

就是获取到baseDaoImp<Customer>

反射的接口,参数化类型

猜你喜欢

转载自blog.csdn.net/yzj17025693/article/details/83687540