首页 > 其他分享 >MyBatis-Plus 学习笔记-配置(四) DbConfig

MyBatis-Plus 学习笔记-配置(四) DbConfig

时间:2024-11-20 18:18:27浏览次数:3  
标签:DbConfig com baomidou mybatis Plus plus MyBatis import config

MyBatis-Plus 全局策略中的 DB 策略配置

id-type(全局默认主键类)

  • AUTO:使用数据库自增 ID 作为主键。
  • NONE:无特定生成策略,如果全局配置中有 IdType 相关的配置,则会跟随全局配置。
  • INPUT:在插入数据前,由用户自行设置主键值。
  • 3.3.0版本)ASSIGN_ID:自动分配 ID,适用于 LongIntegerString 类型的主键。默认使用雪花算法通过 IdentifierGenerator 的 nextId 实现。
  • 3.3.0版本)ASSIGN_UUID:自动分配 UUID,适用于 String 类型的主键。默认实现为 IdentifierGenerator 的 nextUUID 方法。
mybatis-plus:
  global-config:
    db-config:
      id-type: ASSIGN_ID

table-prefix(表名前缀)

mybatis-plus:
  global-config:
    db-config:
      table-prefix: tbl_

table-prefix是一个全局配置,它会自动在所有表名前添加指定的前缀,主要是用来保证表的命名规范。

比如有个实体类叫User,如果配置了 table-prefix: tbl_,那么 MyBatis-Plus 在生成 SQL 语句时将会使用表名 tbl_user 而不是 user

schema(数据库的 Schema 名称)

指定数据库的 Schema 名称,通常不用设置。

mybatis-plus:
  global-config:
    db-config:
      schema: my_schema

1.如果需要在特定的实体类中指定 schema,可以在 @TableName 注解中指定 

import com.baomidou.mybatisplus.annotation.TableName;

@TableName(schema = "your_schema", value = "your_table")
public class YourEntity {
    // 实体类属性
}

2.如果你需要在运行时动态设置 schema,可以通过自定义 ISqlInjector 或者 MetaObjectHandler 来实现。

import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;

public class CustomSqlInjector extends LogicSqlInjector {

    @Override
    public void injectSql(MetaObject metaObject) {
        super.injectSql(metaObject);
        MetaObject meta = SystemMetaObject.forObject(metaObject.getOriginalObject());
        String schema = "your_schema"; // 可以从配置文件或其他地方获取
        meta.setValue("schema", schema);
    }
}
mybatis-plus:
  global-config:
    db-config:
      sql-injector: com.yourpackage.CustomSqlInjector

3.使用 XML 配置,可以在 XML 映射文件中指定 schema。

<mapper namespace="com.yourpackage.YourMapper">
    <select id="selectById" resultType="com.yourpackage.YourEntity">
        SELECT * FROM ${schema}.your_table WHERE id = #{id}
    </select>
</mapper>

需要注意: 

  • 确保数据库用户有权限访问指定的 schema。
  • 在多租户系统中,可能需要根据不同的租户动态切换 schema,这时可以结合 Spring 的 AbstractRoutingDataSource 来实现。

column-format(字段名进行格式化)

用于在生成 SQL 时对字段名进行格式化,例如添加前缀或后缀,对主键无效,例: %s

mybatis-plus:
  global-config:
    db-config:
      column-format: "%s_field"

他会在所有字段名后面拼接配置字符,如下图 

table-underline(表名是否使用驼峰转下划线命名)

控制表名是否使用驼峰转下划线命名。

mybatis-plus:
  global-config:
    db-config:
      table-underline: false

capital-mode(否使用大写命名)

控制表名和字段名是否使用大写命名。

mybatis-plus:
  global-config:
    db-config:
      capital-mode: true

key-generator(自定义表主键生成器)

已弃用: 3.0开始废除此属性,要使用@Bean的方式注入至Spring容器

mybatis-plus:
  global-config:
    db-config:
      key-generator: com.example.CustomKeyGenerator

