【细说Mybatis】2. Mybatis配置文件详解

接着上一节我们来详解一下Mybatis的核心配置文件sqlMapConfig.xml

我们先来看下Mybatis核心配置文件的层级结构

  • configuration(配置)
    • properties(属性)
    • settings(设置)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件)
    • environments(环境配置)
      • environment(环境变量)
        • transactionManager(事务管理器)
        • dataSource(数据源)
    • databaseIdProvider(数据库厂商标识)
    • mappers(映射器)

注意:
configuration 的子标签顺序,需要严格按照上面给的列表顺序进行编写,如果顺序不一致,编译器会直接报错,而且加载配置文件的时候也会报错

下面我们来一一介绍核心配置文件的所有属性

属性 properties

<properties resource="jdbc.properties"/>

属性配置,我们可以引用外部的参数,来对核心配置文件做配置来达到解耦合的目的。比如我们引入了jdbc.properties配置文件,就可以使用EL表达式来对数据源中的参数做替换

<dataSource type="POOLED">
    <property name="driver" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.ur}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</dataSource>

另外我们还可以在properties标签中填写property标签,当配置文件没有生效,或者未加载到的时候可以使用property中提供的属性值

<properties resource="jdbc.properties">
	<property name="driver" value="com.mysql.jdbc.Driver"/>
	<property name="url" value="jdbc:mysql://localhost:3306/lagou"/>
	<property name="username" value="root"/>
	<property name="password" value="root"/>
</properties>

设置 settings

<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>

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。因为参数较多,我们选几个参数进行解释

  • cacheEnabled 全局开启/关闭配置的任何缓存
  • lazyLoadingEnabled 延迟加载的全局开关
  • aggressiveLazyLoading 开启时,任一方法的调用都会加载该对象的所有延迟加载属性。 否则,每个延迟加载属性会按需加载
  • useGeneratedKeys 允许 JDBC 支持自动生成主键,需要数据库驱动支持
    更多参数说明,请参阅:https://mybatis.org/mybatis-3/zh/configuration.html

类型别名 typeAliases

<typeAliases>
    <typeAlias type="com.lagou.domain.User" alias="user"/>
</typeAliases>

类型别名,可以为我们的实体生成一个别名。来替代我们在mapper xml配置文件中的resultType,简化我们的配置

<select id="getUserList" resultType="user">
    select * from users
</select>

类型处理器 typeHandlers

<typeHandlers>
    <typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
</typeHandlers>

MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。下表描述了一些默认的类型处理器。
提示 从 3.4.5 开始,MyBatis 默认支持JSR-310(日期和时间 API) 。

对象工厂 objectFactory

<objectFactory type="org.mybatis.example.ExampleObjectFactory">
    <property name="someProperty" value="100"/>
</objectFactory>

Mybaits每次创建结果集的时候都需要使用对象工厂来完成实例化,如果你想替换工厂的默认行为,可以定义自己的工厂类来实现。

插件 plugins

<plugins>
    <plugin interceptor="com.lagou.interceptor.CustomInterceptor">
        <property name="name" value="tomcat"/>
    </plugin>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
    </plugin>
</plugins>

plugins 标签可以用于在映射SQL语句执行过程中进行拦截,执行一些自定义的操作,下面我们来举一个自定义plugin的例子。里面有详细的说明,我就不一一介绍了。

@Intercepts({
        @Signature(type = StatementHandler.class, //拦截那个接口
                method = "prepare", //接口方法
                args = {Connection.class, Integer.class} //接口参数
        )
})
public class CustomInterceptor implements Interceptor {

    /**
     * 每次操作都会调用这个方法
     */
    public Object intercept(Invocation invocation) throws Throwable {
        //里面可以写增强的逻辑
        System.out.println("增强中。。。");
        //执行原方法
        return invocation.proceed();
    }

    /**
     * 把拦截器生成一个代理,放到拦截器链中
     * 包装目标对象,为目标对象创建代理对象
     *
     * @param target 要拦截的对象
     * @return 代理对象
     */
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    /**
     * 传递插件所需参数
     *
     * @param properties 参数
     */
    public void setProperties(Properties properties) {
        System.out.println("传递参数:" + properties);
    }
}

环境配置 environments

<environments default="dev">
    <!--id环境的唯一标识-->
    <environment id="dev">
        <!--当前事务交给jdbc处理 指定事务类型-->
        <transactionManager type="jdbc" />
        <!--使用mybatis提供的连接池 type指定当前数据源类型-->
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driver}"/>
            <property name="url" value="${jdbc.ur}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </dataSource>
    </environment>
</environments>

environments标签主要有用于数据库环境配置,我们可以针对不同的环境来配置不同的数据库参数。default属性来指定我们使用的是哪一个环境的数据库配置。environments的子标签注释里面有相应的说明,就不多介绍了。

映射器 mappers

<mappers>
    <mapper resource="userMapper.xml"/>
</mappers>

mappers标签用来配置我们的Mapper 语句的位置。
子标签mapper 中参数解释:

  • resource 使用相对于类路径的资源引用
  • url 使用完全限定资源定位符
  • class 使用映射器接口实现类的完全限定类名

子标签package用来将包内的映射器接口实现全部注册为映射器

举例

<mappers>
    <mapper resource="userMapper.xm"/>
    <mapper url="file:///var/mappers/userMapper.xml"/>
    <mapper class="com.lagou.mapper.userMapper"/>
    <package name="com.lagou.mapper"/>
</mappers>

至此,我们针对Mybatis中核心配置文件的说明已经结束,有任何疑问欢迎在评论区给我评论留言。
注:部分资料参考https://mybatis.org/mybatis-3/zh/configuration.html

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值