在开始阅读MyBatis 源码之前,我们先阅读一下MyBatis官网文档,从头开始使用一下这个框架,这是MyBatis 官方文档链接https://mybatis.org/mybatis-3/zh/getting-started.html。
。。。。。。阅读中。。。。。。
在阅读文档后,我们发现在MyBatis中有几个比较重要对象,他们分别是
1、Configuration:MyBatis中对应的配置对象,整个应用程序只包含一个Configuration对象。
2、SqlSessionFactoryBuilder:SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory,一旦创建了 SqlSessionFactory,就不再需要它了。
3、SqlSessionFactory:一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。我们可以从中获取SqlSession实例。
4、SqlSession:提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的。
在大致了解上述对象的作用后,我们按照文档创建了一个MyBatis的项目,代码如下
1:配置pom.xml
<dependencies>
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
</dependencies>
2:配置mybatis-config.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>
<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://xxxxxxx:3306/demo"/>
<property name="username" value="root"/>
<property name="password" value="xxxxxxx"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="./mappers/JobMapper.xml"/>
</mappers>
</configuration>
3:配置Mapper.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.example.dao.JobMapper">
<select id="selectJob" resultType="org.example.entity.Job">
select * from job where id = #{id}
</select>
</mapper>
4:添加对应实体和测试代码
public class Job {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Job{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
public class Demo {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
Job job = (Job)sqlSession.selectOne("org.example.dao.JobMapper.selectJob", 1);
System.out.println(job.toString());
}
}
5:运行输出结果和数据库数据
经过上述测试代码,能够正常运行,并且把id=1的数据从数据库查询出来,但是现在有一个疑问,mybatis 是如何运行的,其内部机制到底是怎样的呢?我们带着这个疑问,从测试代码中进行层层调试,一步一步跟进。。。
【个人阅读源码,能力有限,望各方大佬有幸瞧见后能指点一二,如果有错误之处,我看到后会立马改正,谢谢🙏🙏🙏】