mybatis核心配置解析
mybatis配置环境中的核心配置解析
核心配置文件
配置标签列表:
configuration
(配置)
- properties
(属性):加载
.properties`属性配置文件。 settings
(设置):https://mybatis.org/mybatis-3/zh/configuration.html#propertiestypeAliases
(类型别名):为 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>