mybatis核心配置解析

Posted cugb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis核心配置解析相关的知识,希望对你有一定的参考价值。

mybatis配置环境中的核心配置解析

核心配置文件

配置标签列表

configuration(配置)

  • properties(属性):加载.properties`属性配置文件。
  • settings(设置):https://mybatis.org/mybatis-3/zh/configuration.html#properties
  • typeAliases(类型别名):为 pojo 类取一个别名;或指定包名,默认别名为类名小写。
  • typeHandlers(类型处理器):设置 java 数据类型与 sql 数据类型的对应关系。
  • objectFactory(对象工厂): 每次 MyBatis 创建结果对象的新实例时,它都会使用一个对象工厂来完成实例化工作。
  • plugins(插件):使用插件在映射语句执行过程中的某一点进行拦截调用
  • environments(环境配置):可选择其中一个环境 id 作为默认环境。
    • environment(环境变量):每个 SqlSessionFactory 实例只能选择一种环境。
      • transactionManager(事务管理器):会被 Spring 的事务管理器覆盖。
      • dataSource(数据源)
  • databaseIdProvider(数据库厂商标识)
  • mappers(映射器): 直接告诉 MyBatis 到哪里去找映射文件,可以使用资源路径、映射类全类名甚至包名,将包内接口全部注册为映射器。

以上配置文件,顺序是固定的,不能颠倒。举个栗子:你不能把别名配置在设置之前。

1、properties

定义配置,配置的属性可以在整个文件中其他的地方进行引用;这个属性比较重要,对于属性值可能变化的项我们优先是想用property配置文件解耦。例如jdbc连接数据库的驱动名称、密码、用户名等

//将数据库信息通过properties导进来,实现数据库基本信息的解耦 
<properties resource="database.properties"/>

2、settings

设置指定Mybatis 的一些全局配置属性,它们会影响Mybatis运行时的行为。它内容很多,以下挑几个常用的介绍

设置名 描述 有效值 默认值
cacheEnabled 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 true|false true
lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 true|false false
logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 ...

log4j设置实例

<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

设置log4j的输出格式(在maven项目的resources目录下创建log4j.properties文件)

log4j.rootLogger=DEBUG, stdout, logfile
 
log4j.category.org.springframework=ERROR
log4j.category.org.apache=INFO
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
 
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${myweb.root}/WEB-INF/log/myweb.log
log4j.appender.logfile.MaxFileSize=512KB
log4j.appender.logfile.MaxBackupIndex=5
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

其他属性可以自行查看官方文档了解

3、typeAliases

自定义别名或者扫描包,被扫描包中的类自动生成默认别名(类名的首字母小写)

<typeAliases><!--自定义别名-->
    <typeAlias alias="order" type="com.cugb.pojo.Order"/>
    <typeAlias alias="user1" type="com.cugb.pojo.User"/>
</typeAliases>


<typeAliases><!--扫描包生成默认别名-->
    <package name="com.cugb.pojo"/>
</typeAliases>

系统默认别名

4、typeHandlers

用于jdbcType 与 javaType 之间的转换;(没有特殊需要不用调整)
在TypeHandlerRegistry 注册中心中已经把大部分的java 和数据库之间类型的做好了映射,例如我们想把一些枚举类型转化成我们的数据库中的字段,那时候我们就要用到typeHandlers 来做映射(用的比较少)

5、ObjectFactory

Mybatis 每次创建结果对象的新实例时,都会使用对象工厂ObjectFactory 去创建POJO(基本不用修改,用默认的就好)

6、plugins

插件,Mybatis允许我们在已经映射的语句执行过程做那个的某一点进行拦截调用

7、environments

MyBatis 可以配置成适应多种环境

不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

Mybatis 默认的事务管理器是JDBC,连接池:POOLED

<environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

8、mappers

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。 但是, 首先我们需要告诉 MyBatis 到哪里去找到这些语句。

1、通过resource加载映射文件(推荐使用

<mappers>
  <mapper resource="com/cugb/dao/DaoUsersMapper.xml"/>
</mappers>

2、通过mapper接口加载映射文件

<mappers>
  <mapper class="com.cugb.dao.DaoUsersMapper.xml"/>
</mappers>

3、自动注册包内所有接口

<mappers>
  <package name="com.cugb.dao"/>
</mappers>

其中,2和3两种方式使用的前提是,需要将mapper接口类名与xml文件映射名称保持一致,且在一个目录中

在扫描引射器的过程中,有可能找不到类,需要在pom.xml文件中配置

<build>
	<resources>
		<resource>
			<directory>src/main/java</directory>
			<includes>
				<include>*.xml</inlude><!--默认(新添加自定义则失效)-->
				<include>**/*.xml</include><!--新添加 */代表1级目录 **/代表多级目录-->
			</includes>
			<filetering>true</filetering>
		</resource>
	</resources>
</build>



以上是关于mybatis核心配置解析的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis 源码:Mybatis配置解析

MyBatis:配置解析

Mybatis:MyBatis核心组件介绍原理解析和源码解读

Mybatis——Dao层实现映射文件深入核心配置文件深入

MyBatis的相关api以及配置解析

MyBatis源码分析四XML解析与核心对象的构建