下面介绍下MyBatis-Plus在使用过程中的常用配置选项,其中,部分配置继承自MyBatis原生所支持的配置
下面是在两种不同配置文件配置的示例:
yml文件:
mybatis-plus:
......
configuration:
......
global-config:
......
db-config:
......
properties文件
mybatis-plus.config-location=....
该部分是MyBatis-Plus的一些基础配置
configLocation
类型:String
默认值:null
MyBatis 配置文件位置,如果您有单独的 MyBatis 配置,请将其路径配置到 configLocation 中
mapperLocations
类型:String[]
默认值:["classpath*:/mapper/**/*.xml"]
MyBatis Mapper 所对应的 XML 文件位置,如果您在 Mapper 中有自定义方法(XML 中有自定义实现),需要进行该配置,告诉 Mapper 所对应的 XML 文件位置
例:
mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml
typeAliasesPackage
类型:String
默认值:null
MyBaits 别名包扫描路径,通过该属性可以给包中的类注册别名,注册后在 Mapper 对应的 XML 文件中可以直接使用类名,而不用使用全限定的类名(即 XML 中调用的时候不用包含包名)
例:
mybatis-plus.type-aliases-package=com.example.spring_cloud_demo.pojo
配置了typeAliasesPackage,我们就可以使用类别名,如下的User,否则我们就 需要写类的全路径(com.example.spring_cloud_demo.pojo.User)
<select id="findById" parameterType="int" resultType="User">
select * from items where id = #{id}
</select>
executorType(只能在spring boot项目配置)
类型:ExecutorType
默认值:simple
通过该属性可指定 MyBatis 的执行器,MyBatis 的执行器总共有三种:
ExecutorType.SIMPLE:该执行器类型不做特殊的事情,为每个语句的执行创建一个新的预处理语句(PreparedStatement)
ExecutorType.REUSE:该执行器类型会复用预处理语句(PreparedStatement)
ExecutorType.BATCH:该执行器类型会批量执行所有的更新语句
例:
mybatis-plus.executor-type=batch
configurationProperties
类型:Properties
默认值:null
指定外部化 MyBatis Properties 配置,通过该配置可以抽离配置,实现不同环境的配置部署
例:
mybatis-plus.configuration-properties.[0]=classpath:mybatis/config.properties
Configuration部分的配置都是以mybatis-plus.configuration开头的
本部分(Configuration)的配置大都为 MyBatis 原生支持的配置,这意味着您可以通过 MyBatis XML 配置文件的形式进行配置。
mapUnderscoreToCamelCase
类型:boolean
默认值:true
是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射。
aggressiveLazyLoading
类型:boolean
默认值:true
当设置为 true 的时候,懒加载的对象可能被任何懒属性全部加载,否则,每个属性都按需加载。需要和 lazyLoadingEnabled 一起使用。
例:
mybatis-plus.configuration.lazy-loading-enabled=true
autoMappingBehavior
类型:AutoMappingBehavior
默认值:partial
MyBatis 自动映射策略,通过该配置可指定 MyBatis 是否并且如何来自动映射数据表字段与对象的属性,总共有 3 种可选值:
AutoMappingBehavior.NONE:不启用自动映射
AutoMappingBehavior.PARTIAL:只对非嵌套的 resultMap 进行自动映射
AutoMappingBehavior.FULL:对所有的 resultMap 都进行自动映射
例:
mybatis-plus.configuration.auto-mapping-behavior=full
autoMappingUnknownColumnBehavior
类型:AutoMappingUnknownColumnBehavior
默认值:NONE
MyBatis 自动映射时未知列或未知属性处理策略,通过该配置可指定 MyBatis 在自动映射过程中遇到未知列或者未知属性时如何处理,总共有 3 种可选值:
AutoMappingUnknownColumnBehavior.NONE:不做任何处理 (默认值)
AutoMappingUnknownColumnBehavior.WARNING:以日志的形式打印相关警告信息
AutoMappingUnknownColumnBehavior.FAILING:当作映射失败处理,并抛出异常和详细信息
例:
mybatis-plus.configuration.auto-mapping-unknown-column-behavior=warning
localCacheScope
类型:String
默认值:SESSION
Mybatis一级缓存,默认为 SESSION。
SESSION session级别缓存,同一个session相同查询语句不会再次查询数据库
STATEMENT 关闭一级缓存
单服务架构中(有且仅有只有一个程序提供相同服务),一级缓存开启不会影响业务,只会提高性能。 微服务架构中需要关闭一级缓存,原因:Service1先查询数据,若之后Service2修改了数据,之后Service1又再次以同样的查询条件查询数据,因走缓存会出现查处的数据不是最新数据
例:
mybatis-plus.configuration.local-cache-scope=statement
cacheEnabled
类型:boolean
默认值:true
开启Mybatis二级缓存,默认为 true。
例:
mybatis-plus.configuration.cache-enabled=false
callSettersOnNulls
类型:boolean
默认值:false
指定当结果集中值为 null 的时候是否调用映射对象的 Setter(Map 对象时为 put)方法,通常运用于有 Map.keySet() 依赖或 null 值初始化的情况。
通俗的讲,即 MyBatis 在使用 resultMap 来映射查询结果中的列,如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段,这就导致在调用到该字段的时候由于没有映射,取不到而报空指针异常。
当您遇到类似的情况,请针对该属性进行相关配置以解决以上问题。
注:基本类型(int、boolean 等)是不能设置成 null 的。
例:
mybatis-plus.configuration.call-setters-on-nulls=true
这样配置了之后,即使列为空,那么依然会调用列的Setter方法,这时候我们在Setter方法可以做对null的处理
GlobalConfig部分的配置都是以mybatis-plus.GlobalConfig开头的
banner
类型:boolean
默认值:true
是否控制台 print mybatis-plus 的 LOGO
下面就是 mybatis-plus 在控制台输出的logo,如果想不输出,将该属性设为false即可
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.3.2
例:
mybatis-plus.global-config.banner=false
enableSqlRunner
类型:boolean
默认值:false
是否初始化 SqlRunner(com.baomidou.mybatisplus.extension.toolkit.SqlRunner)
identifierGenerator(since 3.3.0)
类型:com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator
默认值:com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator
Id生成器(starter 下支持@bean注入)
bean注入即创建一个类,然后实现IdentifierGenerator,再注入这个bean即可
例:
//自定义IdentifierGenerator
public class CustomIdGenerator implements IdentifierGenerator {
@Override
public Number nextId(Object entity) {
return null;
}
@Override
public String nextUUID(Object entity) {
return null;
}
}
//注入bean
@Configuration
public class MpConfig {
/**
* 注入ID生成器
* @return
*/
@Bean
public CustomIdGenerator customIdGenerator(){
return new CustomIdGenerator();
}
}
metaObjectHandler
类型:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
默认值:null
元对象字段填充控制器(starter 下支持@bean注入)
dbConfig部分是MyBatis-Plus 全局策略中的 DB 策略配置,以mybatis-plus.global-config.db-config开头
idType
类型:com.baomidou.mybatisplus.annotation.IdType
默认值:ASSIGN_ID
全局默认主键类型
你可以在该配置下选择主键的生成方式
例:
mybatis-plus.global-config.db-config.id-type=auto
IdType枚举类源码:
@Getter
public enum IdType {
/**
* 数据库ID自增
*/
AUTO(0),
/**
* 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
*/
NONE(1),
/**
* 用户输入ID
* <p>该类型可以通过自己注册自动填充插件进行填充</p>
*/
INPUT(2),
/* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
/**
* 分配ID (主键类型为number或string),
* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
*
* @since 3.3.0
*/
ASSIGN_ID(3),
/**
* 分配UUID (主键类型为 string)
* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
*/
ASSIGN_UUID(4),
/**
* @deprecated 3.3.0 please use {@link #ASSIGN_ID}
*/
@Deprecated
ID_WORKER(3),
/**
* @deprecated 3.3.0 please use {@link #ASSIGN_ID}
*/
@Deprecated
ID_WORKER_STR(3),
/**
* @deprecated 3.3.0 please use {@link #ASSIGN_UUID}
*/
@Deprecated
UUID(4);
private final int key;
IdType(int key) {
this.key = key;
}
}
tablePrefix
类型:String
默认值:null
表名前缀
例:
mybatis-plus.global-config.db-config.table-prefix=my_
columnFormat
类型:String
默认值:null
字段 format,例: %s,(对主键无效)
tableUnderline
类型:boolean
默认值:true
表名是否使用驼峰转下划线命名,只对表名生效
capitalMode
类型:boolean
默认值:false
大写命名,对表名和字段名均生效
insertStrategy
类型:com.baomidou.mybatisplus.annotation.FieldStrategy
默认值:NOT_NULL
insert时的字段验证策略,在 insert 的时候的字段验证策略
使用MP插入数据时,它会进行字段验证,默认是不允许null值的,如果我们想允许,可以进行配置
例:
mybatis-plus.global-config.db-config.insert-strategy=ignored
MP的字段验证策略有以下几种:
public enum FieldStrategy {
/**
* 忽略判断
*/
IGNORED,
/**
* 非NULL判断
*/
NOT_NULL,
/**
* 非空判断(只对字符串类型字段,其他类型字段依然为非NULL判断)
*/
NOT_EMPTY,
/**
* 默认的,一般只用于注解里
* <p>1. 在全局里代表 NOT_NULL</p>
* <p>2. 在注解里代表 跟随全局</p>
*/
DEFAULT,
/**
* 不加入 SQL
*/
NEVER
}
updateStrategy
类型:com.baomidou.mybatisplus.annotation.FieldStrategy
默认值:NOT_NULL
update的字段验证策略,在 update 的时候的字段验证策略,验证策略也是使用FieldStrategy
selectStrategy
类型:com.baomidou.mybatisplus.annotation.FieldStrategy
默认值:NOT_NULL
select的字段验证策略 ,在 select 的时候的字段验证策略,既 wrapper 根据内部 entity 生成的 where 条件,验证策略也是使用FieldStrategy