《Java EE互联网轻量级框架整合开发》Mybatis笔记

1.MyBatis的核心组件

SqlSessionFactoryBuilder(构造器):它会根据配置或者代码来生成SqlSessionFactory,采用的是分步构建的Builder模式
SqlSessionFactory(工厂接口):依靠他来生成SqlSession,使用的是工厂模式
SqlSession(会话):一个即可以发送SQL执行返回结果,也可以获取Mapper的接口。在现有的技术中,一般我们会让其在业务逻辑代码中消失,而使用的是MyBatis提供的SQL Mapper接口编程技术,他能提高代码的可读性和可维护性。
SQL Mapper(映射器):MyBatis新设计存在的组件,他由一个Java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则。他负责发送SQL来执行,并返回结果。

SqlSessionFactory(工厂接口)

使用MyBatis首先是使用配置或者代码去生产SqlSessionFactory,而Mybatis提供了构造器SqlSessionFactoryBuilder,它提供了一个Configuration类作为引导,采用builder模式生成SqlSessionFactory。
SqlSessionFactory是一个接口,在Mybatis中它存在两个实现类:SqlSessionManager和DefaultSqlSessionFactory,一般而言,具体是有DefaultSqlSessionFactory实现,而SqlsessionManager使用在多线程的环境中。
alt

SqlSession

SqlSession有两个实现类,DefaultSqlSession和SqlSessionManager,前者是单线程使用的,后者在多线程环境使用,SqlSession的作用类似于一个JDBC的一个Connecttion对象,代表着一个连接资源的启用。它的作用有3个:
1.获取Mapper接口
2.发送SQL给数据库
3.控制数据库事务

SQL Mapper(映射器)

映射器由一个接口和对应的xml文件(或注解)组成,用于将POJO映射到数据库。两种映射方式写法如下:
在这里插入图片描述

生命周期

SqlSessionFactoryBuilder在创建SqlSessionFactory成功后就应该被销毁。
SqlSessionFactory可以被认为是一个数据库连接池,所以生命周期等同于Mybatis应用周期,存在于整个Mybatis的应用中。
SqlSession相当于连接时的Connection对象,所以它只存活在一个业务请求中,当业务请求结束就会被销毁。
Mapper的生命周期应该小于等于SqlSession的生命周期,它对应的是一个业务请求中的某一个具体请求,一旦处理完了相关业务就会被销毁,比如一个select语句。

2.MyBatis配置

MyBatis配置文件所有元素如下

<?xml version="1.0" encoding='UTF-8"?>
<configuration> <!--配置-->
	<properties/><!--属性-->
        <settings/><!--设置-->
        <typeAliases/><!--类型命名-->
        <typeHandlers/><!--类型处理器-->
        <objectFactory/><!--对象工厂-->
        <plugins/><!--插件-->
        <environments><!--配置环境-->
     		<environment><!--环境变量-->
     			<transactionManager/><!--事务管理器-->
     			<datasource/><!--数据源-->
   		<environment/>
       <environments/>
       <databaseIdProvider/><!--数据库厂商标识-->
       <mappers/><!--映射器-->
<configuration/>  	  
properties属性

用于给系统配置一些运行参数,一般放在properties文件里,使用方法为

<properties resource="jdbc.properties"/>
settings设置

settings是MyBatis中最复杂的配置,它能影响MyBatis的底层运行,但是在大部分情况使用默认值便可以运行,大部分情况也不需要修改它。

typeAliases别名

由于类的全限定名称很长,需要大量使用的时候不太方便,所以MyBatis允许使用一个简写代替这个类,这就是别名。定义别名有两种方式:
1.根据类定义别名

<typeAliases>
	<typeAlias alias="role" type="com.learn.ssm.chapter4.pojo.Role"/>
<typeAliases/>

2.根据包定义别名

<typeAliases>
	<package name="com.learn.ssm.chapter4.pojo"/>
<typeAliases/>
typeHandler类型转换器

typeHandler承担的角色是jdbcType(数据库类型)和javaType(Java类型)的相互转换,很多情况下我们并不需要去配置jdbcType和javaType之间的相互转换,但是对于那些需要使用自定义枚举的场景,或者数据库使用特殊数据类型的场景,可以使用自定义的typeHandler去处理类型之间的转换问题。自定义typeHandler需要重写TypeHandler接口。

ObjectFactory(对象工厂)

用来创建结果集实例,默认情况使用的是DefaultObjectFactory,如果需要自定义,则需要实现ObjectFactory接口或者继承DefaultObjectFactory,然后重写其中的一些方法。

plugin(插件)

对MyBatis进行扩展,将覆盖MyBatis底层对象的核心方法和属性。比如分页插件就是在这里定义。

environment(运行环境)

用于配置数据库信息,包括TransactionManger(事务管理器)和datasource(数据源),如果我们采用Spring对事务管理器和数据源进行管理,这两个的配置就可以放到Spring的配置文件里。

databaseIdProvider(数据库厂商标识)

用于支持多种不同厂商的数据库。

猜你喜欢

转载自blog.csdn.net/bathe123/article/details/82778407