最近周边有许多朋友都来问我写框架不知道该如何开始下手,没有头绪,哈哈哈其实我一开始也是这样子慢慢熬过来的。所以今晚的这篇文章主要是讲解一些常规的orm框架的底层原理是如何实现的思路,同时也开源一套自己编写的orm框架。
常规的hibernate框架,mybatis框架而言,他们都有着自己的一些特点,就是将jdbc封装地特别方便,供开发者来引用。如果读者们有耐心,可以去看看hibernate的源码或者mybatis的源码,当然,仅仅只是学会看源码还是不够大。倘若能够自己实践一遍,就更加能够深入有所体会了。
常规的hibernate可以自动化生成相应的sql代码,但是对于性能优化方面需要开发人员学习hql语法,特别繁琐。而且Hibernate对于session生命周期管理也太过于复杂,配置也过于繁琐。现今比较流行的mybatis需要开发人员自己手动写sql来进行数据库操作,这种步骤较为灵活,但是对于一些简单的增删改查操作不能自动生成,例如一个插入语句,如果相应的表有1000个字段,那么这段sql语句将会特别冗长,不利于后期的维护。
Ibernate结合了Hibernate和Mybatis两者的好处,简单的sql语句可以自动生成,复杂的sql语句可以自己编写。
本框架开发时长为1星期,由于目前已经大三了,7月份的时候需要找实习工作,所以只好最近抽时间来进行相应的优化。最近几天进行了版本的更新,如果各位感兴趣,可以到我的gitee上边去查看更加详细的内容:
关于框架源码部分主要分为以下几点:
数据库连接池,自动创建接口实例,如何通过反射和注解构建数据库和实体类的映射,代理和asm字节码技术,缓存机制……
这些东西可能你在使用常规的spring,springmvc,mybatis,springdata,hibernate里面全部都有遇到过,也都有用到过它们的接口Api内容。但是这一次,我们通过自己手写来实现它。
是的,自己手写来实现这些,只要懂得javase即可。
使用的流程如下所示:
首先我们需要编写相应的properties配置文件:
给某个类标识好注解之后,做好映射工作。
然后便是设计dao的部分了:
最后通过junit进行测试:
关于本orm框架的设计:
1.数据库连接池
这个类主要是在org.lh.ibernate.config包里面,包里设置了以下几个类:
DBConfig类会自动去读取properties文件里面的内容:
是的,这个类的设计主要是用于存储一些静态常量,并没有其他的功能。
关于数据链接是采用了java.sql.Connection 这个类。
但是每个如果只是这样引用的话是不够的,还需要添加一个标识符用于表示这个链接是否是处于繁忙状态中。所以我单独构造了一个链接对象出来:
而相应的连接池对象主要就是用来创建一些列的链接,然后供外界去调用:
这个类实现了IDbPool接口,这样设计的好处,在于灵活,假若后期需要链接Oracle的话,在接口那边修改一下就好了。
最后就是一个连接池工厂了:
工厂的好处就在于,开发者不需要知道内部的具体细节,直接调用即可,非常方便。
2.自定义注解和常规配置类
1.3版本用到的注解还是比较少的,主要为以下几个:
关于注解的反射引用比较简单,这里面就直接跳过。
关于公用配置类在org.lh.ibernate.common里面,点开看看就懂了,这个比较简单。