Mybatis3基础-工作原理(不整合mybatis-spring)

0.主要核心类

(1)SqlSessionFactory接口  用于生产SqlSession(内部使用DefaultSqlSession 创建SqlSession)

  SqlSessionFactory  的默认具体实现类:DefaultSqlSessionFactory 

  SqlSessionFactoryBuilder 用于创建SqlSessionFactory,内部实际是使用DefaultSqlSessionFactory创建

(1-1)SqlSessionManager类实现了SqlSessionFactory和SqlSession 即是工厂又是SqlSession,具体情况后续分析。

(2)SqlSession接口 用于执行命令、获取映射、管理事务

  SqlSession 默认具体实现类:DefaultSqlSession 用于创建SqlSession

(3)BaseBuilder抽象类

  具体实现类:XMLConfigBuilder,用于构建配置文件

        XMLMapperBuilder,用于构建映射接口

        XMLStatementBuilder,用于构建语句

        SqlSourceBuilder

  Configuration核心类,很多数据都在这里

使用以上类基本就可以把Mybatis构建起来,能满足基本使用需求,一般集成到spring,将实例的生命周期交给spring-IOC管理,将事务交给spring-aop管理,将数据源交给连接池等。后续分析Mybatis-spring,相对简单,涉及的类只有几个。

1.配置文件mybatis-config.xml,具体内容参考官网(https://mybatis.net.cn/configuration.html

核心配置,常用的元素:setting,设置会影响mybatis的行为,比如说缓存、字段映射。

2.配置加载

mybatis的配置有默认行为,就是说手动不增加配置文件或者不使用Configuration进行设置的时候,是没有问题的。

配置有两种方式(1)配置文件(最终都会被保存到Configuration对象中)(2)使用Configuration类。

(1)使用XMLConfigBuilder加载配置文件

支持以Reader、InputStream、XPathParser的方式将配置文件传给构造方法,构造XMLConfigBuilder和Configuration对象,调用parse方法(内部实际调用parseConfiguration方法)进行设置相关配置,最后返回Configuration对象。

Mybatis3基础-工作原理(不整合mybatis-spring)

 

 

 

(2)使用Configuration配置

直接创建Configuration对象,将需要修改的配置set到对应字段中。

Mybatis3基础-工作原理(不整合mybatis-spring)

 

 

 Mybatis3基础-工作原理(不整合mybatis-spring)

 

 

 以上部分是配置的初始化。

3.获取SqlSession,有三种方式

(1)创建DefaultSqlSession对象

它是非线程安全的类,类注释上有相关说明,只有两个构造方法,接收三个参数:配置对象、执行器、是否自动提交。

Mybatis3基础-工作原理(不整合mybatis-spring)

 

 

 

(2)使用SqlSessionFactory

SqlSessionFactory创建SqlSession有两种方法,第一通过默认具体实现类DefaultSqlSessionFactory,它的构造器需要使用到Configuration对象;

第二个是通过SqlSessionFactoryBuilder类构建SqlSessionFactory(内部创建的是DefaultSqlSessionFactory),这种方式比较灵活,构建SqlSessionFactory可以使用配置文件或者Configuration对象。

Mybatis3基础-工作原理(不整合mybatis-spring)

 

 Mybatis3基础-工作原理(不整合mybatis-spring)

 

 

(3)使用SqlSessionManger类,它即是工厂又是会话,这种方式有一定的好处,扩展性、灵活性更好。

Mybatis3基础-工作原理(不整合mybatis-spring)

 

 Mybatis3基础-工作原理(不整合mybatis-spring)

 

 4.使用SqlSession对象

(1)使用Mapper执行相关语句

通过<T> T getMapper(Class<T> type)获取映射接口,使用映射接口调用方法执行语句(映射接口和映射文件有映射关系),好处是类型安全,调用更明确,不需要知道具体的映射文件以及映射语句。

(2)直接使用封装的方法执行语句

调用更加直接,不需要额外定义映射接口,直接使用映射文件中的语句id进行执行语句,开发量少,因为类型不安全,要求使用人员了解映射语句的返回值、参数等相关内容。

以上就是大概的使用,使用注解方式和更具体的,后续补充。只是做笔记,有什么问题,欢迎大家积极沟通

 

上一篇:LER在MPLS域中的全称是什么?


下一篇:Mybatis整合到spring原理