Java 中利用泛型和反射机制抽象DAO的实例
时间:2021-02-28 14:49:00|栏目:JAVA代码|点击: 次
Java 中利用泛型和反射机制抽象DAO的实例
一般的DAO都有CRUD操作,在每个实体DAO接口中重复定义这些方法,不如提供一个通用的DAO接口,具体的实体DAO可以扩展这个通用DAO以提供特殊的操作,从而将DAO抽象到另一层次,令代码质量有很好的提升
1.通用接口
import java.io.Serializable;
import java.util.List;
public interface BaseDao<T> {
T get(Serializable id);
List<T> getAll();
// List<T> 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<T> extends HibernateDaoSupport implements BaseDao<T>{
private Class<T> 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<T> 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<Forum> implements ForumDao{
public long getForumNum() {
Iterator iter = getHibernateTemplate().iterate(
"select count(f.forumId) from Forum f");
return ((Long)iter.next());
}
}
通过扩展泛型DAO基类,就自动拥有基类的数据操作功能,只要提供特殊的功能即可,实体DAO的编码生产率得到了极大的提高
以上就是Java 中利用泛型和反射机制抽象DAO的实例的讲解,大家如果对泛型及反射机制有不明白的可以查询本站的相关文章或者留言交流,到社区提问,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




