mybaties源码浅析

1.Mybatis介绍

    MyBatis并不是一个完整的ORM框架,其官方首页是这么介绍自己: The MyBatis data mapper framework makes it easier to use a relational database with object-oriented applications. MyBatis couples objects with stored procedures or SQL statements using a XML descriptor or annotations.Simplicity is the biggest advantage of the MyBatis data mapper over object relational mapping tools. ORM是 Object和Relation之间的映射,包括Object->Relation和Relation->Object两方面。Hibernate是个完整的ORM框架,而MyBatis完成的是Relation->Object,也就是其所说的data mapper framework.。

2.整体设计

2.1功能架构设计



  

2.2接口

 

3.代码分析

 3.1测试代码

public class Test {
	public static void main(String[] args) throws Exception {
		String resource = "test-mybatis-config.xml";

		Reader reader = Resources.getResourceAsReader(resource);

		SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);

		SqlSession session = ssf.openSession();

		TestData params = new TestData();
		params.setId("1");
		session.selectList("com.thinkgem.jeesite.test.dao.TestDataDao.get", params);

	}
}
<?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>
	<!-- url和resource不能同时配置, url和resource优先级高于内部 -->
	<properties resource="jeesite.properties">
		<property name="jdbc.password" value="1"/>
	</properties>
	<environments default="myexample">
		<environment id="myexample">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="TestDataDao.xml" />
	</mappers>
</configuration>

 3.2测试时序图



 
3.3源码

3.3.1配置文件解析

配置文件解析使用XMLConfigBuilder来解析

 3.2解析sql

通过SqlSource解析得到BoundSql。SqlSource代表从xml文件或注解映射的sql内容,BoundSql保护解析后的sql,参数,参数类型等。



 

其中SqlNode为xml中sql的每个标签信息
 

 测试代码的sql解析以MappedStatement.getBoundSql(Object parameterObject)开始



 

注:mybatis为3.2.8版本

猜你喜欢

转载自pigxu.iteye.com/blog/2300669