快速JavaEE轻量级框架&公用业务模块 设计&实现 4 - DAO设计

这部分的代码在 git

http://git.oschina.net/terrymanu/miracle-framework/tree/master/miraclesea/framework-dao 数据库

以前写DAO,都是定义一个泛型的BaseDao,而后写入基本的CRUD,其余的业务DAO都继承这个类。自从有了Spring Data JPA,这个BaseDao就不须要了,直接使用就好了。 架构

Spring Data JPA基本提供所需的方法,对于业务查询,也能够经过接口+Query的方式使用。另外它还贴心的提供了AbstractPersistable和AbstractAuditable,用于生成主键和审计信息。可是这个AbstractPersistable主键的生成方式貌似只支持自增主键,想用UUID好像没什么办法。 spa

这样的话,这个包里就不须要代码了。可是我考虑把DataSource,JPA以及Transaction等和数据库相关的配置文件放在这个包里。虽然目前没有什么代码,可是不排除之后根据业务须要增长公用代码的可能,好比根据Projection部分读取字段。 .net

忽然发现AbstractPersistable不能设置@version的乐观锁。因此仍是定义了AbstractOptimisticLockPersistable以及AbstractOptimisticLockAuditable类。 xml

目前还有一些没想太明白的事情。 对象

1. Entity主要用于关系型数据库和Java对象的映射,Entity是否只在DAO层使用,而在Service层和MVC层另定义对象。仍是将Entity贯穿于整个系统架构。 blog

2. 若是贯穿于整个系统架构,Entity是否须要定义一个接口,叫Model之类的,而后各个层只使用这个接口。我看有的系统是这样作的,如activiti,定义Task接口和TaskEntity实现类。 继承

3. 是否须要实现Serialize接口。其实仍是这个纠结的老问题,若是Entity只在DAO层使用,就不必实现Serialize,若是在各层之间传输,则有必要实现。 接口

既然单独的一个DAO模块,免不了将@Entity分散在各个模块中。这样JPA的persistence.xml文件和@Entity类必然不在一个jar包,会致使JPA容器找不到@Entity。解决此问题的方法参见下面

这篇文章


persistence.xml和entity类不在同一jar包,致使找不到实体 


 想把结构讨论的清晰一些,但愿各位能提些意见,多谢。

相关文章
相关标签/搜索