import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
import com.baomidou.mybatisplus.extension.incrementer.H2KeyGenerator;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class MybatisPlusConfig {
  

    /**
     *	 注入主键生成器
     */
    @Bean
    public IKeyGenerator keyGenerator(){
        return new H2KeyGenerator();
    }    
}
  • DB2KeyGenerator(用于 IBM DB2 数据库的主键生成策略)
  • H2KeyGenerator(用于 H2 数据库的主键生成策略。)
  • KingbaseKeyGenerator(用于 Kingbase 数据库的主键生成策略。)
  • OracleKeyGenerator(用于 Oracle 数据库的主键生成策略。)
  • PostgreKeyGenerator(用于 PostgreSQL 数据库的主键生成策略。)

logic-delete-field(逻辑删除字段属性名)

全局的 实体逻辑删除字段属性名,仅在逻辑删除功能打开时有效。

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted

@Data
@TableName("sys_user")
public class User {
 
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
 
    @TableLogic
    private Boolean deleted;

)

 

logic-delete-value(逻辑已删除值)

逻辑已删除值,仅在逻辑删除功能打开时有效。

mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: true

logic-not-delete-value(逻辑未删除值)

mybatis-plus:
  global-config:
    db-config:
      logic-not-delete-value: false

true和false可以替换,编程1,2也可以。

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;

@TableName("sys_user")
public class User {

    @TableId
    private Long id;

    private String username;

    private String email;

    @TableLogic
    private Boolean deleted;
    @TableLogic
    //private int deleted;
    // Getters and Setters
}

insert-strategy( Insert 时的字段验证策略)

  • FieldStrategy.DEFAULT:遵循全局配置的策略。如果全局配置未指定,默认行为是仅在字段值不为 NULL 时插入该字段。
  • FieldStrategy.ALWAYS:总是插入该字段,无论字段值是否为 NULL。
  • FieldStrategy.NOT_NULL:仅在字段值不为 NULL 时插入该字段。
  • FieldStrategy.NOT_EMPTY:仅在字段值不为空(对于字符串类型)或不为 NULL(对于其他类型)时插入该字段。
  • FieldStrategy.NEVER:从不插入该字段,即使字段值不为 NULL。
  • FieldStrategy.IGNORED: 忽略判断,效果等同于”ALWAYS” 
mybatis-plus:
  global-config:
    db-config:
      insert-strategy: NEVER

        使用 实体字段使用@TableField(fill = FieldFill.)注解

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.util.Date;

@TableName("sys_user")
public class User {

    @TableId
    private Long id;

    private String username;

    private String email;

    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    // Getters and Setters
}

 

update-strategy( Update 时的字段验证策略)

控制字段在 Update 时的字段验证策略。

mybatis-plus:
  global-config:
    db-config:
      update-strategy: IGNORED

类型和新增一样

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.baomidou.mybatisplus.annotation;

public enum FieldStrategy {
    /** @deprecated */
    @Deprecated
    IGNORED,
    ALWAYS,
    NOT_NULL,
    NOT_EMPTY,
    DEFAULT,
    NEVER;

    private FieldStrategy() {
    }
}

 where-strategy(Update 时的字段验证策略,Wrapper )

控制字段在 Update 时的字段验证策略。既 Wrapper 根据内部 Entity 生成的 Where 条件。

mybatis-plus:
  global-config:
    db-config:
      where-strategy: ALWAYS
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.baomidou.mybatisplus.annotation;

public enum FieldStrategy {
    /** @deprecated */
    @Deprecated
    IGNORED,
    ALWAYS,
    NOT_NULL,
    NOT_EMPTY,
    DEFAULT,
    NEVER;

    private FieldStrategy() {
    }
}

table-format(表名进行格式化 版本要>= 3.5.3.2)

在生成 SQL 时对表名进行格式化,例: %s。这个是全局配置,主要是用来约定表名规范。

mybatis-plus:
  global-config:
    db-config:
      table-format: tbl_%s

