MyBatis配置文件详解(8大必备配置文件)

MyBatis配置文件详解(8大必备配置文件)-mikechen

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的运行行为。比如:开启二级缓存、开启延迟加载。

MyBatis配置文件详解(8大必备配置文件)-mikechen

配置示例如下:

<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年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法