在谈包装之前,我们先看一看以下几个论断:
- 牛人们都说dao是反模式,认为需要取消dao。
- 以前写个dao,需要一个DAO的基类、spring的注入、泛型,甚至要声明一个dao的接口,比较繁琐。
大多数情况下,我认为我们需要一个简单的实现,既不要程序员为了处理数据,声明dao的实现,做很多事情,又能比较方便的实现对数据操作的解耦。JPA的EntityManager提供了一个很好的例子,但是如果我们用Hibernate则无法使用。于是参考JPA的EntityManager实现,和SpringSide的SimpleHibernateDao实现,我们对Session做如下的封装,代码参见附件。
通过在Service中注入这个Wrapper,我们就拥有了简单的数据访问能力,而不需要为每个业务声明DAO的接口,并将其注入Service或在Service中实例化。也不用该类提供任何泛型的定义,只要给出实体类的声明即可。看一个Service的列子:
@Autowired
protected HibernateSessionWrapper wrapper;
@Transactional(readOnly = true)
public Customer get(Long id) {
return wrapper.get(Customer.class, id);
}
public Customer logicDelete(Long id) {
Customer customer = get(id);
customer.setStatus(Customer.STATUS_INACTIVE);
wrapper.save(customer);
return customer;
}
Java的贫血性pojo工作的很好,何乐而不为:)
分享到:
相关推荐
Hibernate是一个开源的Java ORM框架,它简化了Java应用与数据库之间的交互。通过Hibernate,开发者可以创建Java对象(实体类),这些对象与数据库中的表进行映射,从而实现对数据库数据的CRUD(创建、读取、更新、...
例如,对数据库的多个操作可以包装在一个事务中,如果其中任何一步失败,整个事务将回滚,保持数据的完整性。 在查询方面,Hibernate支持HQL(Hibernate Query Language)和 Criteria API,它们提供了面向对象的...
Hibernate是一个开源的ORM框架,它的核心是Session接口,它是与数据库交互的主要接口。Session提供了对持久化对象的生命周期管理,包括保存、更新、删除和查询操作。 **2. 增加(Insert)** 在Hibernate中,增加...
描述中提到的"在felix2.0.1扩展Hibernate,使之工作于OSGI框架之中"意味着我们需要对Hibernate进行适当的包装和配置,以便它能与Felix的模块化体系结构兼容。这通常涉及到创建OSGI bundles,每个bundle封装一个或多...
有效的Session管理:Spring提供了有效、简单、安全的Hibernate Session处理。 IoC容器降低了DAO组件与业务逻辑层之间的耦合性。 DAO模式的使用,降低了系统重构的代价。 方便的事务管理:Spring提供的声明式事务处理...
HibernateTemplate是Spring为简化Hibernate操作而设计的一个类,它包装了Hibernate的Session对象,提供了事务管理、异常转换等功能。使用HibernateTemplate,开发者无需手动管理Session,避免了可能出现的资源泄露...
Struts2是Apache软件基金会下的一个项目,它提供了强大的动作调度和视图渲染功能,而Hibernate则是一个对象关系映射(ORM)工具,能够将Java类与数据库表进行映射,简化数据库操作。 **Struts2整合Hibernate的核心...
第3章 第一个Hibernate应用 3.1 创建Hibernate的配置文件 3.2 创建持久化类 3.3 创建数据库Schema 3.4 创建对象-关系映射文件 3.4.1 映射文件的文档类型定义(DTD) 3.4.2 把Customer持久化类映射到...
在Spring框架中,整合Hibernate作为持久层解决方案是一个常见的实践。Spring通过`LocalSessionFactoryBean`类实现了对Hibernate的驱动,使得开发者能够更加灵活和方便地管理数据持久化操作。`...
2. **使用HibernateTemplate**:Spring提供了一个HibernateTemplate类,它是对Hibernate Session的简单包装,提供了事务安全的CRUD操作。通过注入HibernateTemplate,可以在业务逻辑层调用其方法执行数据库操作。 3...
- 最佳实践中,推荐使用HibernateTemplate或者HibernateDaoSupport,它们是Spring提供的对Hibernate的简单包装,可以避免手动管理Session和事务。 7. **测试与优化** - 使用JUnit进行单元测试,验证整合是否成功...
Hibernate是一个开源的持久层框架,它在对象关系映射(ORM)领域中应用广泛。Hibernate通过简化JDBC编程,提供了一个对象/关系映射工具,允许开发者使用对象的方式操作数据库。以下是关于Hibernate开发基础的详细...
处于持久化状态的Java对象位于一个Session实例的缓存中,Session能根据这个对象的属性变化来同步更新数据库。 8.1 Java对象在JVM中的 生命周期 179 8.2 理解Session的缓存 181 8.2.1 Session的缓存的作用 182 ...
1. **实体类**:定义业务对象,通常对应数据库中的一个表,使用JavaBean规范。 2. **属性映射**:通过注解或XML文件将实体类的属性与数据库表字段对应起来。 3. **主键生成策略**:配置实体类主键的生成方式,如`@...
首先,HibernateTemplate是Spring对Hibernate原生Session的一个包装,它提供了一种更安全、方便的方式来执行常见的Hibernate操作。与直接使用Session相比,使用HibernateTemplate有以下优点: 1. **事务管理**:...
Hibernate是一个强大的Java持久化框架,它简化了数据库操作,提供了对象关系映射(ORM)功能。通过Hibernate,开发人员可以将Java对象与数据库表进行映射,从而避免编写大量的SQL语句。Hibernate支持CRUD(创建、...
本项目就是基于Prototype、Spring和Hibernate这三个组件实现的一个自动提示功能,这为我们提供了一个理解这些技术如何协同工作的实例。 Prototype是JavaScript的一个库,它为浏览器提供了许多实用的函数,如事件...
4. 编写 DAO 类:使用 HibernateSession 进行数据操作,如 save()、update()、delete() 和 find() 方法。 5. 测试:编写 JUnit 测试用例,验证 CRUD 操作是否正常工作。 文件名 "springhibernate" 可能是指项目主...
- **关联关系**:关联关系是对象之间的一种联系,比如一个班级可以有多个学生,这种关系在ORM中可以通过一对一、一对多、多对一、多对多等方式实现。 - **依赖关系**:对象之间的短暂交互,如函数调用,不涉及长期...