MyBatis源码阅读(一) --- 源码阅读环境搭建
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源码阅读(一) --- 源码阅读环境搭建相关推荐
- Android10源码AOSP(从Ubuntu14.04环境搭建到下载编译运行)
Ubuntu14.04环境搭建 电脑为笔记本,CPU i7-10750H,16G内存 虚拟机使用VMware Workstation 15 Pro 操作系统为Ubuntu 64 位 14.04 AOS ...
- eos源码分析和应用(一)调试环境搭建
转载自 http://www.limerence2017.com/2018/09/02/eos1/#more eos基于区块链技术实现的开源引擎,开发人员可以基于该引擎开发DAPP(分布式应用).下面 ...
- 淘淘商城项目mysql服务器_SpringMVC+Spring+Mybatis+Mysql+Maven+Svn[ 淘淘商城项目环境搭建 ]...
背景:淘淘商城项目的环境搭建 说明:采用SpringMVC+Spring+Mybatis+Mysql+Maven+Svn结构搭建,在开发之中可以参考其结构和搭建步骤去搭建实际的工程项目 工程结构简图: ...
- idea调试源代码c语言,IDEA阅读spring源码并调试
目标:搭建起Spring源码阅读和代码调试跟踪的环境,顺便建立一个简单的Demo,能够调试Spring的源代码 本节,主要介绍一下Spring源码阅读和调试的相关环境搭建,并使用MVN创建一个非常简单 ...
- 【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★
文章目录 一.Android 进程注入工具开发系列博客 二.Android 进程注入工具 源码下载编译 三.逆向环境搭建 四.使用注入工具进行逆向操作 1.获取远程进程号 2.注入工具准备 3.注入动 ...
- java计算机毕业设计小说阅读网站源码+系统+数据库+lw文档+mybatis+运行部署
java计算机毕业设计小说阅读网站源码+系统+数据库+lw文档+mybatis+运行部署 java计算机毕业设计小说阅读网站源码+系统+数据库+lw文档+mybatis+运行部署 本源码技术栈: 项目 ...
- Mybatis 源码阅读环境搭建
Mybatis源码阅读环境搭建 前言 一.下载mybatis的源码 二.编译源码 三.创建测试项目 前言 mybatis源码阅读环境搭建还是比较简单的,接下来我们讲解一下如何搭建该源码阅读环境 ...
- [附源码]JAVA毕业设计书香校园阅读平台(系统+LW)
[附源码]JAVA毕业设计书香校园阅读平台(系统+LW) 项目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe ...
- 你会阅读Java源码吗
阅读Java源码的前提条件: 1.技术基础 在阅读源码之前,我们要有一定程度的技术基础的支持. 假如你从来都没有学过Java,也没有其它编程语言的基础,上来就啃<Core Java>,那样 ...
- 有感而发:程序员到底要不要阅读框架源码?
写在前面 最近正在写[高并发专题]的文章,其中,在[高并发专题]中,有不少是分析源码的文章,很多读者留言说阅读源码比较枯燥!问我程序员会使用框架了,会进行CRUD了,是否真的有必要阅读框架源码?! 对 ...
最新文章
- C:模块化程序设计 以及数组
- python【蓝桥杯vip练习题库】ADV-181质因数2(短除法)
- MTCNN人脸及特征点检测---代码应用详解c++
- 【转】SAP Fiori Design Guidelines基础篇
- 在shell中改变当前环境路径
- VTK:可视化之TextSource
- 开源与自由 | 商业自由:从边缘到核心贡献
- Linux如何进行GPIO读写操作的?
- css+div导航条样式
- 5G(1)---5G 协议标准下载
- 线程的五大状态及转换
- php libswf,PHP停解析swf文件头
- SQL本地事务、asp.net事务、DTC
- c语言寻找文件指令,c语言实现文件查找
- 毛驴县令第二季简介及其下载
- unity 接 steam,获取steamID ,username
- flask文件上传 flask-uploads
- 黑帽SEO强势技术大纲
- C++期末项目设计------制作一个游戏盒
- 国产 Linux 操作系统面临的困境
热门文章
- 有关古文的C语言编程题,文言文考试也编程,文言语言!!!(附c/c++自译)
- 自动驾驶 8-0: 状态估计的重要 The Importance of State Estimation
- 实战ReactNative 从入门到精通 重要技术解析,5分钟搭建iOS, Android App 实战一
- Docker的核心概念镜像Images, 容器Containers, 数据卷Volumes
- 413.等差数列划分
- mysql中文显示问号_从MySQL读取中文数据,显示???(问号)乱码的解决方法...
- 电脑已安装软件提取安装包_SPSS 24,软件安装包及安装教程
- c#物联网_「物联网架构」Apache-Kafka:物联网数据平台的基石
- CS231n李飞飞计算机视觉 循环神经网络
- 概率图模型(PGM)学习笔记(三)模式推断与概率图流