MyBatis-Plus进阶之常用配置,看完别说不懂MyBatis-Plus配置

前言

下面介绍下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配置

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配置

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配置

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

  • 15
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
使用 Mybatis-Plus 进行关联查询需要添加一个名为 mybatis-plus-extension 的依赖,具体的步骤如下: 1. 在 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>${mybatis-plus.version}</version> </dependency> ``` 其中,mybatis-plus-boot-starter 是 Mybatis-Plus 的核心依赖,mybatis-plus-extension 是 Mybatis-Plus 的扩展依赖。 2. 在 application.yml 或 application.properties 文件中添加以下配置: ``` mybatis-plus: mapper-locations: classpath*:mapper/**/*.xml # mapper.xml文件所在路径 global-config: db-config: logic-delete-value: 1 # 逻辑删除值 logic-not-delete-value: 0 # 逻辑未删除值 configuration: map-underscore-to-camel-case: true # 开启驼峰命名转换 ``` 3. 在 mapper.xml 文件中进行关联查询的配置,例如: ``` <select id="getUserOrders" resultMap="UserResultMap"> SELECT u.id, u.name, o.order_no, o.total_price FROM user u LEFT JOIN order o ON u.id = o.user_id WHERE u.id = #{id} </select> <resultMap id="UserResultMap" type="User"> <id column="id" property="id" /> <result column="name" property="name" /> <collection property="orders" ofType="Order"> <result column="order_no" property="orderNo" /> <result column="total_price" property="totalPrice" /> </collection> </resultMap> ``` 其中,getUserOrders 是方法名,UserResultMap 是结果集映射的名称,User 是结果集映射的类型。关联查询的 SQL 语句中使用了 LEFT JOIN 进行关联,查询结果使用 resultMap 进行映射。 以上就是使用 Mybatis-Plus 进行关联查询的配置步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值