MyBatis-Plus 学习条记-设置(四) DbConfig

打印 上一主题 下一主题

主题 908|帖子 908|积分 2724

MyBatis-Plus 全局计谋中的 DB 计谋设置
id-type(全局默认主键类)



  • AUTO:使用数据库自增 ID 作为主键。
  • NONE:无特定生成计谋,如果全局设置中有 IdType 相关的设置,则会跟随全局设置。
  • INPUT:在插入数据前,由用户自行设置主键值。
  • (3.3.0版本)ASSIGN_ID:自动分配 ID,适用于 Long、Integer、String 类型的主键。默认使用雪花算法通过 IdentifierGenerator 的 nextId 实现。
  • (3.3.0版本)ASSIGN_UUID:自动分配 UUID,适用于 String 类型的主键。默认实现为 IdentifierGenerator 的 nextUUID 方法。
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       id-type: ASSIGN_ID
复制代码
table-prefix(表名前缀)

  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       table-prefix: tbl_
复制代码
table-prefix是一个全局设置,它会自动在所有表名前添加指定的前缀,主要是用来保证表的命名规范。
比如有个实体类叫User,如果设置了 table-prefix: tbl_,那么 MyBatis-Plus 在生成 SQL 语句时将会使用表名 tbl_user 而不是 user
schema(数据库的 Schema 名称)

指定数据库的 Schema 名称,通常不用设置。
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       schema: my_schema
复制代码
1.如果需要在特定的实体类中指定 schema,可以在 @TableName 注解中指定 
  1. import com.baomidou.mybatisplus.annotation.TableName;
  2. @TableName(schema = "your_schema", value = "your_table")
  3. public class YourEntity {
  4.     // 实体类属性
  5. }
复制代码
2.如果你需要在运行时动态设置 schema,可以通过自定义 ISqlInjector 大概 MetaObjectHandler 来实现。
  1. import com.baomidou.mybatisplus.core.injector.ISqlInjector;
  2. import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
  3. import org.apache.ibatis.reflection.MetaObject;
  4. import org.apache.ibatis.reflection.SystemMetaObject;
  5. public class CustomSqlInjector extends LogicSqlInjector {
  6.     @Override
  7.     public void injectSql(MetaObject metaObject) {
  8.         super.injectSql(metaObject);
  9.         MetaObject meta = SystemMetaObject.forObject(metaObject.getOriginalObject());
  10.         String schema = "your_schema"; // 可以从配置文件或其他地方获取
  11.         meta.setValue("schema", schema);
  12.     }
  13. }
复制代码
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       sql-injector: com.yourpackage.CustomSqlInjector
复制代码
3.使用 XML 设置,可以在 XML 映射文件中指定 schema。
  1. <mapper namespace="com.yourpackage.YourMapper">
  2.     <select id="selectById" resultType="com.yourpackage.YourEntity">
  3.         SELECT * FROM ${schema}.your_table WHERE id = #{id}
  4.     </select>
  5. </mapper>
复制代码
需要注意: 


  • 确保数据库用户有权限访问指定的 schema。
  • 在多租户系统中,大概需要根据不同的租户动态切换 schema,这时可以结合 Spring 的 AbstractRoutingDataSource 来实现。
column-format(字段名进行格式化)

用于在生成 SQL 时对字段名进行格式化,例如添加前缀或后缀,对主键无效,例: %s。
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       column-format: "%s_field"
复制代码
他会在所有字段名背面拼接设置字符,如下图 


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

控制表名是否使用驼峰转下划线命名。
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       table-underline: false
复制代码
capital-mode(否使用大写命名)

控制表名和字段名是否使用大写命名。
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       capital-mode: true
复制代码
key-generator(自定义表主键生成器)

已弃用: 3.0开始废除此属性,要使用@Bean的方式注入至Spring容器
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       key-generator: com.example.CustomKeyGenerator
复制代码
  1. import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
  2. import com.baomidou.mybatisplus.extension.incrementer.H2KeyGenerator;
  3. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration
  7. public class MybatisPlusConfig {
  8.   
  9.     /**
  10.      *         注入主键生成器
  11.      */
  12.     @Bean
  13.     public IKeyGenerator keyGenerator(){
  14.         return new H2KeyGenerator();
  15.     }   
  16. }
复制代码


  • DB2KeyGenerator(用于 IBM DB2 数据库的主键生成计谋)
  • H2KeyGenerator(用于 H2 数据库的主键生成计谋。)
  • KingbaseKeyGenerator(用于 Kingbase 数据库的主键生成计谋。)
  • OracleKeyGenerator(用于 Oracle 数据库的主键生成计谋。)
  • PostgreKeyGenerator(用于 PostgreSQL 数据库的主键生成计谋。)
logic-delete-field(逻辑删除字段属性名)

