阅读:64
📢📢📢📣📣📣
哈喽!大家好,我是【一心同学】,一位上进心十足的【Java领域博主】!😜😜😜
✨【一心同学】的写作风格:喜欢用【通俗易懂】的文笔去讲解每一个知识点,而不喜欢用【高大上】的官方陈述。
✨【一心同学】博客的领域是【面向后端技术】的学习,未来会持续更新更多的【后端技术】以及【学习心得】。
✨如果有对【后端技术】感兴趣的【小可爱】,欢迎关注【一心同学】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
目录
8.5 autoMappingUnknownColumnBehavior
在我们的【MyBatis-Plus】中有许多【配置】,也就是当我们需要用到的时候,会在配置文件中进行编写的属性,本篇博客将会讲解这些配置的【作用】,以及简单【使用】。
介绍:扫描MyBatis Mapper 所对应的 XML 文件位置,如果在 Mapper 中有自定义方法(XML 中有自定义实现),需要进行该配置,告诉 Mapper 所对应的 XML 文件位置,Maven 多模块项目的扫描路径需以 classpath*: 开头 (即加载多个 jar 包下的 XML 文件)。
mybatis-plus.mapper-locations=classpath*:**/mapper/xml/*.xml
介绍:MyBaits 别名包扫描路径,通过该属性可以给包中的类注册别名,注册后在 Mapper 对应的 XML 文件中可以直接使用类名,而不用使用全限定的类名(即 XML 中调用的时候不用包含包名)。
mybatis-plus.type-aliases-package=com.caochenlei.mpdemo.pojo
介绍:TypeHandler 扫描路径,如果配置了该属性,SqlSessionFactoryBean 会把该包下面的类注册为对应的 TypeHandler,TypeHandler 通常用于自定义类型转换。
mybatis-plus.type-handlers-package=com.caochenlei.mpdemo.type
介绍:枚举类 扫描路径,如果配置了该属性,会将路径下的枚举类进行注入,让实体类字段能够简单快捷的使用枚举属性。
mybatis-plus.type-enums-package=com.caochenlei.mpdemo.myenum
介绍:启动时是否检查 MyBatis XML 文件的存在,默认不检查。
mybatis-plus.check-config-location=false
介绍:通过该属性可指定 MyBatis 的执行器,MyBatis 的执行器总共有三种:
- ExecutorType.SIMPLE:该执行器类型不做特殊的事情,为每个语句的执行创建一个新的预处理语句(PreparedStatement)
- ExecutorType.REUSE:该执行器类型会复用预处理语句(PreparedStatement)
- ExecutorType.BATCH:该执行器类型会批量执行所有的更新语句
mybatis-plus.executor-type=simple
介绍:指定外部化 MyBatis Properties 配置,通过该配置可以抽离配置,实现不同环境的配置部署。
介绍:原生 MyBatis 所支持的配置,本部分(Configuration)的配置大都为 MyBatis 原生支持的配置,这意味着您可以通过 MyBatis XML 配置文件的形式进行配置。
介绍:是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射。
此属性在 MyBatis 中原默认值为 false,在 MyBatis-Plus 中,此属性也将用于生成最终的 SQL 的 select body,如果您的数据库命名符合规则无需使用 @TableField 注解指定数据库字段名。
mybatis-plus.configuration.map-underscore-to-camel-case=true
介绍:默认枚举处理类,如果配置了该属性,枚举将统一使用指定处理器进行处理。
注意事项
其取值可以有以下几种,可以使用内置,也可以自定义:
- org.apache.ibatis.type.EnumTypeHandler : 存储枚举的名称
- org.apache.ibatis.type.EnumOrdinalTypeHandler : 存储枚举的索引
- com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler : 枚举类需要实现IEnum接口或字段标记@EnumValue注解.(3.1.2以下版本为EnumTypeHandler)
mybatis-plus.configuration.default-enum-type-handler=org.apache.ibatis.type.EnumTypeHandler
介绍:当设置为 true 的时候,懒加载的对象可能被任何懒属性全部加载,否则,每个属性都按需加载。需要和 lazyLoadingEnabled 一起使用。
mybatis-plus.configuration.aggressive-lazy-loading=true
mybatis-plus.configuration.lazy-loading-enabled=true
介绍:MyBatis 自动映射策略,通过该配置可指定 MyBatis 是否并且如何来自动映射数据表字段与对象的属性,总共有 3 种可选值:
- AutoMappingBehavior.NONE:不启用自动映射
- AutoMappingBehavior.PARTIAL:只对非嵌套的 resultMap 进行自动映射
- AutoMappingBehavior.FULL:对所有的 resultMap 都进行自动映射
mybatis-plus.configuration.auto-mapping-behavior=partial
介绍:MyBatis 自动映射时未知列或未知属性处理策略,通过该配置可指定 MyBatis 在自动映射过程中遇到未知列或者未知属性时如何处理,总共有 3 种可选值:
- AutoMappingUnknownColumnBehavior.NONE:不做任何处理 (默认值)
- AutoMappingUnknownColumnBehavior.WARNING:以日志的形式打印相关警告信息
- AutoMappingUnknownColumnBehavior.FAILING:当作映射失败处理,并抛出异常和详细信息
mybatis-plus.configuration.auto-mapping-unknown-column-behavior=none
介绍:Mybatis一级缓存,默认为 SESSION。
- SESSION:session级别缓存,同一个session相同查询语句不会再次查询数据库
- STATEMENT:关闭一级缓存
注意事项
单服务架构中(有且仅有只有一个程序提供相同服务),一级缓存开启不会影响业务,只会提高性能。 微服务架构中需要关闭一级缓存,原因:Service1先查询数据,若之后Service2修改了数据,之后Service1又再次以同样的查询条件查询数据,因走缓存会出现查处的数据不是最新数据。
mybatis-plus.configuration.local-cache-scope=session
介绍:开启Mybatis二级缓存,默认为 true。
mybatis-plus.configuration.cache-enabled=true
介绍:指定当结果集中值为 null 的时候是否调用映射对象的 Setter(Map 对象时为 put)方法,通常运用于有 Map.keySet() 依赖或 null 值初始化的情况。
理解
通俗的讲,即 MyBatis 在使用 resultMap 来映射查询结果中的列,如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段,这就导致在调用到该字段的时候由于没有映射,取不到而报空指针异常。
当您遇到类似的情况,请针对该属性进行相关配置以解决以上问题。
注意:基本类型(int、boolean 等)是不能设置成 null 的。
mybatis-plus.configuration.call-setters-on-nulls=false
介绍:指定一个提供 Configuration 实例的工厂类。该工厂生产的实例将用来加载已经被反序列化对象的懒加载属性值,其必须包含一个签名方法
static Configuration getConfiguration()
。(从 3.2.3 版本开始)
mybatis-plus.configuration.configuration-factory=
由于其属性很多,我们这里只列出MyBatis的settings的标签属性,其余可以自己进行查看。
我们这里以日志打印为例,一般使用驼峰命名对应 “ - ”
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
设置 | 描述 | 取值 | 默认值 |
cacheEnabled | 该配置是影响所有映射器中配置缓存的全局开关。 | true | false | true |
lazyLoadingEnabled | 该配置是延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。在特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 | true | false | false |
aggressiveLazyLoading | 当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载,反之,每种属性将会按需加载。 | true | false | false (true in ≤3.4.1) |
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 | 指定自动映射当中未知列(或未知属性类型)时的行为。 默认是不处理,只有当日志级别达到 WARN 级别或者以下,才会显示相关日志,如果处理失败会抛出 SqlSessionException异常。 | NONE WARNING FAILING | NONE |
defaultExecutorType | 配置默认的执行器。 SIMPLE:是普通的执行器。 REUSE:会重用预处理语句。 BATCH:执行器将重用语句并执行批量更新。 | SIMPLE REUSE BATCH | SIMPLE |
defaultStatementTimeout | 设置超时时间,它决定驱动等待数据库响应的秒数。 | 任意正整数值 | Not Set (null) |
defaultFetchSize | 设置数据库驱动程序默认返回的条数限制,此参数可以重新设置。 | 任意正整数值 | Not Set (null) |
defaultResultSetType | 指定按语句设置忽略它的滚动策略。(Since: 3.5.2) | FORWARD_ONLY SCROLL_SENSITIVE SCROLL_INSENSITIVE DEFAULT (same behavior with ‘Not Set’) | Not Set (null) |
safeRowBoundsEnabled | 允许在嵌套语句中使用分页(RowBounds)。 如果允许,设置 false。 | true | false | false |
safeResultHandlerEnabled | 允许在嵌套语句中使用分页(ResultHandler)。 如果允许,设置false | true | false | true |
mapUnderscoreToCamelCaseEnables | 是否开启自动驼峰命名规则映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 | true | false | false |
localCacheScope | MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速关联复嵌套査询。 SESSION:这种情况下会缓存一个会话中执行的所有查询。 STATEMENT:代表本地会话仅用在语句执行上,对相同 SqlScssion 的不同调用将不会共享数据。 | SESSION | STATEMENT | SESSION |
jdbcTypeForNull | 当没有为参数提供特定的 JDBC 类型时,为空值时指定 JDBC 类型。某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。 | JdbcType 枚举值 | OTHER |
lazyLoadTriggerMethods | 指定哪个对象的方法触发一次延迟加载。 | 一个逗号分隔的方法名称列表 | equals,clone, hashCode,toString |
defaultScriptingLanguage | 指定动态 SQL 生成的默认语言。 | 类型别名或指定类的全名称 | org.apache. ibatis.scripting. xmltags.XMLLang |
defaultEnumTypeHandler | 指定默认情况下用于枚举的TypeHandler。(Since: 3.4.5) | 类型别名或指定类的全名称 | org.apache. ibatis.type. EnumTypeHandler |
callSettersOnNulls | 指定当结果集中值为 null 时,是否调用映射对象的 setter(map 对象时为 put)方法,这对于 Map.keySet() 依赖或 null 值初始化时是有用的。注意,基本类型(int、boolean 等)不能设置成 null。 | true | false | false |
returnInstanceForEmptyRowMyBatis | 默认情况下,MyBatis在返回行的所有列都为null时返回null。启用此设置后,MyBatis将返回空实例。注意,它也适用于嵌套结果(即collectioin和association)。(Since: 3.4.2) | true | false | false |
logPrefix | 指定 MyBatis 增加到日志名称的前缀。 | 任何字符串 | 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) |
vfsImpl | 指定 VFS 的实现类。 | 自定义VFS实现的类的全名称,用逗号分隔。 | Not set |
useActualParamName | 允许使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的项目必须采用 Java 8 编译,并且加上 -parameters 选项。(Since: 3.4.1) | true | false | true |
configurationFactory | 指定提供配置实例的类。返回的配置实例用于加载反序列化对象的惰性属性。此类必须具有签名静态配置getConfiguration() 的方法。(Since: 3.2.3) | 类型别名或指定类的全名称 | Not set |
shrinkWhitespacesInSql | 从SQL中删除多余的空白字符。注意,这也会影响SQL中的文字字符串。(Since 3.5.5) | true | false | false |
介绍:MyBatis-Plus 全局策略配置。
介绍:是否控制台 print mybatis-plus 的 LOGO。
mybatis-plus.global-config.banner=true
介绍:是否初始化 SqlRunner(com.baomidou.mybatisplus.extension.toolkit.SqlRunner)
mybatis-plus.global-config.enable-sql-runner=false
介绍:通用Mapper父类(影响sqlInjector,只有这个的子类的 mapper 才会注入 sqlInjector 内的 method)
mybatis-plus.global-config.super-mapper-class=com.baomidou.mybatisplus.core.mapper.Mapper
介绍:MyBatis-Plus 全局策略中的 DB 策略配置。
介绍:全局默认主键类型。
mybatis-plus.global-config.db-config.id-type=assign_id
介绍:表名前缀。
mybatis-plus.global-config.db-config.table-prefix=tbl_
mybatis-plus.global-config.db-config.schema=
介绍:字段 format,例:
%s
,(对主键无效)
mybatis-plus.global-config.db-config.column-format=
介绍:entity 的字段(property)的 format,只有在 column as property 这种情况下生效例:
%s
,(对主键无效)。
mybatis-plus.global-config.db-config.property-format=
介绍:表名是否使用驼峰转下划线命名,只对表名生效。
mybatis-plus.global-config.db-config.table-underline=true
介绍:大写命名,对表名和字段名均生效。
mybatis-plus.global-config.db-config.capital-mode=false
介绍:全局的entity的逻辑删除字段属性名,(逻辑删除下有效)。
mybatis-plus.global-config.db-config.logic-delete-field=
介绍:逻辑已删除值,(逻辑删除下有效)。
mybatis-plus.global-config.db-config.logic-delete-value=1
介绍:逻辑未删除值,(逻辑删除下有效)。
mybatis-plus.global-config.db-config.logic-not-delete-value=0
介绍:字段验证策略之 insert,在 insert 的时候的字段验证策略。
mybatis-plus.global-config.db-config.insert-strategy=not_null
介绍:字段验证策略之 update,在 update 的时候的字段验证策略。
mybatis-plus.global-config.db-config.update-strategy=not_null
介绍:字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件。
mybatis-plus.global-config.db-config.select-strategy=not_null
#mybatis-plus
mybatis-plus.mapper-locations=classpath*:**/mapper/xml/*.xml
mybatis-plus.type-aliases-package=com.caochenlei.mpdemo.pojo
mybatis-plus.type-handlers-package=com.caochenlei.mpdemo.type
mybatis-plus.type-enums-package=com.caochenlei.mpdemo.enum
mybatis-plus.check-config-location=false
mybatis-plus.executor-type=simple
#mybatis-plus.configuration
mybatis-plus.configuration.map-underscore-to-camel-case=true
mybatis-plus.configuration.default-enum-type-handler=org.apache.ibatis.type.EnumTypeHandler
mybatis-plus.configuration.aggressive-lazy-loading=true
mybatis-plus.configuration.lazy-loading-enabled=true
mybatis-plus.configuration.auto-mapping-behavior=partial
mybatis-plus.configuration.auto-mapping-unknown-column-behavior=none
mybatis-plus.configuration.local-cache-scope=session
mybatis-plus.configuration.cache-enabled=true
mybatis-plus.configuration.call-setters-on-nulls=false
mybatis-plus.configuration.configuration-factory=
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#mybatis-plus.global-config
mybatis-plus.global-config.banner=true
mybatis-plus.global-config.enable-sql-runner=false
mybatis-plus.global-config.super-mapper-class=com.baomidou.mybatisplus.core.mapper.Mapper
#mybatis-plus.global-config.db-config
mybatis-plus.global-config.db-config.id-type=assign_id
mybatis-plus.global-config.db-config.table-prefix=tbl_
mybatis-plus.global-config.db-config.schema=
mybatis-plus.global-config.db-config.column-format=
mybatis-plus.global-config.db-config.property-format=
mybatis-plus.global-config.db-config.table-underline=true
mybatis-plus.global-config.db-config.capital-mode=false
mybatis-plus.global-config.db-config.logic-delete-field=
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
mybatis-plus.global-config.db-config.insert-strategy=not_null
mybatis-plus.global-config.db-config.update-strategy=not_null
mybatis-plus.global-config.db-config.select-strategy=not_null
以上的【MyBatis-Plus配置详解】是一心同学是在网上阅读了不少【文章】,同时也有参考了几位【牛人】的讲解,最后【整理】出来的,大家也看到,这配置是非常的多,我们只需要大概知道其配置有什么功能,然后在开发过程中直接【应用】即可。
如果这篇【文章】有帮助到你,希望可以给【一心同学】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点,如果有对【后端技术】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【一心同学】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!