Java 中利用泛型和反射机制抽象DAO的实例

网友投稿 287 2023-04-28


Java 中利用泛型和反射机制抽象DAO的实例

java 中利用泛型和反射机制抽象DAO的实例

一般的DAO都有CRUD操作,在每个实体DAO接口中重复定义这些方法,不如提供一个通用的DAO接口,具体的实体DAO可以扩展这个通用DAO以提供特殊的操作,从而将DAO抽象到另一层次,令代码质量有很好的提升

1.通用接口

import java.io.Serializable;

import java.util.List;

public interface BaseDao {

T get(Serializable id);

List getAll();

// List find(String hql,);

void save(Object o);

void remove(Object o);

void update(Object o);

}

2.DAO基类

import java.io.Serializable;

import java.lang.reflect.ParameterizedType;

import java.lang.reflect.Type;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class HibernateBaseDao extends HibernateDaoSupport implements BaseDao{

private Class entityClass;

public HibernateBaseDao() {

Type genType = getClass().getGenericSuperclass();

Type[] params = ((ParameterizedType) genType).getActualTypeArguments();

entityClass = (Class)params[0];

}

public T get(Serializable id) {

return (T)getHibernateTemplate().load(entityClass, id);

}

public List getAll() {

return getHibernateTemplate().loadAll(entityClass);

}

public void save(Object o) {

getHibernateTemplate().saveOrUpdate(o);

}

public void remove(Object o) {

getHibernateTemplate().delete(o);

}

public void update(Object o) {

getHibernateTemplate().update(o);

}

}

这里利用反射机制获取泛型对应的实体类的类型

3.实体DAO类

import java.util.Iterator;

import java.util.List;

import com.baobaotao.dao.ForumDao;

import com.baobaotao.dao.HibernateBaseDao;

import com.baobaotao.domain.Forum;

public class ForumHibernateDao2 extends HibernateBaseDao implements ForumDao{

public long getForumNum() {

Iterator iter = getHibernateTemplate().iterate(

"select count(f.forumId) from Forum f");

return ((Long)iter.next());

}

}

通过扩展泛型DAO基类,就自动拥有基类的数据操作功能,只要提供特殊的功能即可,实体DAO的编码生产率得到了极大的提高

以上就是Java 中利用泛型和反射机制抽象DAO的实例的讲解,大家如果对泛型及反射机制有不明白的可以查询本站的相关文章或者留言交流,到社区提问,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
下一篇:Spring加载加密的配置文件详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~