全局的 实体逻辑删除字段属性名,仅在逻辑删除功能打开时有效。
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       logic-delete-field: deleted
复制代码
  1. @Data
  2. @TableName("sys_user")
  3. public class User {
  4.     @TableId(value = "id", type = IdType.AUTO)
  5.     private Long id;
  6.     @TableLogic
  7.     private Boolean deleted;
  8. )
复制代码
 
logic-delete-value(逻辑已删除值)

逻辑已删除值,仅在逻辑删除功能打开时有效。
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       logic-delete-value: true
复制代码
logic-not-delete-value(逻辑未删除值)

  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       logic-not-delete-value: false
复制代码
true和false可以替换,编程1,2也可以。
  1. import com.baomidou.mybatisplus.annotation.TableField;
  2. import com.baomidou.mybatisplus.annotation.TableId;
  3. import com.baomidou.mybatisplus.annotation.TableName;
  4. import com.baomidou.mybatisplus.annotation.TableLogic;
  5. @TableName("sys_user")
  6. public class User {
  7.     @TableId
  8.     private Long id;
  9.     private String username;
  10.     private String email;
  11.     @TableLogic
  12.     private Boolean deleted;
  13.     @TableLogic
  14.     //private int deleted;
  15.     // Getters and Setters
  16. }
复制代码
insert-strategy( Insert 时的字段验证计谋)



  • FieldStrategy.DEFAULT:遵照全局设置的计谋。如果全局设置未指定,默认活动是仅在字段值不为 NULL 时插入该字段。
  • FieldStrategy.ALWAYS:总是插入该字段,无论字段值是否为 NULL。
  • FieldStrategy.NOT_NULL:仅在字段值不为 NULL 时插入该字段。
  • FieldStrategy.NOT_EMPTY:仅在字段值不为空(对于字符串类型)或不为 NULL(对于其他类型)时插入该字段。
  • FieldStrategy.NEVER:从不插入该字段,即使字段值不为 NULL。
  • FieldStrategy.IGNORED: 忽略判断,效果等同于”ALWAYS” 
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       insert-strategy: NEVER
复制代码
        使用 实体字段使用@TableField(fill = FieldFill.)注解
  1. import com.baomidou.mybatisplus.annotation.FieldFill;
  2. import com.baomidou.mybatisplus.annotation.TableField;
  3. import com.baomidou.mybatisplus.annotation.TableId;
  4. import com.baomidou.mybatisplus.annotation.TableName;
  5. import java.util.Date;
  6. @TableName("sys_user")
  7. public class User {
  8.     @TableId
  9.     private Long id;
  10.     private String username;
  11.     private String email;
  12.     @TableField(fill = FieldFill.INSERT)
  13.     private Date createTime;
  14.     @TableField(fill = FieldFill.INSERT_UPDATE)
  15.     private Date updateTime;
  16.     // Getters and Setters
  17. }
复制代码
 
update-strategy( Update 时的字段验证计谋)

控制字段在 Update 时的字段验证计谋。
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       update-strategy: IGNORED
复制代码
类型和新增一样
  1. //
  2. // Source code recreated from a .class file by IntelliJ IDEA
  3. // (powered by FernFlower decompiler)
  4. //
  5. package com.baomidou.mybatisplus.annotation;
  6. public enum FieldStrategy {
  7.     /** @deprecated */
  8.     @Deprecated
  9.     IGNORED,
  10.     ALWAYS,
  11.     NOT_NULL,
  12.     NOT_EMPTY,
  13.     DEFAULT,
  14.     NEVER;
  15.     private FieldStrategy() {
  16.     }
  17. }
复制代码
 where-strategy(Update 时的字段验证计谋,Wrapper )

控制字段在 Update 时的字段验证计谋。既 Wrapper 根据内部 Entity 生成的 Where 条件。
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       where-strategy: ALWAYS
复制代码
  1. //
  2. // Source code recreated from a .class file by IntelliJ IDEA
  3. // (powered by FernFlower decompiler)
  4. //
  5. package com.baomidou.mybatisplus.annotation;
  6. public enum FieldStrategy {
  7.     /** @deprecated */
  8.     @Deprecated
  9.     IGNORED,
  10.     ALWAYS,
  11.     NOT_NULL,
  12.     NOT_EMPTY,
  13.     DEFAULT,
  14.     NEVER;
  15.     private FieldStrategy() {
  16.     }
  17. }
复制代码
table-format(表名进行格式化 版本要>= 3.5.3.2)

在生成 SQL 时对表名进行格式化,例: %s。这个是全局设置,主要是用来约定表名规范。
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       table-format: tbl_%s
复制代码
property-format(实体的字段映射到数据库字段时进行格式化 版本要>=  3.3.0)

用于在 Entity 的字段映射到数据库字段时进行格式化,只有在 column as property 这种情况下收效,对主键无效,例: %s。
  1. mybatis-plus:
  2.   global-config:
  3.     db-config:
  4.       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的所有设置,如有不对还请大佬指正。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莫张周刘王

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表