快速JavaEE轻量级框架&公用业务模块 设计&实现 4 - DAO设计
2013-10-18 00:00
302 查看
这部分的代码在
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好像没什么办法。
这样的话,这个包里就不需要代码了。但是我考虑把DataSource,JPA以及Transaction等和数据库相关的配置文件放在这个包里。虽然目前没有什么代码,但是不排除以后根据业务需要增加公用代码的可能,比如根据Projection部分读取字段。
突然发现AbstractPersistable不能设置@version的乐观锁。所以还是定义了AbstractOptimisticLockPersistable以及AbstractOptimisticLockAuditable类。
目前还有一些没想太明白的事情。
1. Entity主要用于关系型数据库和Java对象的映射,Entity是否只在DAO层使用,而在Service层和MVC层另定义对象。还是将Entity贯穿于整个系统架构。
2. 如果贯穿于整个系统架构,Entity是否需要定义一个接口,叫Model之类的,然后各个层只使用这个接口。我看有的系统是这样做的,如activiti,定义Task接口和TaskEntity实现类。
3. 是否需要实现Serialize接口。其实还是这个纠结的老问题,如果Entity只在DAO层使用,就没必要实现Serialize,如果在各层之间传输,则有必要实现。
既然单独的一个DAO模块,免不了将@Entity分散在各个模块中。这样JPA的persistence.xml文件和@Entity类必然不在一个jar包,会导致JPA容器找不到@Entity。解决此问题的方法参见下面
[b] 这篇文章 [/b]
persistence.xml和entity类不在同一jar包,导致找不到实体
想把结构讨论的清晰一些,希望各位能提些意见,多谢。
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好像没什么办法。
这样的话,这个包里就不需要代码了。但是我考虑把DataSource,JPA以及Transaction等和数据库相关的配置文件放在这个包里。虽然目前没有什么代码,但是不排除以后根据业务需要增加公用代码的可能,比如根据Projection部分读取字段。
突然发现AbstractPersistable不能设置@version的乐观锁。所以还是定义了AbstractOptimisticLockPersistable以及AbstractOptimisticLockAuditable类。
目前还有一些没想太明白的事情。
1. Entity主要用于关系型数据库和Java对象的映射,Entity是否只在DAO层使用,而在Service层和MVC层另定义对象。还是将Entity贯穿于整个系统架构。
2. 如果贯穿于整个系统架构,Entity是否需要定义一个接口,叫Model之类的,然后各个层只使用这个接口。我看有的系统是这样做的,如activiti,定义Task接口和TaskEntity实现类。
3. 是否需要实现Serialize接口。其实还是这个纠结的老问题,如果Entity只在DAO层使用,就没必要实现Serialize,如果在各层之间传输,则有必要实现。
既然单独的一个DAO模块,免不了将@Entity分散在各个模块中。这样JPA的persistence.xml文件和@Entity类必然不在一个jar包,会导致JPA容器找不到@Entity。解决此问题的方法参见下面
[b] 这篇文章 [/b]
persistence.xml和entity类不在同一jar包,导致找不到实体
想把结构讨论的清晰一些,希望各位能提些意见,多谢。
相关文章推荐
- 快速JavaEE轻量级框架&公用业务模块 设计&实现 7 - WEB MVC设计
- 快速JavaEE轻量级框架&公用业务模块 设计&实现 6.2 - 单元测试
- 快速JavaEE轻量级框架&公用业务模块 设计&实现 6.1 - DAO测试
- 快速JavaEE轻量级框架&公用业务模块 设计&实现 5 - RBAC模块设计
- 快速JavaEE轻量级框架&公用业务模块 设计&实现 6 - 测试框架
- 利用工厂设计模式实现业务层和dao层的解耦
- 模块管理常规功能自定义系统的设计与实现(15--进一步完善"省份"模块)
- DAO设计模式---实现一个简单的注册(上)
- C++利用反射和简单工厂模式实现业务模块解耦
- C++ 设计模式 —— 控制器设计模式(实现功能模块间通信)
- 分布式轻量级框架 设计&实现 1 - 初步想法&技术选型
- 模块设计与实现经验总结(四)
- 实现业务系统中的用户权限管理--设计篇
- 设计实现业务系统中的用户权限管理
- 【5. 监控调度处理模块】云跳板机服务系统设计及实现
- 科技期刊综合业务管理系统的设计与实现
- 如何在App中实现IM功能之七快速实现聊天列表排序模块——箭扣科技Arrownock
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
- 快速使用CSS Grid布局,实现响应式设计
- DAO 设计的实现: