四时宝库

程序员的知识宝库

Java高级架构师-自定义mybatis(mybatis如何编写一个自定义插件)

欢迎关注头条号:Java小野猫

架构分析

  1. Configuration类:
  2. 得到数据源对象
  3. 加载其它的实体类映射文件:UserMapper.xml,使用DOM4J
  4. Mapper类只是一个实体类:POJO,用来封装数据
  5. SqlSession类:
  6. 生成了UserMapper接口的代理对象,JDK代理。
  7. 访问数据库:JDBC
  8. 封装查询的结果集,使用反射

使用到的技术

添加所需的所有依赖,做好准备工作。

pom.xml文件

pox.xml

自定义mybatis:Mapper封装数据类

分析映射配置:UserMapper.xml

步骤

  1. 创建包com.it.mybatis
  2. 创建实体类:Mapper包含4个属性:namespace,id,resultType,sql
  3. 重写toString()方法,方便后期测试看到封装的结果
  4. 生成get和set方法
  5. 一个Mapper对象代表一条要操作的查询语句对象

代码

Mapper

自定义mybatis:设计Configuration的基本属性

  1. 设计Configuration的基本属性
  2. 产生get和set方法
  3. 产生toString()方法

分析

sqlMapConfig.xml文件

  1. 创建loadSqlMapConfig()方法,它的作用:
  2. 解析sqlMapConfig.xml配置文件,给Configuration中的属性赋值
  3. 解析UserMapper.xml配置文件,给Mapper中的属性赋值
  4. 在构造方法中调用方法: loadSqlMapConfig()
  5. 作用:使用dom4j解析sqlMapConfig.xml文件,给数据库有关的属性赋值
  6. 从类路径加载/sqlMapConfig.xml配置文件,创建输入流
  7. 使用dom4j得到文档对象
  8. 使用XPath读取所有property元素
  9. 遍历每个property元素,读取它的name和value属性值
  10. 判断name的字符串,如果与类中的属性名相同,则赋值到相应属性中

4.Configuration解析实体类映射文件

解析UserMapper.xml并且封装到Mapper类中

  1. 创建新的方法loadMapper(Document document),将当前的文档对象传递给方法
  2. 读取<mapper>中的resource属性值
  3. 通过resource读取它对应的XML文件
  4. 得到namespace,id,resultType,sql的值,封装成Mapper对象
  5. 在loadSqlMapConfig()中调用此方法

loadMapper(Document document)方法开发步骤

作用:进一步解析其它的XML文件,给mappers属性赋值

  1. 读取mapper中的resource属性值
  2. 使用XPath读取所有mapper元素
  3. 遍历每个mapper元素
  4. 读取mapper的resource属性值
  5. 通过resource读取它对应的XML文件,得到namespace,id,resultType,sql的值
  6. 使用类对象,读取输入流下面resource,注:要加上/
  7. 创建文档对象
  8. 读取根元素mapper
  9. 读取namespace属性
  10. 读取根元素下的一个select标签
  11. 得到id,resultType,sql内容
  12. 封装成Mapper对象
  13. 创建一个自定义的Mapper对象,封装上面三个属性
  14. 再封装namespace属性
  15. 将封装好的mapper对象添加到this的mappers属性中,其中键是namespace+"."+id,值是自定义的mapper对象。

代码

Configuration

核心组件SqlSession:编写getMapper方法

步骤

得到SQL语句和返回类型

  1. 得到Configuration中Map集合
  2. 实例化Configuration对象
  3. 通过Configuration得到Mapper对象的集合
  4. 得到Map中的键:类全名.方法名
  5. 通过方法对象->得到声明的接口->得到名称:即类全名 com.it.dao.UserMapper
  6. 获取当前执行的方法名称:findAllUsers
  7. 通过类全名+方法名得到键
  8. 得到Mapper中相应的属性
  9. 通过类全名+"."+方法名,从mappers中得到映射的mapper对象
  10. 从mapper中获取查询的sql语句
  11. 从mapper中获取返回值类型resultType
  12. 通过反射将上面的resultType字符串转成类对象,供后面的方法使用

得到Connection对象访问数据库

  1. 通过Configuration得到数据源,通过数据源得到连接对象
  2. 调用List queryForList(Connection connection, String sql, Class clazz)方法
  3. 参数:连接对象,SQL语句,结果集的类型。 直接创建一个List集合,添加3个User对象到集合中,暂时不访问数据库。
  4. 返回封装好的集合

私信头条号,发送:“资料”,获取更多“秘制” 精品学习资料

如有收获,请帮忙转发,您的鼓励是作者最大的动力,谢谢!

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接