利用反射泛型编写一个通用Dao
来源:互联网 发布:淘宝联盟批量链接工具 编辑:程序博客网 时间:2024/05/22 06:58
首先明确几个概念:
ArrayList<E>: E为类型参数变量
ArrayList<Integer> :Integer为实际参数变量
ArrayList<E>: 整个表达式称为参数化类型,对应类型为ParameterizedType
在数据库编程中,需要编写很多DAO,对数据库的操作包括增删改查,利用泛型技术和类的继承,可以编写一个通用的BaseDao, BaseDao负责实现这些增删改查操作。
下面是基于Hieberate的实现:
BaseDao类
import org.hibernate.Session;public class BaseDao<T> { //T类型由子类指定private Class clazz;private Session session;通过子类调用父类构造函数,来获取子类传过来的子类ClassBaseDao(Class clazz){this.clazz = clazz;System.out.println(this.clazz);}public void add(T t){session.save(t);}public T find(String id){return (T)session.get(clazz, id);}public void update(String id){session.update(id);}public void del(String id){T t = (T)session.get(clazz, id);session.delete(t);}}子类的实现:子类在继承BaseDao时,指明Store类型
public class StoreDao extends BaseDao<Store>{StoreDao() {super(Store.class);// TODO Auto-generated constructor stub}}
public class BookDao extends BaseDao<Book> {BookDao() {super(Book.class);// TODO Auto-generated constructor stub}}
测试程序:
public static void main(String[] args) {// TODO Auto-generated method stubBookDao bDao = new BookDao();StoreDao sDao = new StoreDao();}输出:
class cn.itcast.generic.Bookclass cn.itcast.generic.Store
上面的程序时通过之类在创建构造函数时,通过调用父类的有参构造函数将子类的Class,传给BaseDao。在此可以使用泛型反射方法对上类进行改造。其目的是让BaseDao自己在其内部获取到子类指定的T(即下例中的Book)类型,如:
public class BookDao extends BaseDao<Book>这样子类就不用通过调用父类的构造函数将其指定的Class传递给BaseDao.下面是改造后的程序:
BaseDao(){clazz = this.getClass(); //获取子类的Class,如BookDao.classParameterizedType pt = (ParameterizedType) clazz.getGenericSuperclass(); //获取子类的父类泛型参数,///即类似BookDao<Book>clazz = (Class)pt.getActualTypeArguments()[0];//即获取到BookDao<Book>中的BookSystem.out.println(clazz);}子类可以直接写成如下:
public class BookDao extends BaseDao<Book> {}
public class StoreDao extends BaseDao<Store>{}和之前同样的测试程序,获得同样的测试结果
0 0
- 利用反射泛型编写一个通用Dao
- 利用反射泛型编写通用的Dao
- 利用泛型和反射编写通用基础类型转换方法
- 利用Java反射、泛型和apache/poi编写可通用的导出Excel代码
- java中利用反射编写通用servlet
- 利用java的反射机制实现通用dao
- Java反射结合JDBC写的一个通用DAO
- 利用Android反射与泛型机制写一个通用的Adapter类
- 利用泛型和反射机制抽象DAO
- 利用java反射机制编写通用的toString 方法
- JDBC:利用 ResultSetMetaData 和反射编写通用查询方法
- hibernate通用泛型dao
- hibernate 通用泛型DAO
- 编写通用的DAO类
- 利用反射机制设计Dao
- 一个通用的Hibernate DAO
- 一个通用dao的实现
- 一个通用的Hibernate DAO
- hdu 2044 (水题)
- 二分总结一 二分法试解 POJ1064
- Linux vi编辑器的基本命令
- ubuntu13.10 多系统安装
- Linux 搭建svn服务器
- 利用反射泛型编写一个通用Dao
- Linux yum详解
- poj 1028 Web Navigation
- Linux 切换用户
- sga_target或shared_pool_size非正常值导致ORA-00093解决办法
- 理解一般指针和指向指针的指针
- Mysql 导出导入
- 最少操作次数(英雄会)
- Linux下操作Mysql