Mybatis源码阅读系列文章:

MyBatis源码阅读(一) --- 源码阅读环境搭建

MyBatis源码阅读(二) --- 执行流程分析

MyBatis源码阅读(三) --- 配置信息的解析以及SqlSessionFactory构建过程

MyBatis源码阅读(四) --- SqlSession的创建过程

MyBatis源码阅读(五) ---Mapper接口的获取过程

MyBatis源码阅读(六) ---mapper方法具体执行流程分析

MyBatis源码阅读(七) --- 查询结果集封装流程

MyBatis源码阅读(八) --- Executor执行器

MyBatis源码阅读(九) --- 插件原理

MyBatis源码阅读(十) --- 一级缓存、二级缓存工作原理

MyBatis源码阅读(十一) --- MyBatis事务管理机制

MyBatis源码阅读(十二) --- Spring加载MyBatis过程

目录

一、简介

二、源码环境搭建

一、简介

使用Mybatis有一段时间了,但是一直没有专门去阅读MyBatis框架的源码,Mybatis是一个非常值得我们去阅读的框架,源码里面运用了很多常见的设计模式,如构建者模式、代理模式、模板方法模式等等,都值得我们去学习和借鉴。

下面我们就以搭建一个源码阅读环境开始,一起来看看Mybatis的源码。

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

官网地址:https://mybatis.org/mybatis-3/zh/index.html

如果对Mybatis还不熟悉的小伙伴,建议还是先去官网熟悉Mybatis是如何使用的,熟悉以后我们再来看其源码实现。下面我们搭建一个简单的Mybatis 源码Debug环境。

二、源码环境搭建

【a】创建数据库以及表

CREATE DATABASE `user_mybatis`;USE `user_mybatis`;/*Table structure for table `user` */DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',`username` varchar(50) DEFAULT NULL COMMENT '用户名称',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;/*Data for the table `user` */insert  into `user`(`id`,`username`) values (1,'张三'),(2,'李四'),(3,'王五');

【b】创建一个maven项目

目录结构如下图:

pom文件如下所示:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency>
</dependencies>

【c】mybatis配置文件mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--一些重要的全局配置--><settings><!--<setting name="cacheEnabled" value="true"/>--><!--<setting name="lazyLoadingEnabled" value="true"/>--><!--<setting name="multipleResultSetsEnabled" value="true"/>--><!--<setting name="useColumnLabel" value="true"/>--><!--<setting name="useGeneratedKeys" value="false"/>--><!--<setting name="autoMappingBehavior" value="PARTIAL"/>--><!--<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>--><!--<setting name="defaultExecutorType" value="SIMPLE"/>--><!--<setting name="defaultStatementTimeout" value="25"/>--><!--<setting name="defaultFetchSize" value="100"/>--><!--<setting name="safeRowBoundsEnabled" value="false"/>--><!--<setting name="mapUnderscoreToCamelCase" value="false"/>--><!--<setting name="localCacheScope" value="STATEMENT"/>--><!--<setting name="jdbcTypeForNull" value="OTHER"/>--><!--<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>--><setting name="logImpl" value="STDOUT_LOGGING" /></settings><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/user_mybatis?serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><mapper resource="mapper/UserMapper.xml"/></mappers>
</configuration>

【d】创建实体类对象

public class User {private String id;private String username;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}@Overridepublic String toString() {return "User{" +"id='" + id + '\'' +", username='" + username + '\'' +'}';}
}

【e】声明mapper接口以及mapper.xml

public interface UserMapper {/*** 查询用户信息*/User getById(@Param("id") Long id);}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wsh.mybatis.mybatisdemo.mapper.UserMapper"><select id="getById" resultType="com.wsh.mybatis.mybatisdemo.entity.User">select * from user where id = #{id}</select></mapper>

【f 】测试类

class MybatisDemoApplicationTests {public static void main(String[] args) {//1、读取配置文件String resource = "mybatis-config.xml";InputStream inputStream;SqlSession sqlSession = null;try {inputStream = Resources.getResourceAsStream(resource);//2、初始化mybatis,创建SqlSessionFactory类实例SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//3、创建Session实例sqlSession = sqlSessionFactory.openSession();//4、获取Mapper接口UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//5、执行SQL操作User user = userMapper.getById(1L);System.out.println(user);} catch (IOException e) {e.printStackTrace();} finally {//6、关闭sqlSession会话if (null != sqlSession) {sqlSession.close();}}}}

运行程序,如下图,可以看到成功查询到记录,说明Mybatis环境搭建成功。

通过上面的示例,我们总结一下Mybatis使用的大体流程,如下图所示:

可以看到,主要分为了如上图的几个步骤,这几个步骤也是Mybatis的核心了,所以我们阅读源码也是从这几个部分切入,逐步逐步去了解里面的实现细节,接下来就分好几篇文章总结一下Mybatis常见组件的实现原理。

MyBatis源码阅读(一) --- 源码阅读环境搭建相关推荐

