现在的位置: 首页 > 综合 > 正文

[框架那点事儿-快速开发季]编写自己的数据持久层(2)

2013年10月03日 ⁄ 综合 ⁄ 共 20994字 ⁄ 字号 评论关闭

在上一篇的

[框架那点事儿-快速开发季]编写自己的数据持久层(1)

主要讲述了利用反射原理隔离具体数据库表和字段,抽象通用而简洁的数据库持久层API的思路。

其中重点讲解了insert新增方法的实现过程,其中部分代码在后续的开发过程中,将会部分重构,以提高复用性。

这一篇,我们来讲述查询API的封装,重点讲述3个API :

备注://代码版本3.0,修改时间now=2010-7-28 13:53    在之前文章中描述的内容已经修改

 

 

 

这3个属于查询中较为常用的查询对象的方法,API的开发过程中,需要重点注意的问题:

 

1、特殊字段处理以及字段类型转换处理

特殊字段即DO类含有但是数据库表不含有的字段,比如序列ID。这类属性是不能被调用setter方法设置值的。这类属性,数据库中也不可能存储。

2、resultSet中查询的结果,类型是数据库类型,如果直接调用setter方法,是无法通过反射来实现赋值的。所以需要进行转换,根据DO类中的属性的类型进行自动转换。

 

其核心思路是:首先根据传入的类型,获取当前类型的属性,并且获取当前属性的类型,在查询完成之后的RowMapper转换代码中,将之前获取到的属性和属性类型进行匹配转换,这里如果不进行转换直接使用object,会碰到上面讲到的第二个问题,一方面,类型转换不会成功,另一方面,无法正常的通过method的反射调用setter方法设置值。

 

 

其他问题后续补充,先看实现代码:

 

首先看queryForList 方法:

 

 

具体的实现代码:(全部 版本3.0)


 


 

注意:上述代码经过重构,所以跟第一篇中的部分代码是不一致的,请以此版本为主。

 

代码写到现在,我突然发现,自己的工作出现了瓶颈,我发现自己的封装并没有降低API在使用上的便利性,目前实现了隔离具体的数据表和字段,但是依然依赖字段名称和数据库名称的小写相同,同时在使用上,发现部分api存在比较麻烦的现象,比如排序查询。这个后期该如何去设计,以降低使用的繁杂度,是一个很重要的需要思考的问题。。。。。

抱歉!评论已关闭.