whitefly / miniOrm

根据MyBatis原理,实现ORM简化版

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

模拟MyBatis的注解功能写的案例代码

启动流程

  1. 在db.properties中添加对应的mysql的驱动,账号,密码,数据库url,建对应的表
  2. 修改pom的mysql-connector-java(因为我本地是mysql8,使用5.7可以修改成5)
  3. 启动test中的demo即可

大致用到的东西

  1. jdbc
  2. 动态代理
  3. 反射
  4. 注解的定义
  5. 连接池

代码执行流程

  • ①jdk自带动态代理生成Mapper接口的代理类,全部逻辑都实现在MapperHandler类
  • ②通过反射获取Method中的@Select,@Insert的信息
  • ③通过正则得到 #{} 的占位符, 将方法的参数名和sql中的占位符做关联,生成ParseResult实例,这个实例包含全部的占位符信息和具体值,并讲占位符都替换成统一的?号
  • ④通过连接池获取conn实例,调用jdbc的preparedStatement,将含有?号的sql进行预编译
  • ⑤根据ParseResult中的信息,给preparedStatement填充信息,然后执行sql(比如Insert就需要使用自增)
  • ⑥返回的ResultSet结果交给转换层:通过反射得到函数的返回值泛型,ResultSet转为对应的DO对象

案例截图

mapper定义

Image text

查询+查询结果

Image text Image text


插入+插入结果(支持 #{xx} 的形式)

Image text Image text

About

根据MyBatis原理,实现ORM简化版


Languages

Language:Java 100.0%