重复造轮子(4) — 手写orm框架Ibernate(上)

简介: 重复造轮子(4) — 手写orm框架Ibernate(上)

最近周边有许多朋友都来问我写框架不知道该如何开始下手,没有头绪,哈哈哈其实我一开始也是这样子慢慢熬过来的。所以今晚的这篇文章主要是讲解一些常规的orm框架的底层原理是如何实现的思路,同时也开源一套自己编写的orm框架。


常规的hibernate框架,mybatis框架而言,他们都有着自己的一些特点,就是将jdbc封装地特别方便,供开发者来引用。如果读者们有耐心,可以去看看hibernate的源码或者mybatis的源码,当然,仅仅只是学会看源码还是不够大。倘若能够自己实践一遍,就更加能够深入有所体会了。


常规的hibernate可以自动化生成相应的sql代码,但是对于性能优化方面需要开发人员学习hql语法,特别繁琐。而且Hibernate对于session生命周期管理也太过于复杂,配置也过于繁琐。现今比较流行的mybatis需要开发人员自己手动写sql来进行数据库操作,这种步骤较为灵活,但是对于一些简单的增删改查操作不能自动生成,例如一个插入语句,如果相应的表有1000个字段,那么这段sql语句将会特别冗长,不利于后期的维护。


Ibernate结合了Hibernate和Mybatis两者的好处,简单的sql语句可以自动生成,复杂的sql语句可以自己编写。


本框架开发时长为1星期,由于目前已经大三了,7月份的时候需要找实习工作,所以只好最近抽时间来进行相应的优化。最近几天进行了版本的更新,如果各位感兴趣,可以到我的gitee上边去查看更加详细的内容:


gitee.com/IdeaHome_ad…


关于框架源码部分主要分为以下几点:


数据库连接池,自动创建接口实例,如何通过反射和注解构建数据库和实体类的映射,代理和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里面,点开看看就懂了,这个比较简单。




目录
相关文章
|
机器学习/深度学习 人工智能 算法
【强化学习】强化学习在游戏、决策支持系统以及复杂环境模拟中的应用进展
强化学习(Reinforcement Learning, RL)与游戏理论在多个领域的应用取得了显著进展,特别是在游戏、决策支持系统以及复杂环境模拟中。以下是对这些领域应用进展的详细探讨
325 2
|
XML JavaScript 前端开发
SVG学习
【10月更文挑战第1天】
232 3
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能】常用的人工智能框架、模型、使用方法、应用场景以及代码实例的概述
人工智能(AI)领域涉及众多框架和模型,这些框架和模型为开发人员提供了强大的工具,以构建和训练各种AI应用。以下是一些常用的人工智能框架、模型、使用方法、应用场景以及代码实例的概述。
1356 1
|
分布式计算 Hadoop Java
Hadoop CentOS 7 安装配置
本篇根据 给力星 改动而来,文尾有来源 简介 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 [1] Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且
8987 0
|
JavaScript 前端开发
JavaScript进阶-模板字符串与增强的对象字面量
【6月更文挑战第19天】ES6的模板字符串和增强对象字面量提高了JavaScript的易读性和效率。模板字符串(` `)支持变量嵌入和多行,简化了字符串处理;增强对象字面量允许简写属性与方法,以及动态属性名。注意模板字符串的闭合和性能影响,以及对象字面量的简写语法和计算属性名的恰当使用。通过实例展示了这两项特性的应用,助力编写更优雅的代码。
250 4
|
存储 Java
震惊!关系运算符在 Java 基本语法中竟然这么重要!
【6月更文挑战第14天】Java 中的关系运算符在编程中扮演关键角色。通过案例展示了它们的用法:比较数值大小、判断字符串相等、执行多重关系判断、在循环和条件语句中的应用,以及与其他运算符结合使用。理解并熟练运用这些运算符,能有效控制程序流程,实现复杂逻辑,是构建 Java 代码基础的重要部分。
130 1
|
Linux Go
Go语言在centos7下安装
Go语言在centos7下安装
Go语言在centos7下安装
|
存储 人工智能 编译器
『C语言进阶』数据在内存中的存储规则
『C语言进阶』数据在内存中的存储规则
|
存储 搜索推荐 NoSQL
Lazada商品详情接口在电商行业中的重要性及实时数据获取实现
在电子商务的浪潮下,商品详情数据的实时性和准确性对于电商平台的运营至关重要。Lazada作为东南亚地区领先的电商平台,其商品详情接口在电商行业中的作用不容忽视。本文将深入探讨Lazada商品详情接口的重要性,并介绍如何通过API实现实时数据获取,以提升电商企业的运营效率和用户体验。
|
存储 算法 NoSQL
高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]
高并发分布式环境中获取全局唯一ID; 分布式数据库全局唯一主键生成
3123 0