MyBatis③核心配置文件
核心配置文件
configuration 配置
必须按以下顺序声明配置(如果有)。
- properties:配置
- settings:设置
- typeAliases:类型别名
- typeHandlers:类型处理器
- objectFactory:对象工厂
- plugins:插件
- environments:环境配置
- environment:环境变量
- transactionManager:事务管理器
- dataSource:数据源
- environment:环境变量
- databaseIdProvider:数据库厂商标识
- mappers:映射器
1.1、enviroments
MyBatis 支持多环境配置,有助于将 SQL 映射应用于多种数据库。
如:开发、测试和生产环境通常使用不同的配置。
每个 SqlSessionFactory 实例只能选择一个环境。
-
ID:环境名称
-
transactionManager:事务管理器
-
dataSource:数据源类型
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="数据库驱动"/> <property name="url" value="jdbc:mysql://主机号:端口号/数据库名?参数"/> <property name="username" value="用户名"/> <property name="password" value="密码"/> </dataSource> </environment> </environments>
1.1.1、事务管理器
- JDBC
- 使用 JDBC 的提交和回滚设置。
- 依赖于从数据源获得的 Connection 来管理事务作用域。
- MANAGED
- 不提交或回滚,由容器管理事务的生命周期(比如JEE 应用服务器的上下文)。
- 默认关闭连接,可通过设置 closeConnection 属性来修改。
1.1.2、数据源类型
- POOLED:利用 “池” 的概念,管理 Connection 对象。
- UNPOOLED:相对于池化,每次被请求时都打开和释放 Connection 对象。
- JNDI:在 EJB、应用服务器等容器中使用。
1.2、properties
- 数据源等配置信息通常在单独的文件(
.properties
)中配置。 - 使用
properties
标签引入外部配置文件。 - 在
property
标签中引用配置信息。
1.2.1、示例
jdbc.properties
存放于 resources 目录,配置信息通常使用 jdbc.
前缀。
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://数据库名:端口号?参数
jdbc.username=用户名
jdbc.password=密码
使用
-
使用
properties
标签,通过resources
属性引入外部配置文件。 -
在
property
标签中,通过${}
引用配置信息。<properties resource="jdbc.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments>
1.2.2、加载顺序
若一个属性在多个地方进行了配置,MyBatis 的加载顺序如下:
“就近”加载,先加载的会被后加载的覆盖。
-
property 标签内的属性。
<dataSource type="POOLED"> <property name="driver" value="驱动名"/> <property name="url" value="jdbc:mysql://数据库名:端口号?参数"/> <property name="username" value="用户名"/> <property name="password" value="密码"/> </dataSource>
-
property 标签引用的外部配置文件。
<dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource>
-
作为方法参数传递的属性。
-
构建
SqlSessionFactory
时,build()
有包含Properties
参数的重载方法。 -
此时
Properties
文件作为方法参数传递,其中的属性即被加载读取。
-
1.3、mappers
用于加载(注册)映射文件,即
Mapper.xml
1.3.1、相对路径:resource
相对于类路径的资源引用
<mappers>
<mapper resource="indi/jaywee/dao/UserMapper.xml"/>
<mapper resource="indi/jaywee/dao/BookMapper.xml"/>
</mappers>
1.3.2、绝对路径:url
(较少使用)基于系统盘符路径
<mappers>
<mapper url="file://.."/>
</mappers>
1.3.3、全限类名:class
Mapper 接口实现类的全限类名:Mapper 接口与对应 Mapper.xml 同名且在同一个包下。
<mappers>
<mapper class="indi.jaywee.dao.UserMapper"/>
<mapper class="indi.jaywee.dao.BookMapper"/>
</mappers>
1.3.4、扫描包:package
扫描并注册指定包中所有 Mapper 接口实现类。
<mappers>
<package name="indi.jaywee.dao"/>
</mappers>
1.4、typeAliases
- 仅用于 XML 配置,可简化 Java 类型的全限类名书写。
- 不区分大小写。
1.4.1、自定义:typeAlias
<typeAliases>
<typeAlias alias="user" type="indi.jaywee.pojo.User"/>
</typeAliases>
1.4.2、扫描包:package
扫描指定包中的 JavaBean,以简单类名作为其别名。
比如 indi.jaywee.pojo 的别名是 user。
<typeAliases>
<package name="indi.jaywee.pojo"/>
</typeAliases>
1.4.3、MyBatis 内置别名
MyBatis 中提供了常用类型的别名。
-
基本类型、String
别名 byte _byte long _long short _short int _int、_integer double _double float _float boolean _boolean String string -
包装类型
别名 Byte byte Long long Short short Integer int、integer Double double Float float Boolean boolean -
常用对象类型
别名 Date date BigDecimal decimal BigDecimal bigdecimal Object object Map map HashMap hashmap List list ArrayList arraylist Collection collection Iterator iterator
1.5、typeHandlers
MyBatis 通过类型处理器(typeHandler)处理实体转换。
- 封装实体:执行 DQL 时,将结果集中的字段封装到 Java 实体中。
- 参数设置:执行 DML 时,将实体数据设置到对应位置的占位符参数。
1.5.1、内置类型处理器
1.5.2、自定义类型处理器
作用:自定义 Java 实体属性与数据库表字段之间的映射关系。
步骤
-
实现 TypeHandler 接口,或继承 BaseTypeHandler 抽象类。
-
实现/重写 4 个方法
- setNonNullParameter:将 Java 属性映射为数据库表字段。
- getNullableResult:将数据库表字段映射为 Java 属性。
-
在 MyBatis 核心配置文件中注册。
<typeHandlers> <typeHandler handler="全限类名"/> </typeHandlers>
1.6、plugins
常用插件
- pageHelper
- mybatis-generator-core
- mybatis-plus
- 通用 mapper
1.7、settings
常用设置
1.7.1、缓存
cacheEnabled
- 说明:全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。
- 取值:true、false(默认 true)
1.7.2、延迟加载
lazyLoadingEnabled
- 说明
- 全局性地开启或关闭所有关联对象的延迟加载。
- 特定关联关系中,可通过
fetchType
属性来覆盖该项的开关状态。
- 取值:true、false(默认 false)
1.7.3、命名映射
mapUnderscoreToCamelCase
- 说明
- 数据库命名规范中多个单词之间以下划线
_
分隔,Java 属性则使用小驼峰命名规范。 - 开启后,会将数据库列名(xxx_yyy)自动映射为 Java 属性名(xxxYyy)
- 数据库命名规范中多个单词之间以下划线
- 取值:true、false(默认 false)
1.7.4、日志实现
logImpl
- 说明:指定 MyBatis 所用日志的具体实现,未指定时将自动查找。
- 取值:默认不开启日志
- SLF4J
- LOG4J、LOG4J2
- JDK_LOGGING
- COMMONS_LOGGING、STDOUT_LOGGING
- NO_LOGGING(最小化日志产生的数量,而不是关闭日志)