Mybatis基础

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)二级缓存装饰模式应用?(参考如下图)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值