一个 DAO 的实现方法
对 ORM 的讨论永远都没有结束...
每个人都有不同的思路, 不同的实现.
之所以引入ORM, 我认为是:
1) 减少复杂度, 抽象出了公共的持久层.
比如把一个对象保存到数据库. 传统的 JDBC 方法, 需要insert into ...语句.
事实上, 生成这些 CRUD 的 Sql 的过程是重复的. 因此 ORM 给我们做了这些重复的工作.
2) 解决了多个数据库的差异问题, 一旦移植到其他数据库, 转换非常方便.
不过, 如果是做企业应用, 一般不会经常换数据库, 除非是做通用的产品.
3) ORM 还提供了一些辅助的功能, 比如缓存, 事务, 分页...
相比 JDBC, 我觉得 ORM 最方便的地方不用去写那些重复的 CRUD 的sql语句.
其实, 最麻烦的还是 insert into ... 和 update ...2个. 还有就是查询到的记录封装到一个Java Bean 里面去.
对于 delete, search...应该都不算麻烦的.
基于这种想法, 我觉得可以尝试这样来做 DAO 层:
1) 封装 Spring 的 SimpleJdbcTemplate, 来做持久层的工作.
2) 用Spring里面的 ParameterizedRowMapper 来将查询到的记录转换为 Java Bean.
3) 利用 Jdk5 的 Annotation 和 Generic 特性, 在 Java Bean 里面标注属性名称对应余数据库表里面的字段名称.
在以及在生成 sql 语句时的匹配方式,比如 like %abc, like %abc%, like abc%, =, <, >...
通过这个Annotation, 把那些 生成 CRUID 的过程独立出来
另外, 很多人认为 Java Bean 里面的 get, set 方法很枯燥, 多余.
如果把 字段类型修改为 public 的会怎样?
在面向对象的编程里面, 好像有一种共识, 数据字段定义为 private 的, 访问字段一定要用 get 方法, 修改字段一定要用 set 方法.
如果对于这些 POJO 的数据字段, 我觉得用 public 类型好像也没有什么不好, 除非你要将 一个 Date 类型的字段, 在显示的时候, 要进行
格式转换, 我觉得可以一些 get 方法, 或者在其他地方来做.
最终的 DAO 会是这样:
基本的 DAO 接口:
public class RoleDaoImpl extends BaseDaoImpl<Role> implements RoleDao { //对于基本的 CRUD, 不用写代码, BaseDaoImpl 实现了基本的 CRUD. }大家来讨论讨论, 看看这种实现方法如何 ?