使用IDEA导入MyBatis源码进行调试
一. 下载源码
GitHub地址:https://github.com/mybatis/mybatis-3

复制上面的地址执行下列命令:
git clone https://github.com/mybatis/mybatis-3.git mybatis-source
注:GitHub可能会很慢,但是可以借助国内的Gitee进行“下载加速” 参考链接
打开mybatis-source下pom.xml文件,会发现Mybatis源码还依赖于一个父工程:

去Github上下载对应的父工程,下载的mybatis-parent版本要和mybatis源码中pom文件指定的父工程版本一致。

二. 搭建MyBatis测试环境
注意:这里我们只分析MyBatis源码,所以并没有与Spring集成。
第一步:新建Maven,加入MyBatis相应依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.tjd</groupId>
<artifactId>mybatis-source-study</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<junit.version>4.12</junit.version>
<mybatis.version>3.2.8</mybatis.version>
<mysql.version>5.1.32</mysql.version>
<druid.version>1.0.9</druid.version>
</properties>
<dependencies>
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- Junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- 加载配置文件 -->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
注意,此时这里引入的MyBatis依赖都是中央仓库中的,并不是我们下载的源码。
第二步:新建Mapper接口和对应的映射文件

第三步:新建MyBatis配置文件
在resource目录下创建SqlSessionConfig.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--开启日志输出-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!--配置类别名,配置后在Mapper配置文件(通常我们将编写SQL语句的配置文件成为Mapper配置文件)中需要使用pojo包中的类时,使用简单类名即可-->
<typeAliases>
<package name="cn.tjd.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="cn.tjd.mapper"/>
</mappers>
</configuration>
第四步:编写测试类测试
public class MyBatisTest {
@Test
public void testMyBatisBuild() throws IOException {
InputStream input = Resources.getResourceAsStream("SqlSessionConfig.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(input);
SqlSession sqlSession = sessionFactory.openSession();
TestMapper mapper = sqlSession.getMapper(TestMapper.class);
Map<String, String> student = mapper.getStudentById("00000b373502481baa1a5f5229507cf8");
}
}
测试成功即可进行下一步。

注:之所以要在源码整合之前搭建好测试环境,是为了保证测试环境的可靠,因为后序的源码整合可能会发生一些问题,这样可以排除是因为测试环境错误所导致的。
三. 源码整合
第一步:将源码项目(两个)导入当前测试项目所在的界面中
导入后的效果如图:

至于IDEA如何在一个界面中导入多个项目请参考:一个IDEA界面如何同时打开多个项目
第二步:将源码安装至本地仓库中(参考至:mybatis 源码导入IDEA)
切换到你下载的mybatis-parent目录:
mvn clean install -Dmaven.test.skip=true
切换到你下载的mybatis源码目录:
mvn clean install -Dmaven.test.skip=true
如果出现如下错误:

打开pom.xml 文件注释掉 maven-pdf-plugin 插件:
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pdf-plugin</artifactId>
</plugin>
-->
第三步:修改测试项目中pom文件依赖的MyBatis版本
我们需要将测试项目中pom依赖的MyBatis的版本修改为刚刚安装至本地仓库的版本:

第四步:运行测试类,看是否能够执行成功
第一次执行肯定会遇到很多问题,例如博主就遇到了缺少包的问题:

我们在pom文件中加入:
<!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.26.0-GA</version>
</dependency>
具体加坐标需要去中央仓库搜索 。
再次执行,会发现依然缺少依赖,按照相同步骤解决即可。
把所有的问题解决后,我们通过debug可以发现能够进入到mybatis源码项目中去,大功告成!

使用IDEA导入MyBatis源码进行调试的更多相关文章
- Eclipse里导入Mybatis源码工程
打开Eclipse,在前两天的记录里我已经把Maven什么的都配置好了,还有Mybatis的源码也下载下来了,不相信的话可以去看一下我之前的记录:) OK. Mybatis源码解压之后是一个标准的Ma ...
- idea导入mybatis源码
1.最近在学mybatis,想下载源码导入idea结果网上一查没有一篇完整的,结果让我进了个大坑,算了,废话少说 2.两种办法,一个是git客户端克隆,另外一个是下载code压缩包.先说通过git客户 ...
- idea导入tomcat8源码搭建源码调试环境
从apache tomcat下载tomcat8源码 1.下载到源码后,tomcat默认使用ant作为包管理工具,本地调试时创建pom.xml, 手动创建一个pom.xml放入源码根目录 <?xm ...
- MyBatis源码分析-IDEA新建MyBatis源码工程
MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简 ...
- MyBatis 源码分析——介绍
笔者第一次接触跟MyBatis框架是在2009年未的时候.不过那个时候的他并不叫MyBatis,而是叫IBatis.2010年的时候改为现在的名字--MyBatis.这几年过去了,对于笔者来讲有一点陌 ...
- Spring mybatis源码篇章-MybatisDAO文件解析(二)
前言:通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-MybatisDAO文件解析(一) 默认加载mybatis主文件方式 XMLConfigBuilder ...
- 学习笔记02(随便看看mybatis源码)
两个很有名的持久层hibernate和mybatis应该很熟悉不过了,两者最大相同点是底层都是对jdbc的封装,最大的不同点是前者是自动生成sql语句,后者是需要我们在映射文件中写出sql. 其实从以 ...
- 源码级调试的XNU内核
i春秋翻译小组-FWorldCodeZ 源码级调试的XNU内核 无论你是在开发内核扩展,进行漏洞研究,还是还有其他需要进入macOS / iOS内核,XNU,有时你需要附加调试器.当你这样做时,使用源 ...
- MyBatis 源码分析 - SQL 的执行过程
* 本文速览 本篇文章较为详细的介绍了 MyBatis 执行 SQL 的过程.该过程本身比较复杂,牵涉到的技术点比较多.包括但不限于 Mapper 接口代理类的生成.接口方法的解析.SQL 语句的解析 ...
- MyBatis 源码分析 - 映射文件解析过程
1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...
随机推荐
- 五款最优秀的java微服务框架
微服务被广泛用于创建多功能的应用程序,通过组合每个功能部分并将它们逐层放在一个单元中.许多人可能没有意识到微服务是一组小型服务中制作单个应用程序的方法,每个服务都独立运行(进程). java微服务框架 ...
- mongodb基础整理篇————聚合操作[三]
前言 简单整理一下聚合操作. 正文 什么是聚合框架: 作用于一个或多个集合上 对集合的数据进行的一系列运算 将这些数据转换为期望的形式 从效果而言, 聚合框架相当于SQL 查询中的: Group By ...
- 重新点亮shell————awk表达式[十二]
前言 简单介绍一下awk命令. 正文 介绍: 字段: 实例: 例子: 分割例子: 显示行号例子: awk 表达式: 赋值操作符 这个$1 解释一下,在我们的脚本中,这个$1 是第一个参数,这里是第一个 ...
- 整理k8s————k8s组件[二]
前言 简单整理一下k8s 组件. 正文 borg 架构: borgmaster 是处理请求分发的. borglet 是具体运行容器. 这里有一个调度scheduler,这个比较重要吧. 比如说用户通过 ...
- mysql 必知必会整理—存储过程[十三]
前言 简单整理一下存储过程. 正文 需要MySQL 5 MySQL 5添加了对存储过程的支持,因此,本章内容适用于MySQL 5及以后的版本. 迄今为止,使用的大多数SQL语句都是针对一个或多个表的单 ...
- Vue 路由组件传参的 8 种方式
我们在开发单页面应用时,有时需要进入某个路由后基于参数从服务器获取数据,那么我们首先要获取路由传递过来的参数,从而完成服务器请求,所以,我们需要了解路由传参的几种方式,以下方式同 vue-router ...
- NOI 2024省选OIFC模拟21 蒲巴巴 超繁做法
题目描述 一年一度的 PuBaBa 杯开始了! 今年的 PuBaBa 杯总共有 \(n\) 个选手来参加,编号分别为 \(1,2,\cdots,n\),他们的水平按编号依次递增,所以他们过的题目数量单 ...
- 通过ORPO技术微调 llama3大模型(Fine-tune Llama 3 with ORPO)
1f45bd1e8577af66a05f5e3fadb0b29 通过ORPO对llama进行微调 前言 ORPO是一种新颖的微调技术,它将传统的监督微调和偏好对齐阶段整合到一个过程中.这减少了训练所需 ...
- 【数学】主成分分析(PCA)的详细深度推导过程
Based on Deep Learning (2017, MIT) book. 本文基于Deep Learning (2017, MIT),推导过程补全了所涉及的知识及书中推导过程中跳跃和省略的部分 ...
- 力扣614(MySQL)-二级关注者(中等)
题目: 在 facebook 中,表 follow 会有 2 个字段: followee, follower ,分别表示被关注者和关注者. 请写一个 sql 查询语句,对每一个关注者,查询关注他的关注 ...