【Mybatis】 -- 工作流程+核心对象生命周期

本文探讨了Mybatis解决JDBC连接数据库问题的特性,如连接池管理、SQL与代码分离、参数映射等,并详细阐述了Mybatis工作流程,包括SqlSessionFactoryBuiler、SqlSessionFactory、SqlSession和Mapper对象的生命周期。SqlSessionFactoryBuiler用于创建SqlSessionFactory,生命周期仅限于构建过程;SqlSessionFactory作为单例存在,负责创建SqlSession;SqlSession不线程安全,需在每次请求时创建并在完成后关闭;Mapper对象在SqlSession事务方法内操作数据库。
摘要由CSDN通过智能技术生成

JDBC连接数据库的问题

1.代码重复
2.结果集处理复杂,需要手动处理,对应表的字段和类型
3连接管理复杂 ,需要手动打开和关闭连接
4.sql写到了业务逻辑里面 耦合度太高 不利于管理

mybatis特性

  • 使用连接池对连接进行管理
  • sql和代码分离,集中管理
  • 参数映射和动态sql
  • 结果集映射
  • 缓存管理
  • 重复sql的提取
  • 插件机制

工作流程图

  1. 解析配置文件
  2. 创建工厂类
  3. 创建会话
  4. 会话操作数据库
    在这里插入图片描述
    在这里插入图片描述

核心对象的生命周期

在编程式使用的这个 demo 里面,我们看到了 MyBatis 里面的几个核心对象:SqlSessionFactoryBuiler、SqlSessionFactory、SqlSession 和 Mapper 对象。这几个核心对象在 MyBatis 的整个工作流程里面的不同环节发挥作用。如果说我们不用容器,自己去管理这些对象的话,我们必须思考一个问题:什么时候创建和销毁这些对象?
在一些分布式的应用里面,多线程高并发的场景中,如果要写出高效的代码,必须了解这四个对象的生命周期。这四个对象的声明周期的描述在官网上面也可以找到。
http://www.mybatis.org/mybatis-3/zh/getting-started.html

我们从每个对象的作用的角度来理解一下,只有理解了它们是干什么的,才知道什么时候应该创建,什么时候应该销毁。

1)SqlSessionFactoryBuiler

首 先 是 SqlSessionFactoryBuiler 。 它 是 用 来 构 建 SqlSessionFactory 的 , 而qlSessionFactory 只需要一个,所以只要构建了这一个 SqlSessionFactory,它的使命就完成了,也就没有存在的意义了。所以它的生命周期只存在于方法的局部。

2)SqlSessionFactory

SqlSessionFactory 是用来创建 SqlSession 的,每次应用程序访问数据库,都需要创建一个会话。因为我们一直有创建会话的需要,所以 SqlSessionFactory 应该存在于应用的整个生命周期中(作用域是应用作用域)。创建 SqlSession 只需要一个实例来做这件事就行了,否则会产生很多的混乱,和浪费资源。所以我们要采用单例模式。

3)SqlSession

SqlSession 是一个会话,因为它不是线程安全的,不能在线程间共享。所以我们在请求开始的时候创建一个 SqlSession 对象,在请求结束或者说方法执行完毕的时候要及时关闭它(一次请求或者操作中)。

4)Mapper

Mapper(实际上是一个代理对象)是从 SqlSession 中获取的。BlogMapper mapper = session.getMapper(BlogMapper.class);
它的作用是发送 SQL 来操作数据库的数据。它应该在一个 SqlSession 事务方法之内。
总结:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值