关于HIbernate在dao层的最佳实践。
来源:互联网 发布:计算机c语言基础知识 编辑:程序博客网 时间:2024/04/28 12:17
Hi ~大家好,好久没写博客了。最近复习一些框架的知识,顺便写些东西来整理一下。
今天要记录的就是关于hibernate在dao层的增删改查。
相信很多刚入门的朋友在写dao层代码的时候,都是一个实体对应一个dao
然后里面都是写满了增删改查,自己以前也是,不过为了效率,我们必须剔除这些冗余代码了。
反射 + 泛型 可以帮我们解决这些东西。
首先这是项目的一些简单架构
说明 :
第一步: BaseDao<T>
/** * 使用泛型 使传入的实体类型不受限制 * 减少各自独立的dao操作 * @author wzh * * @param <T> */public interface BaseDao<T> {//增加void save(T entity);//删除void delete(Long id);//修改void update(T entity);//根据ID获取T getById(Long id);//根据多个ID获取List<T> getByIds(Long[] id);//获取所有List<T> findAll();}
然后继续对dao进行抽象:
public class BaseDaoImpl<T> implements BaseDao<T> {@Resourceprivate SessionFactory sf ;private Class<T> clazz = null;//获得T的真实类型public BaseDaoImpl(){ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();//第一个真实类型this.clazz = (Class<T>) pt.getActualTypeArguments()[0];System.out.println(clazz);}//获得当前的sessionprotected Session getSession(){return this.sf.getCurrentSession();}public void delete(Long id) {Object obj = getById(id);if(obj != null){getSession().delete(obj);}}public List<T> findAll() {return getSession().createQuery("FROM "+clazz.getSimpleName()).list();}public T getById(Long id) {return (T) getSession().get(clazz, id);}public List<T> getByIds(Long[] ids) {return getSession().createQuery(//"FROM "+clazz.getSimpleName()+" WHERE id IN (:ids)").setParameterList("ids", ids).list();}public void save(T entity) {getSession().save(entity);}public void update(T entity) {getSession().update(entity);}}
解释: 在构造函数中,可以动态的获取泛型传入的类型,即使传入User、Student、Teacher等实体
我们仅需要在这些实体对应的dao实现类上这样干就行。
public class StudentDaoImpl extends BaseDaoImpl<Student> implements StudentDao {}
这样一来 增删改查都不用再写了,以后只需要根据项目的业务来增加或修改方法就可以了,是不是减少了很多冗余代码呢?
0 0
- 关于HIbernate在dao层的最佳实践。
- 笔记:关于hibernate在dao层要导入的包
- hibernate的dao层
- DAO模式最佳实践
- DAO模式最佳实践
- Hibernate 对Dao层的处理实例
- 我的hibernate通用dao层
- hibernate的dao层实现条件查询
- 我的hibernate通用dao层 .
- 我的hibernate通用dao层
- hibernate的dao层通用设计
- Hibernate dao 层
- hibernate的DAO层主要应用在跨数据库,跨平台上
- 利用hibernate对dao层和service层的重用
- 关于ssh为什么要在DAO层实现类中继承HibernateDaoSupport的原因
- 关于service层和dao层的设计。(转载)
- Hibernate最佳实践
- Hibernate最佳实践
- Python获取文件及文件夹大小
- 电脑网站识别手机浏览,把域名换成手机域名
- Uni2D 入门 -- Animation Clip 和 Animation API
- c++ 中文字符处理
- 内存对齐
- 关于HIbernate在dao层的最佳实践。
- Uni2D 入门 -- Atlas
- IO编程——文件复制操作
- contanier_of offsetof list_for_each list_for_each_entry
- SQL语句学习杂谈
- 用Flex4 开发的Flv播放器
- Maven 入门 (2)—— 创建Maven项目
- jsp的九个内置对象
- Linux下数据处理常用命令及选项(二)