mybatis框架底层原理分析(会话工厂和缓存机制)附详细代码示例

本文深入分析mybatis框架的底层原理,包括会话对象sqlsession的创建和工作流程,以及mybatis的一级和二级缓存机制。通过代码示例和debug调试,揭示了缓存如何提升查询效率,并探讨了可能存在的脏读问题。一级缓存为SqlSession缓存,二级缓存则可跨session共享,实现方式涉及Mapper接口和配置文件中的相关设置。
摘要由CSDN通过智能技术生成

mybatis框架底层原理分析

1,会话工厂创建分析

基于XML方式创建流程大致如下:

01

1,通过IO流读取配置文件

2,解析IO数据并进行封装(所有信息都会存储到Configuration对象中)

3,基于配置对象创建SqlSessionFactory对象

基于代码实现

package com.amdr;

import com.amdr.goods.dao.GoodsDao;
import org.apache.ibatis.builder.xml.XMLMapperBuilder;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.junit.Before;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;

/**
 * @Description
 * @Author Amdr
 * @Date 2023/10/17
 */
public class TestBaseWithJava {
   
    protected SqlSessionFactory sqlSessionFactory;
    @Before
    public void init() throws IOException {
   

        /**
         * 代码实现基于注解操作数据库的配置
         */
        DataSource dataSource = new PooledDataSource("com.mysql.cj.jdbc.Driver","jdbc:mysql:///amdr?serverTimezone=GMT","root","wk7656265");
        TransactionFactory transactionFactory = new JdbcTransactionFactory();
        Environment environment = new Environment("development", transactionFactory, dataSource);
        Configuration configuration = new Configuration(environment);
        configuration.addMapper(GoodsDao.class);

        /**
         * 解析mappers属性 使得注解和xml两种方式都能实现
         * 通过XMLMapperBuilder解析完后的每个语句块儿都会封装为一个MappedStatement对象并存入Map<String,MappedStatement>中
         * 存入到Configuration中,再由SqlSessionFactoryBuilder的build()方法,构建SqlSessionFactory会话工厂对象
         */
        String resource = "mapper/GoodsMapper.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, resource, configuration.getSqlFragments());
        mapperParser.parse();

        sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值