当前位置: 首页 > news >正文

Mybatis中执行Sql的执行过程

MyBatis中执行SQL的过程可以分为以下几个步骤:

  1. 解析配置文件:在运行时,MyBatis会加载并解析配置文件(通常为mybatis-config.xml),获取数据库连接信息、映射文件等。

  2. 创建SqlSessionFactory:MyBatis使用SqlSessionFactory来创建SqlSession对象。SqlSessionFactory是一个线程安全的对象,应该在应用程序启动时创建一次,并在整个应用程序生命周期内重复使用。

  3. 创建SqlSession:应用程序通过SqlSessionFactory创建SqlSession对象。SqlSession是一个轻量级的非线程安全对象,用于执行SQL语句和管理事务。

  4. 获取Mapper接口:应用程序通过SqlSession获取Mapper接口的实现类。Mapper接口定义了SQL语句和Java方法之间的映射关系,MyBatis会根据这些映射关系生成SQL语句并执行。

  5. 执行SQL语句:应用程序调用Mapper接口的方法时,MyBatis会根据映射文件中的配置信息,生成对应的SQL语句,并将参数传递给数据库执行。MyBatis支持多种SQL语句,如查询、插入、更新、删除等。

  6. 处理结果集:当数据库执行完SQL语句并返回结果时,MyBatis会将查询结果映射到Java对象中。根据映射文件中的配置规则,MyBatis会将数据库查询结果的列映射到Java对象的属性上,从而方便应用程序对数据的处理和使用。

  7. 提交事务:如果应用程序开启了事务管理,MyBatis会在执行完SQL语句后提交事务。如果发生异常或事务回滚,MyBatis会撤销之前的操作,并关闭数据库连接。

  8. 关闭SqlSession:当应用程序完成对数据库的操作后,需要手动关闭SqlSession对象。这样可以释放资源,避免内存泄漏等问题。

    @Testpublic void testInsert() throws IOException {
//        获取核心配置文件的输入流InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//        获取SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//        获取SqlSessionFactoryBuilder对象SqlSessionFactory build = sqlSessionFactoryBuilder.build(is);
//        获取sql的会话对象sqlSession,是Mybatis提供操作数据库的对象SqlSession sqlSession = build.openSession(true);
//        获取UserMapper的代理实现类对象
//        底层会给我创建UserMapper的实现类,然后返回
//        TODO 使用了代理模式,创建了UserMapper的实现类UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//        TODO 执行原理,根据Id查找,然后找到其映射的对象,然后进行实现 sqlSession.insert()
//        int result = sqlSession.insert("com.mybatis.mapper.UserMapper.insertUserOne");//        User user = new User(null, "abc", "123456", 18);int result = mapper.insertUserOne();System.out.println(mapper instanceof UserMapper);System.out.println("result = " + result);
//        提交事务
//        如果不提交事务,那么显示看不到效果的,事务还没有提交
//        sqlSession.commit();
//        关闭sqlSessionsqlSession.close();}

http://www.lryc.cn/news/210815.html

相关文章:

  • IEEE Standard for SystemVerilog—Chapter 25.7 Tasks and functions in interfaces
  • 一台服务器最大能支持多少条 TCP 连接
  • Qt重定向QDebug,Qt/C++开源作品39-日志输出增强版V2022
  • linux入门---多线程的控制
  • 基于android的 rk3399 同时支持多个USB摄像头
  • 【Qt之控件QTreeView】设置单元格高度、设置图标尺寸
  • 力扣42.接雨水(java,暴力法、前缀和解法)
  • hdlbits系列verilog解答(移位寄存器)-23
  • Linux命令记载
  • Flume 快速入门【概述、安装、拦截器】
  • 【pandas技巧】group by+agg+transform函数
  • 一文解读WordPress网站的各类缓存-老白博客
  • 从零开始:开发直播商城APP的技术指南
  • GZ035 5G组网与运维赛题第6套
  • 分类预测 | Matlab实现KOA-CNN-GRU-selfAttention多特征分类预测(自注意力机制)
  • 【Qt】QString怎么转成int
  • ubuntu 22.04 安装python-pcl
  • 【题解】[GenshinOI Round 3 ]P9817 lmxcslD
  • 在pycharm中,远程操作服务器上的jupyter notebook
  • SQL 运算符
  • 中间件安全-CVE 复现K8sDockerJettyWebsphere漏洞复现
  • 系列九、什么是Spring bean
  • 轻量封装WebGPU渲染系统示例<4>-CubeMap/天空盒(源码)
  • Linux 环境变量 二
  • Beyond Compare4 30天试用到期的解决办法
  • sentinel规则持久化-规则同步nacos-最标准配置
  • 【Linux】tail命令使用
  • 【数据结构】面试OJ题——时间复杂度2
  • LibreOffice编辑excel文档如何在单元格中输入手动换行符
  • ideaSSM在线商务管理系统VS开发mysql数据库web结构java编程计算机网页源码maven项目