  1. Android10源码AOSP(从Ubuntu14.04环境搭建到下载编译运行)

    Ubuntu14.04环境搭建 电脑为笔记本,CPU i7-10750H,16G内存 虚拟机使用VMware Workstation 15 Pro 操作系统为Ubuntu 64 位 14.04 AOS ...

  2. eos源码分析和应用(一)调试环境搭建

    转载自 http://www.limerence2017.com/2018/09/02/eos1/#more eos基于区块链技术实现的开源引擎,开发人员可以基于该引擎开发DAPP(分布式应用).下面 ...

  3. 淘淘商城项目mysql服务器_SpringMVC+Spring+Mybatis+Mysql+Maven+Svn[ 淘淘商城项目环境搭建 ]...

    背景:淘淘商城项目的环境搭建 说明:采用SpringMVC+Spring+Mybatis+Mysql+Maven+Svn结构搭建,在开发之中可以参考其结构和搭建步骤去搭建实际的工程项目 工程结构简图: ...

  4. idea调试源代码c语言,IDEA阅读spring源码并调试

    目标:搭建起Spring源码阅读和代码调试跟踪的环境,顺便建立一个简单的Demo,能够调试Spring的源代码 本节,主要介绍一下Spring源码阅读和调试的相关环境搭建,并使用MVN创建一个非常简单 ...

  5. 【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★

    文章目录 一.Android 进程注入工具开发系列博客 二.Android 进程注入工具 源码下载编译 三.逆向环境搭建 四.使用注入工具进行逆向操作 1.获取远程进程号 2.注入工具准备 3.注入动 ...

  6. java计算机毕业设计小说阅读网站源码+系统+数据库+lw文档+mybatis+运行部署

    java计算机毕业设计小说阅读网站源码+系统+数据库+lw文档+mybatis+运行部署 java计算机毕业设计小说阅读网站源码+系统+数据库+lw文档+mybatis+运行部署 本源码技术栈: 项目 ...

  7. Mybatis 源码阅读环境搭建

    Mybatis源码阅读环境搭建 前言 一.下载mybatis的源码 二.编译源码 三.创建测试项目 前言     mybatis源码阅读环境搭建还是比较简单的,接下来我们讲解一下如何搭建该源码阅读环境 ...

  8. [附源码]JAVA毕业设计书香校园阅读平台(系统+LW)

    [附源码]JAVA毕业设计书香校园阅读平台(系统+LW) 项目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe ...

  9. 你会阅读Java源码吗

    阅读Java源码的前提条件: 1.技术基础 在阅读源码之前,我们要有一定程度的技术基础的支持. 假如你从来都没有学过Java,也没有其它编程语言的基础,上来就啃<Core Java>,那样 ...

  10. 有感而发:程序员到底要不要阅读框架源码?

    写在前面 最近正在写[高并发专题]的文章,其中,在[高并发专题]中,有不少是分析源码的文章,很多读者留言说阅读源码比较枯燥!问我程序员会使用框架了,会进行CRUD了,是否真的有必要阅读框架源码?! 对 ...

最新文章

  1. C:模块化程序设计 以及数组
  2. python【蓝桥杯vip练习题库】ADV-181质因数2(短除法)
  3. MTCNN人脸及特征点检测---代码应用详解c++
  4. 【转】SAP Fiori Design Guidelines基础篇
  5. 在shell中改变当前环境路径
  6. VTK:可视化之TextSource
  7. 开源与自由 | 商业自由:从边缘到核心贡献
  8. Linux如何进行GPIO读写操作的?
  9. css+div导航条样式
  10. 5G(1)---5G 协议标准下载
  11. 线程的五大状态及转换
  12. php libswf,PHP停解析swf文件头
  13. SQL本地事务、asp.net事务、DTC
  14. c语言寻找文件指令,c语言实现文件查找
  15. 毛驴县令第二季简介及其下载
  16. unity 接 steam,获取steamID ,username
  17. flask文件上传 flask-uploads
  18. 黑帽SEO强势技术大纲
  19. C++期末项目设计------制作一个游戏盒
  20. 国产 Linux 操作系统面临的困境

热门文章

  1. 有关古文的C语言编程题,文言文考试也编程,文言语言!!!(附c/c++自译)
  2. 自动驾驶 8-0: 状态估计的重要 The Importance of State Estimation
  3. 实战ReactNative 从入门到精通 重要技术解析,5分钟搭建iOS, Android App 实战一
  4. Docker的核心概念镜像Images, 容器Containers, 数据卷Volumes
  5. 413.等差数列划分
  6. mysql中文显示问号_从MySQL读取中文数据,显示???(问号)乱码的解决方法...
  7. 电脑已安装软件提取安装包_SPSS 24,软件安装包及安装教程
  8. c#物联网_「物联网架构」Apache-Kafka:物联网数据平台的基石
  9. CS231n李飞飞计算机视觉 循环神经网络
  10. 概率图模型(PGM)学习笔记(三)模式推断与概率图流