思路开始之前,考虑我们为什么做一个这样的框架,答案肯定是为了使用方便。那么怎么就使用方便了。这里先回顾一下,梦开始的时候,使用jdbc完成的一次查询。
1.加载数据库驱动
2.通过驱动管理器DriverManager获取数据库连接
3.定义SQL,?表示占位符
4.获取预处理prepareStatement
5.设置参数,第一个参数为sql语句中参数的序号(从1开始),第二参数为设置的参数值
prepareStatment.set(1, "uu");
6.向数据库发出sql执行查询,查询出结果集
resultSet = prepareStament.executeQuery();
7.遍历查询结果集
while(resultSet.nex) {
...
8.封装bean
}
根据以上的jdbc的查询链路。可以发现四个问题:
- 数据库配置信息存在硬编码问题
- 频繁创建释放数据库连接问题
- sql语句、设置参数、获取结果集参数均存在硬编码问题
- 若结果集参数非常多,则手动封装返回结果集较为频繁
那么针对上面四个问题的解决方案及分析:
- 其中1、3同属一个问题:硬编码问题。则这里我们都用配置文件来解决,以防发生配置变更时,我们不用修改代码来重新上线。
- 但是还要考虑,这里的配置文件我们是把他们放一起还是分开放,很明显要分开放,因为数据库配置信息几乎甚少做变动,而sql的一些配置则是经常根据业务进行变动。所以,这里我们分开存放配置:数据库配置信息,sql配置信息
- 对于2,我们采用数据库连接池,比如现在市面上的Druid、HikariCP、C3P0、DBCP等等
- 对于4,我们引用反射内省的技术
然后我们应用上述解决方案来思考框架的设计思路:
一、首先从使用者,也就是项目本身考虑:我们肯定是要引用自定义持久层框架的jar包。那么这里,若想让持久层框架奏效,那么首先得配置吧。这里都是用户自定义的,两方面的配置:
- 数据库配置信息
- sql配置信息
二、就自定持久层框架本身来讲,其实就是对jdbc代码进行了封装