Springboot中以配置类⽅式⾃定义Mybatis的配置规则(如开启驼峰映射等)什么是⾃定义Mybatis的配置规则?
答:即原来在mybatis配置⽂件中中我们配置到<settings>标签中的内容,如下第6-10⾏内容:
1<?xml version="1.0" encoding="UTF-8" ?>
2<!DOCTYPE configuration
3        PUBLIC "-////DTD Config 3.0//EN"
4        "/dtd/mybatis-3-config.dtd">
5<configuration>
6<settings>
7<setting name="lazyLoadingEnabled" value="true"/>
8<setting name="aggressiveLazyLoading" value="false"/>
9<setting name="logImpl" value="LOG4J"/>
10</settings>
11<environments default="development">
12<environment id="development">
13<transactionManager type="JDBC"/>
14<dataSource type="POOLED">
15<property name="driver" value="sql.jdbc.Driver"/>
16<property name="url"
17                          value="jdbc:mysql://localhost:3306/ssm?useSSL=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8"/>
18<property name="username" value="root"/>
19<property name="password" value="123456"/>
20</dataSource>
21</environment>
22</environments>
23<mappers>
24<!--<mapper resource="com/xj/l"/>-->
25<mapper class="com.xj.mapper.UserMapper"/>
26<mapper class="com.xj.mapper.AccountMapper"/>
27
28</mappers>
29</configuration>
在springboot我们不⽤编写xml配置⽂件,那么我们该怎么来配置这些设置呢?
答:编写⼀个配置类,然后通过@Bean注解给容器中添加⼀个ConfigurationCustomizer类型的组件即可。如下例⼦所⽰:
@Configuration
public class MybatisConfig {
@Bean
public ConfigurationCustomizer configurationCustomizer(){
return new ConfigurationCustomizer() {
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setLazyLoadingEnabled(true);
configuration.setMapUnderscoreToCamelCase(true);
configuration.setLogImpl(Log4jImpl.class);
}
log4j2自定义日志文件名};
}
}
Mybatis中可以配置的设置如下所⽰:
设置名描述有效值默认值cacheEnabled全局性地开启或关闭所有映射器配置⽂件中已配置的任何缓存。true | false true
lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。
特定关联关系中可通过设置fetchType属性来覆盖该项的开关状
态。
true | false false
aggressiveLazyLoading 开启时,任⼀⽅法的调⽤都会加载该对象的所有延迟加载属性。
否则,每个延迟加载属性会按需加载(参
考lazyLoadTriggerMethods)。
true | false false (在 3.4.1 及之前的版本中默认为 true)
multipleResultSetsEnabled是否允许单个语句返回多结果集(需要数据库驱动⽀持)。true | false true useColumnLabel使⽤列标签代替列名。实际表现依赖于数据库驱动,具体可参考
数据库驱动的相关⽂档,或通过对⽐测试来观察。
true | false true
useGeneratedKeys 允许 JDBC ⽀持⾃动⽣成主键,需要数据库驱动⽀持。如果设置
为 true,将强制使⽤⾃动⽣成主键。尽管⼀些数据库驱动不⽀持
此特性,但仍可正常⼯作(如 Derby)。
true | false False
autoMappingBehavior 指定 MyBatis 应如何⾃动映射列到字段或属性。 NONE 表⽰关闭
⾃动映射;PARTIAL 只会⾃动映射没有定义嵌套结果映射的字
段。 FULL 会⾃动映射任何复杂的结果集(⽆论是否嵌套)。
NONE, PARTIAL, FULL PARTIAL
autoMappingUnknownColumnBehavior 指定发现⾃动映射⽬标未知列(或未知属性类型)的⾏为。
NONE: 不做任何反应
WARNING: 输出警告⽇志
('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior'的
⽇志等级必须设置为WARN)
FAILING: 映射失败 (抛出SqlSessionException)
NONE, WARNING,
FAILING
NONE
defaultExecutorType 配置默认的执⾏器。SIMPLE 就是普通的执⾏器;REUSE 执⾏
器会重⽤预处理语句(PreparedStatement); BATCH 执⾏器
不仅重⽤语句还会执⾏批量更新。
SIMPLE REUSE
BATCH
SIMPLE
defaultStatementTimeout设置超时时间,它决定数据库驱动等待数据库响应的秒数。任意正整数未设置 (null) defaultFetchSize为驱动的结果集获取数量(fetchSize)设置⼀个建议值。此参数
只可以在查询设置中被覆盖。
任意正整数未设置 (null)
FORWARD_ONLY |
defaultResultSetType指定语句默认的滚动策略。(新增于 3.5.2)SCROLL_SENSITIVE |
SCROLL_INSENSITIVE
| DEFAULT(等同于未
设置)
未设置 (null)
safeRowBoundsEnabled是否允许在嵌套语句中使⽤分页(RowBounds)。如果允许使⽤
则设置为 false。
true | false False
safeResultHandlerEnabled是否允许在嵌套语句中使⽤结果处理器(ResultHandler)。如果
允许使⽤则设置为 false。
true | false True
mapUnderscoreToCamelCase是否开启驼峰命名⾃动映射,即从经典数据库列名 A_COLUMN
映射到经典 Java 属性名 aColumn。
true | false False
localCacheScope MyBatis 利⽤本地缓存机制(Local Cache)防⽌循环引⽤和加速
重复的嵌套查询。默认值为 SESSION,会缓存⼀个会话中执⾏
的所有查询。若设置值为 STATEMENT,本地缓存将仅⽤于执
⾏语句,对相同 SqlSession 的不同查询将不会进⾏缓存。
SESSION |
STATEMENT
SESSION
jdbcTypeForNull 当没有为参数指定特定的 JDBC 类型时,空值的默认 JDBC 类
型。某些数据库驱动需要指定列的 JDBC 类型,多数情况直接⽤
⼀般类型即可,⽐如 NULL、VARCHAR 或 OTHER。
JdbcType 常量,常⽤
值:NULL、VARCHAR
或 OTHER。
OTHER
lazyLoadTriggerMethods指定对象的哪些⽅法触发⼀次延迟加载。⽤逗号分隔的⽅法列
表。
equals,clone,hashCode,toString
defaultScriptingLanguage指定动态 SQL ⽣成使⽤的默认脚本语⾔。⼀个类型别名或全限定
类名。
org.apache.ltags.XMLLanguageDriver
defaultEnumTypeHandler指定 Enum 使⽤的默认TypeHandler。(新增于 3.4.5)⼀个类型别名或全限定
类名。
org.pe.EnumTypeHandler
callSettersOnNulls 指定当结果集中值为 null 的时候是否调⽤映射对象的
setter(map 对象时为 put)⽅法,这在依赖于 Map.keySet() 或
null 值进⾏初始化时⽐较有⽤。注意基本类型(int、boolean
等)是不能设置成 null 的。
true | false false
returnInstanceForEmptyRow 当返回⾏的所有列都是空时,MyBatis默认返回null。当开启这个
设置时,MyBatis会返回⼀个空实例。请注意,它也适⽤于嵌套
的结果集(如集合或关联)。(新增于 3.4.2)
true | false false
logPrefix指定 MyBatis 增加到⽇志名称的前缀。任何字符串未设置
logImpl指定 MyBatis 所⽤⽇志的具体实现,未指定时将⾃动查。SLF4J | LOG4J |
LOG4J2 |
JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING |
NO_LOGGING
未设置
proxyFactory指定 Mybatis 创建可延迟加载对象所⽤到的代理⼯具。CGLIB | JAVASSIST JAVASSIST (MyBatis 3.3 以上)
vfsImpl指定 VFS 的实现⾃定义 VFS 的实现的类
全限定名,以逗号分
隔。
未设置
useActualParamName 允许使⽤⽅法签名中的名称作为语句参数名称。为了使⽤该特
性,你的项⽬必须采⽤ Java 8 编译,并且加上-parameters选项。
(新增于 3.4.1)
true | false true
configurationFactory 指定⼀个提供Configuration实例的类。这个被返回的
Configuration 实例⽤来加载被反序列化对象的延迟加载属性值。
这个类必须包含⼀个签名为static Configuration getConfiguration()的⽅
法。(新增于 3.2.3)
⼀个类型别名或完全限
定类名。
未设置
shrinkWhitespacesInSql Removes extra whitespace characters from the SQL. Note that
this also affects literal strings in SQL. (Since 3.5.5)
true | false false
设置名描述有效值默认值

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。