最近快被 Hibernate 给坑哭了,有了自己动手实现 ORM 映射 DAO 的冲动。
工作之余折腾了快一星期,总算是有点小成就。
现打算将过程记录下来,方便自己后续回顾填补遗漏。

无论你项目中使用的是什么样的 ORM 框架[Hibernate/MyBatis.....],或者是现在大热的领域模型 DSL DAO层,都是在传统 JDBC的基础上进行的封装。
骚年如果你上手就是 DAO 层框架,没有见过上述的几个家伙的话,建议你反编译 JDK去和他们打个招呼。
传统 JDBC 实现获取数据库数据的代码(随上图序列图)
PreparedStatement/Statement 提供的两种不同的运行 执行Sql 事物对象。
PreparedStatement 为预编译 Sql,执行前已经被编译,DBMS 只需执行即可,这就意味这 这种形式的 Sql 语句执行效率相当高。
Statement 为执行时才会进行编译Sql,然后被 DBMS 执行,所以这个对象在执行 Sql 不是很频繁时,相对不错。
PreparedStatement 效率高,还可以有效的防止 Sql 注入,但会占用多余的内存空间(用于预编译)。
就好像是胸大,臀漂亮的妹子,脸不好看,你需要牺牲一部分东西,去换取另外一部分东西,没有绝对完美的选择。
JDBC 访问数据库的方式是最高效的,没有之一,好比是高级编程语言的效率永远不可能高于底层汇编语言是一样的道理。
但是 JDBC 对于程序员来说太难驾驭了,没办法将关系数据库中的数据抽象到 Java的面向对象的世界。
下面是我业余时间在摸索出来的不依靠任何框架,只使用 JDK自带的注解和反射的 DAO 层实现,
其中还有很多的问题,但是大体的样子已经很可爱了。
a.定义你自己的 DAO 表名注解
b.在 POJO (与数据库表结构对应) 中是添加 TableName 注解
d.获取注解表名、组织 Sql 、调整姿势
e.熟悉的JDBC 操作、获取查询结果集、反射填充POJO属性
f. 将 ResultSet 获取的值 转换 POJO 属性时,判断逻辑稍微多一点,基本囊括了主流的 java 基本类型...
View Code
d.项目中的使用方式
PO、Map 作为参数,使用方式是不是很简单呢?
只是对查询进行了的封装,后续需要关注下更新和插入、与Spring 的 整合、数据连接池的整合....
本文转自Orson博客园博客,原文链接:http://www.cnblogs.com/java-class/p/5512407.html,如需转载请自行联系原作者