Mybatis架构设计及源码编译
一、简介
MyBatis并不是一个完整的ORM框架,是一个半自动化的ORM框架,ORM是Object和Relation之间的映射,包括Object->Relation和Relation->Object两方面。Hibernate是个完整的ORM框架,而MyBatis完成的是Relation->Object,也就是其所说的data mapper framework。关于ORM的一些设计思路和细节可以参见Martin Flow《企业应用架构模式》一书中的ORM章节,MyBatis并不刻意于完成ORM(对象映射)的完整概念,而是旨在更简单、更方便地完成数据库操作功能,减轻开发人员的工作量,我想这对于应用系统来说也是最实用的,相信用Hibernate的都受过它的痛苦,而用过MyBatis的都会感觉它很简捷轻松。
二、架构设计
四大对象
StatementHandler:处理sql语句预编译,设置参数等相关工作
ParameterHandler:设置预编译参数用的
ResultHandler:处理结果集
Executor:它是一个执行器,真正进行java与数据库交互的对象
三、源码构建
1、先下载mybatis-parent项目:https://gitee.com/sglx666/mybatis-parent.git,编译构建
2、编译完mybatis-parent后,在同目录下下载mybatis源码:https://gitee.com/sglx666/mybatis-3.git
3、修改mybatis的pom文件,修改parent依赖
<parent>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-parent</artifactId>
<version>34-SNAPSHOT</version>
<relativePath>../mybatis-parent/pom.xml</relativePath>
</parent>
4、去除jdbc的连接器的scope属性
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
<!-- <scope>test</scope>-->
</dependency>
5、在源码main下新建自己的文件夹目录,并创建entity,mapper等,当然如果你是下载我上面的git项目,就已经存在了
6、新建resources目录,添加mybatis-config.xml,db.properties等配置文件
<?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="db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<mappers>
<!-- <package name="com.ren.mybatis.mapper"/>-->
<mapper resource="mapper/PetUserMapper.xml"/>
</mappers>
</configuration>
7、新建测试类
public class App {
public static void main(String[] args) {
String resource = "mybatis-config.xml";
Reader reader;
try {
reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
PetUser petUser = (PetUser)sqlSession.selectOne("com.ren.mybatis.mapper.PetUserMapper.selectById","1");
sqlSession.commit();
System.out.println(petUser);
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
源码的调试环境就构建好了。