MyBatis的执行流程

MyBatis是怎么执行的,他遇到了哪些东西

第一步 读取MyBatis的配置文件

加载MyBatis的主配置,包含了全局配置、数据库的配置以及扫描mapper.xml文件

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">
<configuration>

    <environments default="mysql">
        <environment id="mysql">
            <!--配置事务的类型,使用本地事务策略-->
            <transactionManager type="JDBC"></transactionManager>
            <!--是否使用连接池 POOLED表示使用链接池,UNPOOLED表示不使用连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/demo"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>
    </mappers>

</configuration>

第二步 生成InputStream输入流,通过输入流创建SqlSessionFactory对象

java 复制代码
//加载主配置文件,目的:构建SqlSessionFactory对象
InputStream inputStream= Resources.getResourceAsStream("SqlMapConfig.xml");
//创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession对象(用SqlSessionFactory工厂对象)
SqlSession sqlSession=sqlSessionFactory.openSession();
//通过sqlSession创建UserMapper接口的代理对象
UserDao userMapper=sqlSession.getMapper(UserDao.class);

在这一步,会生成无数的sqlSession对象,其实用的时候只用了其中一个sqlSession,然后执行的时候就用这一个sqlSession来执行

展开一个sqlSession对象

对象就是一块内存空间,这里面又包含两个重要的东西:Exectuor执行器和Cache缓存

这个cache是一级缓存/本地缓存,它是sqlSession级别的缓存,这个缓存默认是开启的;二级缓存是SqlSessionFactory级别的

Exectuor执行器:本身是个对象,他内部封装的还是JDBC

这里面的UserDao只是用来代理的

然后就可以调用写好的方法

java 复制代码
//调用查询方法
List<User> users=userMapper.findAll();
for(User user:users){
     System.out.println(user);
}

最后要释放资源

java 复制代码
//释放资源
sqlSession.close();
inputStream.close();
相关推荐
Joy T3 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
m0_587383006 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·6 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
专注仿真6 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
Best-Wishes7 小时前
科来网络分析系统(技术交流版)使用说明书
开发语言·junit·php
代码不停7 小时前
自动化测试(java)
java·开发语言·selenium·自动化
鬼手点金9 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
爱上网的小舟9 小时前
星际战士2启动错误怎么办?5种游戏报错解决方法
开发语言·php
paopaokaka_luck10 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
阿里嘎多学长10 小时前
2026-10-12 GitHub 热点项目精选
开发语言·程序员·github·代码托管