注:本系列源码分析基于mybatis 3.5.6,源码的gitee仓库仓库地址:funcy/mybatis.
1. 获取源码
本文是mybatis源码分析的第一篇,源码分析的第一步就是要获取源码,mybatis 的github仓库为 github/mybatis,对于 git 的 fork、checkout 操作,非本文内容,就不多说了,不过有两点需要说明下:
- 由于你懂的原因,github 网络比较慢,代码下载、提交有诸多不便,可以将其导入到gitee仓库,可大大提高提交速度
- 由于 master 分支上的代码还在开发中,因此强烈建议基于已发布的版本创建新分支,在新分支上进行分支,已发布版本的代码位于tag上
本系列源码分析基于mybatis 3.5.6,源码的gitee仓库仓库地址:funcy/mybatis,该仓库满足了以上两点。
2. demo 准备
checkout 完源码后,接下来就是创建源码分析的 demo 了,示例 demo 的代码结构如下:
- 准备
config.properties文件
该文件存放一些配置内容,主要是数据库相关的配置:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=123
- 准备
mybatis配置文件:mybatis-config.xml
mybatis-config.xml 存放了 mybatis 的各种配置,关于这些配置的内容,可以参考mybatis 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>
<properties resource="org/apache/ibatis/demo/config.properties">
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<!-- 数据源配置 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- mapper 文件配置 -->
<mappers>
<mapper resource="mapper/demo/UserMapper.xml"/>
</mappers>
</configuration>
- 准备
User.java
这是一个简单的 java bean,内容如下:
public class User {
/**
* 用户id
*/
private Long id;
/**
* 登录名
*/
private String loginName;
/**
* 用户昵称
*/
private String nick;
// 省略set与get文件
}
- 准备
UserMapper.java
这个是 mybatis 接口,用来定义查询操作:
public interface UserMapper {
/**
* 查询
* @return
*/
List<User> selectList(@Param("id") Long id, @Param("limit") Integer limit);
}
- 准备
UserMapper.xml文件
该文件路径为 src/test/resources/mapper/demo/UserMapper.xml,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.apache.ibatis.demo.mapper.UserMapper">
<select id="selectList" resultType="org.apache.ibatis.demo.User">
select id, login_name as loginName, nick from user
<trim prefix="where" prefixOverrides="AND |OR">
<if test="id != null">
and id = #{id}
</if>
</trim>
<if test="limit != null">
limit #{limit}
</if>
</select>
</mapper>
- 主类
主类代码如下:
public class Test01 {
public static void main(String[] args) throws Exception {
// 配置文件路径
String resource = "org/apache/ibatis/demo/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);
try (SqlSession sqlSession = factory.openSession()) {
// 获取 mapper,进行查询操作
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.selectList(3L, 10);
System.out.println(users);
}
}
}
运行,结果如下:
[User{id=3, loginName='test', nick='test'}]
运行正常,也能正常获取到结果。
说实话,对于一个常期使用spring与mybatis整合的人来说,Test01的main(...)的代码还是很陌生的,不过这些都是 mybatis 的入门代码(可参考mybatis 入门),本文研究的也是原汁原味的mybatis框架,与spring整合的源码后面再分析。
本文就先到这里了,本文主要是获取mybaits源码及进行demo准备,后续的源码分析就基于这个demo了。
本文原文链接:my.oschina.net/funcy/blog/… ,限于作者个人水平,文中难免有错误之处,欢迎指正!原创不易,商业转载请联系作者获得授权,非商业转载请注明出处。