type
status
date
slug
summary
tags
category
icon
password
😀
这里写文章的前言: 一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
 

📝 MyBatis

作为一名 "优秀的" CRUD 工程师,如果不看MyBatis是个怎么大概的执行流程的话,那还真是有点可惜. 所以阅读一下其源码和执行流程,是很有帮助的. 同时,看下其代码(设计模式等对成长也是很有帮助的).

代码

先将github上的代码clone下来,导入到本地的idea中. 然后按照官方文档的demo搭建就可以了. 这里自行创建一个 resources 目录即可,也就是放置一些配置文件信息的

实体类

 

接口

再写一个Mapper的接口. 可以看到我这里使用的方法都没修改,不能遗忘 Ctrl + C/V大师功能
 

配置文件

MyBatis的 xml 配置文件来一份: resouces下创建:mybatis-config.xml
 

实体对应的xml文件

对用的pojo的Mapper的xml也给来一份 : pojo/PhoneMapper.xml , 这里是在 resouces下的pojo文件夹中

启动类

最后写一个启动类即可: StartMain
这里先运行一下,看下能不能获取到我们想要的结果,也就是有没有错误或者异常等信息给报出来. 如果没有的话,就说明是ok的. 然后就可以开始我们愉快的debug旅行了

debug

这里我们只需要跟着 StartMain 中的方法,一步一步的走下去, 弄明白每个方法是说明意思,然后在其内部是怎么走的
Resources.getResourceAsStream(resouce) 方法:
 
new SqlSessionFactoryBuilder().build(inputStream) 方法: 该方法可以看其返回的结果,是返回了一个SqlSessionFactroy的回话工厂.
org.apache.ibatis.session.SqlSessionFactoryBuilder#build(java.io.InputStream, java.lang.String, java.util.Properties)
该方法最后是走到了这里.
 
sqlSessionFactory.openSession() 方法:
org.apache.ibatis.session.defaults.DefaultSqlSessionFactory#openSessionFromDataSource
该方法主要就是获取一个SqlSession会话.
 
session.getMapper(PhoneMapper.class); 获取Mapper的方法
org.apache.ibatis.session.defaults.DefaultSqlSession#getMapper
这里如果细心的话,可以看到其debug的这个类的值或者使用输出给值打印出来:System.out.println(phoneMapper.getClass().toString()); -->class com.sun.proxy.$Proxy0,就可以很明显的看到这是一个代理类了
 
 
 

🤗 总结归纳

总结文章的内容

📎 参考文章

  • 一些引用
  • 引用文章
 
💡
有关文章的问题,欢迎您在底部评论区留言,一起交流~