实现一个自定义持久层框架
传统JDBC操作存在的问题
1.连接得不到复用,频繁创建、关闭。
2. sql编写在代码里,维护和修改麻烦。
3.在sql中,要按照?的顺序塞值,并且结果集遍历解析灵活性差。
如何实现一个自定义持久层框架
- 分别创建独立的xml文件用于存放数据库连接和sql语句,把sql语句,数据库连接和代码进行了分离。
-
创建一个Resource类,通过getResourceAsStream方法把xml配置文件信息读取成字节流,然后存入内存。
-
创建具体数据库连接和sql配置信息java普通类,通过dom4j进行解析,进行分别存储方便后面调用,并把数据库连接放入连接池统一管理,优化了jdbc连接得不到复用的问题。
-
创建sqlSessionFactory以及sqlSession接口,编写实现类,封装增删改查方法。
-
在实现类中通过jdk动态代理的方式为dao接口生成对象,通过解析sql配置文件标签的定义枚举类来判定执行的是查询或者修改等等,完成JDBC对数据库操作的封装,这里要注意namespace必须要是dao接口全路径,标签id必须要和dao接口的定义的方法名一致。
-
通过具体实体类dao接口直接调用对应操作方法注册驱动,获取sql语句,把#{id}转化成mysql能识别的?。
7. 完成sql转化之后,获取预处理对象,在设置参数和封装返回结果集的时候,可以把sql配置信息内入参和返回结果集转化成class对象,通过反射机制,将结果集的元数据根据实体类和数据库表字段对应关系完成封装,优化sql顺序塞值和结果集遍历灵活性差问题,实现自定义持久层框架。
8. 测试结果,根据查询条件成果获取数据库对应结果数据