使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
2014-02-27 09:51
459 查看
CommonDao.java
CommonDaoImpl.java
上述代码中,CommonDaoImpl.java的构造函数,实现Dao泛型。
UserDao.java
UserDao中再也不用写增删改查了。直接写个性化的操作就行了。
说明: getGenericSuperclass() 通过反射获取当前类表示的实体(类,接口,基本类型或void)的直接父类的Type,getActualTypeArguments()返回参数数组。
这时,我们就可以使用泛型来简化DAO的操作,省去了写N多有重复的方法的DAO的时间。
ps:以上代码,基于SSH框架
package com.itheima03.oa.dao.base; import java.io.Serializable; import java.util.Collection; public interface CommonDao<T> { public Collection<T> getAllEntry(); public T getEntryById(Serializable id); public void updateEntry(T t); public void saveEntry(T t); public void deleteEntry(Serializable id); }
CommonDaoImpl.java
package com.itheima03.oa.dao.base.impl; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.util.Collection; import java.util.HashSet; import javax.annotation.Resource; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.itheima03.oa.dao.base.CommonDao; public class CommonDaoImpl<T> implements CommonDao<T>{ @Resource(name="hibernateTemplate") public HibernateTemplate hibernateTemplate; private Class classt; public CommonDaoImpl(){ ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass(); this.classt = (Class)type.getActualTypeArguments()[0]; type.getRawType(); } @Override public void deleteEntry(Serializable id) { T t = this.getEntryById(id); this.hibernateTemplate.delete(t); } @Override public Collection<T> getAllEntry() { // TODO Auto-generated method stub return this.hibernateTemplate.find("from "+this.classt.getName()); } @Override public T getEntryById(Serializable id) { // TODO Auto-generated method stub return (T)this.hibernateTemplate.get(this.classt, id); } @Override public void saveEntry(T t) { // TODO Auto-generated method stub this.hibernateTemplate.save(t); } @Override public void updateEntry(T t) { // TODO Auto-generated method stub this.hibernateTemplate.update(t); } }
上述代码中,CommonDaoImpl.java的构造函数,实现Dao泛型。
UserDao.java
package com.itheima03.oa.dao; import java.util.Collection; import com.itheima03.oa.dao.base.CommonDao; import com.itheima03.oa.domain.User; public interface UserDao<T> extends CommonDao<T>{ public Collection<User> getAllUser(); public User getUserByUAndP(String username,String password); }
UserDao中再也不用写增删改查了。直接写个性化的操作就行了。
说明: getGenericSuperclass() 通过反射获取当前类表示的实体(类,接口,基本类型或void)的直接父类的Type,getActualTypeArguments()返回参数数组。
这时,我们就可以使用泛型来简化DAO的操作,省去了写N多有重复的方法的DAO的时间。
ps:以上代码,基于SSH框架
相关文章推荐
- 使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
- 使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
- 使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
- 使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
- 使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
- 使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
- 使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
- 使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
- 使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
- 使用((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]的实例
- ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]
- Java中BaseDao方法以(ParameterizedType) getClass().getGenericSuperclass().getActualTypeArguments()[0]处理方式
- (ParameterizedType) getClass().getGenericSuperclass().getActualTypeArguments()[0]得到的是什么?
- ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]
- ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]
- ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]
- ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]
- getSimpleName(),getClass(),getGenericSuperclass()和getActualTypeArguments()的返回结果
- ParameterizedType getGenericSuperclass 获取泛型参数;class getClass区别
- java反射获得泛型参数GETGENERICSUPERCLASS()