property-format(实体的字段映射到数据库字段时进行格式化 版本要>=  3.3.0)

用于在 Entity 的字段映射到数据库字段时进行格式化,只有在 column as property 这种情况下生效,对主键无效,例: %s

mybatis-plus:
  global-config:
    db-config:
      property-format: %s_prop

 

MyBatis-Plus 学习笔记-配置(一)_mybatis-plus:check-config-location:-CSDN博客

MyBatis-Plus 学习笔记-配置(二) Configuration_mybatisplusconfig-CSDN博客

MyBatis-Plus 学习笔记-配置(三) GlobalConfig_mybatisplusconfig-CSDN博客

以上就是所有的MyBatis-Plus关于MyBatis-Plus的所有配置,如有不对还请大佬指正。

标签:DbConfig,com,baomidou,mybatis,Plus,plus,MyBatis,import,config
From: https://blog.csdn.net/cauyaycau/article/details/143846892

相关文章

  • 深度解析MyBatis增删查改(XML方式):快速掌握数据库操作
    全文目录:开篇语前言......
  • mybatis updateByPrimaryKey 和 updateByPrimaryKeySelective 的区别
    在MyBatis框架中,updateByPrimaryKey和updateByPrimaryKeySelective是两种常用的更新数据的方法,它们的主要区别在于如何处理非主键字段的NULL值。1.updateByPrimaryKey方法功能:根据主键更新记录的所有字段,不管字段值是否为NULL。行为:如果某个非主键字段被设置为NULL,......
  • MyBatis 学习笔记
    MyBatis执行器JDBC的执行过程分为四步:获取数据库连接(Connection)预编译SQL(PrepareStatement)设置参数执行SQL(ResultSet)MyBatis提供了执行器Executor将这一过程进行封装,对外提供SqlSession让用户通过调用其API直接操作数据库,因为SqlSession持有执行器Executor......
  • mybatis 批量添加xml写法 (自增id)
    Mybatis批量添加xml写法(自增id) 1、Mapper里面写法      @Param指明参数名称publicintinsertBatchKernelZhiRecord(@Param("recordList")List<KernelZhiRecord>recordList);2、Xml里面写法自增:useGeneratedKeys指明字段:ke......
  • Mybatis Plus保姆级教程 (一学就会!!!)
    目录一、概述二、框架结构2.1框架剖析2.2基本使用2.2.1创建Mapper接口2.2.2测试三、常用注解[email protected]@TableField3.2.1exist3.2.2select3.2.3fill3.3@TableId3.3.1value3.3.2typeNONEINPUT​​​​​​​AUTOASSIGN_ID和ASSIGN_UUI......
  • 01MybatisPlus(SpringCloud入门必学!!!!微服务!!项目实战!!深度理解MP用法!!!)
    微服务springCloud,今天第一课就是MybatisPlus!!!大家在日常开发中应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。        因此,目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的......
  • 免费Office Tool Plus使用教程
    1.下载OfficeToolPlushttps://otp.landian.vip/zh-cn/2.安装3.激活输入命令:ospp/insLicIDMondoVolume/sethst:kms.loli.beer/setprt:1688/act可以免费的使用office了......
  • MybatisPlus动态表名
    官网文档https://baomidou.com/plugins/dynamic-table-name/Java代码配置拦截器importcom.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;importcom.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;importorg.spring......
  • Mybatis 常见异常
    Mybatis列表查询只返回了部分数据,Sql语句多出limit异常//list查询接口List<Info>infoList=xxxMapper.selectList();列表查询接口,只返回了部分数据原因通过日志观察,发现日志打印的sql多了limit参数,怀疑时与分页有关;基于此,搜索资料发现,PageHelper插件是通过ThreadLoc......
  • Swagger 3.0 & MybatisPlus 主键BigDecimal 使用过程问题
    PS:本来用的是2.x的,但是因为换了后端框架,导致版本不适配,于是调整到3.0<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>&......