settings的配置内容
设置参数
描述
有效值
默认值
cacheEnabled
该配置影响的所有映射器中配置的缓存的全局开关
true | false
true
lazyLoadingEnabled
延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态
true | false
false
aggressiveLazyLoading
当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载。
true | false
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
defaultExecutorType
配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新。
SIMPLE REUSE BATCH
SIMPLE
defaultStatementTimeout
设置超时时间,它决定驱动等待数据库响应的秒数。
Any positive integer
Not Set (null)
defaultFetchSize
Sets the driver a hint as to control fetching size for return results. This parameter value can be override by a query setting.
Any positive integer
Not Set (null)
safeRowBoundsEnabled
允许在嵌套语句中使用分页(RowBounds)。
true | false
false
mapUnderscoreToCamelCase
是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。
true | false
false
localCacheScope
MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。
SESSION | STATEMENT
SESSION
jdbcTypeForNull
当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。
JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER
OTHER
lazyLoadTriggerMethods
指定哪个对象的方法触发一次延迟加载。
A method name list separated by commas
equals,clone,hashCode,toString
defaultScriptingLanguage
指定动态 SQL 生成的默认语言。
A type alias or fully qualified class name.
org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver
callSettersOnNulls
指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这对于有 Map.keySet() 依赖或 null 值初始化的时候是有用的。注意基本类型(int、boolean等)是不能设置成 null 的。
true | false
false
logPrefix
指定 MyBatis 增加到日志名称的前缀。
Any String
Not set
logImpl
指定 MyBatis 所用日志的具体实现,未指定时将自动查找。
SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
not set
proxyFactory
指定 Mybatis 创建具有延迟加载能力的对象所用到的代理工具。
CGLIB | JAVASSIST
JAVASSIST (MyBatis 3.3 or above)
别名
表 系统定义的typeAliases
别名
映射的类型
_byte
byte
_long
long
_short
short
_int
int
_integer
int
_double
double
_float
float
_boolean
boolean
string
String
byte
Byte
long
Long
short
Short
int
Integer
integer
Integer
double
Double
float
Float
boolean
Boolean
date
Date
decimal
BigDecimal
bigdecimal
BigDecimal
类型处理器
表 系统注册的typeHandler简介
数据库厂商标识:
作用是指定SQL到对应的数据库厂商提供的数据库中运行
type="DB_VENDOR"是启动MyBatis内部注册的策略器。首先MyBatis会将你的配置读取入Configuration类型里面,在连接数据库后调用getDatabaseProductName()方法区获取数据库的信息,然后用我们配置的name值去做匹配来得到DatabaseId。我们可以用下面的代码来获得数据库的ID
sqlSessionFactory.getConfiguration().getDatabaseId();
我们也可以指定SQL在哪个数据库厂商
select role_no as roleNo, role_name as roleName, note from t_role where role_no=#{roleNo,javaType=String,jdbcType=VARCHAR}
在多了一个databaseId属性的情况下,mybatis将提供如下规则:
如果没有配置,那么databaseId就会返回null;
如果配置了,MyBatis就会用配置的name值去匹配数据库信息,如果匹配的上就会设置databaseId,否则依旧是null;
如果Configuration的databaseId不为空,则它只会找到配置databaseId的SQL语句
MyBatis会加载不带databaseId属性和带有匹配当前数据库databaseId属性的所有语句。如果同时找到带有databaseId和不带databaseId的相同语句,则后者会被舍弃;
映射器
引入映射器的方法:
1.用文件路径引入映射器
2.用包名引入映射器
3.用类注册引入映射器
参考文献:
[1] 杨开振 著,《深入浅出MyBatis技术原理与实战》, 电子工业出版社,2016.09