Mybatis应用架构的
MyBatis 是一个优秀的持久层框架,实现了对JDBC操作(标准API)的封装,主要用于传统简化JDBC操作中的一些相对繁琐的步骤,例如参数的映射,结果集的映射(数据库中记录存储到内存中的对象中)等。
Mybatis 产品架构
mybatis作为一个持久层框架,应该解决哪些功能性问题?
1)会话功能 (SqlSession)
2)会话语言 (SQL,动态SQL)
3)会话协议 (TCP)
4)用户体验 (连接池,缓存,日志)
创建与配置
MySQL驱动依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
Mybatis 框架依赖(参考官方 mybatis.org/mybatis-3)
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
Junit单元测试依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
配置项目
在src/main/resources目录下创建mybatis-configs.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">
<!-- mybatis 核心配置 -->
<configuration>
<!-- 配置初始化环境(连接) -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 使用mybatis自带连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///dbgoods?serverTimezone=GMT"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
java测试代码
public class TestBase {
/**
* 借助此对象创建SqlSession(通过此对象
* 实现与数据库之间的会话)
*/
protected SqlSessionFactory factory;
/**
* 此方会在@Test注解修饰的方法之前执行,
* 通常用于做一些初始化操作(方法名自己定义)
*/
@Before
public void init()throws IOException{
InputStream in=
Resources.getResourceAsStream("mybatis-configs.xml");
factory=new SqlSessionFactoryBuilder().build(in);
//系统底层建造者模式构建工厂对象(此对象构建过程相对复杂)
System.out.println(factory);
}
@Test
public void testSqlSessionConnection(){
SqlSession session=factory.openSession();
Connection conn=session.getConnection();
System.out.println(conn);
}
}
API 创建过程分析:
缓存应用实现过程分析
1.Mybatis 一级缓存
Mybatis中的一级缓存有时又称为SqlSession级缓存,SqlSession关闭时一级缓存失效。在同一个SqlSession内部多次执行同一个查询,后续的查询会从此缓存取数据.一级缓存结构分析如下:
一级缓存基本架构应用分析:
2.MyBatis二级缓存
Mybatis中的二级缓存有时又称跨session缓存,可在多个SqlSession间共享数据,假如要使用二级缓存,可在对应的mapper文件中借助cache元素进行配置(可参考官方映射文件配置),二级缓存架构分析如下:
FAQ?
1)为什么二级缓存对外直接使用SynchronizedCache?
2)什么场景下二级缓存中要使用SerializedCache?(不同的SqlSession获对应不同缓存对象-性能相对较低,但缓存中的对象线程安全).
3)二级缓存如何配置?(参考官网mybatis.org/mybatis-3)
4)二级缓存装饰模式应用?(参考如下图)