
MyBatis配置文件主要分为两大类:MyBatis全局配置文件与MyBatis的mapper文件,下面详解MyBatis配置文件@mikechen
MyBatis全局配置文件
MyBatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接信息。
MyBatis全局配置文件,格式如下:
<properties></properties><!-- 属性 -->
<settings></settings> <!-- 设置-->
<typeAliases></typeAliases><!-- 配置别名 -->
<typeHandlers></typeHandlers><!-- 类型处理器 -->
<objectFactory></objectFactory><!-- 对象工厂 -->
<plugins></plugins><!-- 插件 -->
<environments default=""><!-- 环境配置-->
<environment id=""><!-- 环境变量 -->
<transactionManager></transactionManager><!-- 事务管理器 -->
<dataSource></dataSource><!-- 数据源 -->
</environment>
</environments>
<databaseIdProvider></databaseIdProvider><!-- 数据库厂商标识 -->
<mappers></mappers><!-- 映射器 -->
properties配置
将数据库连接参数单独配置在db.properties中,配置示例如下:
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
settings配置
mybatis全局配置参数,全局参数将会影响mybatis的运行行为。比如:开启二级缓存、开启延迟加载。

配置示例如下:
<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25"/> <setting name="defaultFetchSize" value="100"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> </settings>
typeAliases配置
typeAliases可以用来自定义别名,存在的意义仅在于用来减少类完全限定名的冗余。
配置示例如下:
<!-- 单个别名定义 --> <typeAlias alias="user" type="com.mikechen.pojo.User"/>
这样配置的话在MyBatis的xml文件中可以直接使用user代替其类的全限定名,用来减少类完全限定名的冗余。
typeHandlers配置
MyBatis中通过typeHandlers完成jdbc类型和java类型的转换。
比如:Mybatis可以将查询出的数据自动映射进配置文件中绑定的实体类对象,在映射的过程中就存在一个问题。
如何将数据库的数据类型和Java类型对应起来,并将数据库的数据类型转换成Java的数据类型,而typeHandlers的作用就是将从数据库取出的数据以合适的方式转换成Java类型。
Mybatis自带了一些默认的类型处理器,如下表所示:
|
类型处理器 |
Java 类型 |
JDBC 类型 |
|
BooleanTypeHandler |
java.lang.Boolean, boolean |
数据库兼容的 BOOLEAN |
|
ByteTypeHandler |
java.lang.Byte, byte |
数据库兼容的 NUMERIC 或 BYTE |
|
ShortTypeHandler |
java.lang.Short, short |
数据库兼容的 NUMERIC 或 SMALLINT |
|
IntegerTypeHandler |
java.lang.Integer, int |
数据库兼容的 NUMERIC 或 INTEGER |
|
LongTypeHandler |
java.lang.Long, long |
数据库兼容的 NUMERIC 或 BIGINT |
|
FloatTypeHandler |
java.lang.Float, float |
数据库兼容的 NUMERIC 或 FLOAT |
|
DoubleTypeHandler |
java.lang.Double, double |
数据库兼容的 NUMERIC 或 DOUBLE |
|
BigDecimalTypeHandler |
java.math.BigDecimal |
数据库兼容的 NUMERIC 或 DECIMAL |
|
StringTypeHandler |
java.lang.String |
CHAR, VARCHAR |
|
ClobReaderTypeHandler |
java.io.Reader |
– |
|
ClobTypeHandler |
java.lang.String |
CLOB, LONGVARCHAR |
|
NStringTypeHandler |
java.lang.String |
NVARCHAR, NCHAR |
|
NClobTypeHandler |
java.lang.String |
NCLOB |
|
BlobInputStreamTypeHandler |
java.io.InputStream |
– |
|
ByteArrayTypeHandler |
byte[] |
数据库兼容的字节流类型 |
|
BlobTypeHandler |
byte[] |
BLOB, LONGVARBINARY |
|
DateTypeHandler |
java.util.Date |
TIMESTAMP |
|
DateOnlyTypeHandler |
java.util.Date |
DATE |
|
TimeOnlyTypeHandler |
java.util.Date |
TIME |
|
SqlTimestampTypeHandler |
java.sql.Timestamp |
TIMESTAMP |
|
SqlDateTypeHandler |
java.sql.Date |
DATE |
ObjectFactory配置
MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂ObjectFactory实例来完成。
默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。
默认情况下,我们不需要配置,mybatis会调用默认实现的objectFactory, 除非我们要自定义ObjectFactory的实现, 那么我们才需要去手动配置。
配置示例如下:
<configuration>
......
<objectFactory type="org.mybatis.example.ExampleObjectFactory">
<property name="someProperty" value="100"/>
</objectFactory>
......
</configuration
plugins配置
mybatis的插件即是拦截器,通过定义拦截器可以增强mybatis功能,MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。
在mybatis配置文件中可配置一个或多个插件,示例如下:
<plugins>
<!-- 可自定义一个或多个拦截器 -->
<!-- MyPlugin是一个实现了Interceptor接口的类 -->
<plugin interceptor="com.beck.mybatis.plugin.MyPlugin">
<!-- 拦截器可接收到这里配置的属性 -->
<property name="limitNum" value="10"/>
</plugin>
</plugins>
environments配置
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中。
transactionManager:事务管理器, type 表示事务管理器的类型,有两个属性值:
① JDBC:使用Connection对象,由Mybatis自己完成事务的处理。
② MANAGED:管理,表示把事务的处理交给容器实现(由其他软件完成失误的提交,回滚);
dataSource:表示数据数据源,创建的Connection对象连接数据库;其中的 type 数据源的类型, 属性值:
③ pooled。mybatis会在内存中创建pooledDataSource类,管理多个Connection连接对象,使用的连接池,mybatis默认是用XX数据库连接池;
④ UNpooled。不适用连接池,mybatis创建一个UnpooledDataSource这个类,每次执行sql语句先创建Connection对 象,再执行sql语句,最后关闭Connection;
⑤ JNDI。java的命名和目录服务。
配置示例如下:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!--配置数据源:创建Connection对象-->
<dataSource type="pooled">
<!--driver:驱动的内容-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!--链接数据库的url-->
<property name="url" value="jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8"/>
<!--用户名-->
<property name="username" value="root"/>
<!--密码-->
<property name="password" value="root"/>
</dataSource>
</environment>
<environment id="online">
<transactionManager type="JDBC"/>
<!--配置数据源:创建Connection对象-->
<dataSource type="pooled">
<!--driver:驱动的内容-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!--链接数据库的url-->
<property name="url" value="jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8"/>
<!--用户名-->
<property name="username" value="root"/>
<!--密码-->
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
Mappers配置
这个就是用来配置sql映射语句的xml文件了,mappers文件共有4种配置方式。
1、直接配置xml映射文件全限定名
<mappers>
<mapper resource="com/mikechen/mybatis/mapping/UserMapper.xml"/>
</mappers>
2、通过url配置本地或者远程映射文件路径
<mappers>
<mapper url="file://xxx.xxx.UserMapper.xml"></mapper>
</mappers>
123
3、通过配置Mapper接口的方式来配置
<mappers>
<mapper class="com.mikechen.mybatis.mapper.UserMapper"></mapper>
</mappers>
4、通过配置Mapper接口包名的形式来配置
<mappers>
<package name="com.mikechen.mybatis.mapper"/>
</mappers>
注意:在使用第3和第4两种方式配置的时候,需要把xml映射文件和Mapper接口文件放在同一个目录,而且必须同名。
mikechen睿哥
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。