亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MybatisPlus主鍵生成策略是什么

發布時間:2022-08-11 11:35:33 來源:億速云 閱讀:481 作者:iii 欄目:開發技術

這篇文章主要講解了“MybatisPlus主鍵生成策略是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MybatisPlus主鍵生成策略是什么”吧!

    主鍵注解@TableId說明

    1、源碼

    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
    public @interface TableId {
        String value() default "";
    
        IdType type() default IdType.NONE;
    }

    MybatisPlus主鍵生成策略是什么

    2、作用

    標識主鍵字段
    使用@TableId可以標識實體對象中和數據庫表中主鍵對應的字段。如果不添加@TableId注解,會默認匹配id字段為主鍵。

    變量名稱和主鍵字段名稱的匹配
    如果表中的主鍵字段名稱和實體中的主鍵字段名稱不相同,這時候就要通過@TableId中的value屬性明確指出對應的數據庫主鍵字段的名稱。

    指定主鍵的生成方式
    可以通過@TableId注解中的type屬性指定主鍵的生成策略,具體支持哪些策略可以在IdType枚舉中查看。

    3、使用

    @TableName(value ="user")
    @Data
    public class User implements Serializable {
        /**
         * 主鍵ID
         */
        @TableId(value = "id",type = IdType.ASSIGN_ID)
        private Long userId;
        private String name;
        private Integer age;
        private String email;

    主鍵生成策略-IdType枚舉說明

    通過查看IdType枚舉類的源碼,可以發現Mybatis-Plus中默認支持5種主鍵生成方式。

    1、源碼

    public enum IdType {
        AUTO(0),
        NONE(1),
        INPUT(2),
        ASSIGN_ID(3),
        ASSIGN_UUID(4);
    
        private final int key;
    
        private IdType(int key) {
            this.key = key;
        }
    
        public int getKey() {
            return this.key;
        }
    }

    2、說明

    描述
    AUTO數據庫 ID自增,這種情況下將表中主鍵設置為自增,否則,沒有設置主動設置id值進行插入時會報錯
    NONE無狀態,該類型為未設置主鍵類型(注解里等于跟隨全局,全局里默認 ASSIGN_ID),注意這里官網文檔有誤
    INPUTinsert 前自行 set 主鍵值,在采用IKeyGenerator類型的ID生成器時必須為INPUT
    ASSIGN_ID分配 ID(主鍵類型為 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默認實現類為DefaultIdentifierGenerator雪花算法)
    ASSIGN_UUID分配 UUID,主鍵類型為 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默認 default 方法)

    3、全局設置

    IdType默認的全局設置為IdType.ASSIGN_ID,即由mybatis-plus主動分配主鍵,默認情況下由默認主鍵生成器實現類DefaultIdentifierGenerator采用雪花算法填充主鍵。

    public DbConfig() {
        this.idType = IdType.ASSIGN_ID;
        this.tableUnderline = true;
        this.capitalMode = false;
        this.logicDeleteValue = "1";
        this.logicNotDeleteValue = "0";
        this.insertStrategy = FieldStrategy.NOT_NULL;
        this.updateStrategy = FieldStrategy.NOT_NULL;
        this.whereStrategy = FieldStrategy.NOT_NULL;
    }

    在spring boot中,可以通過如下配置更改全局配置。

    mybatis-plus.global-config.db-config.id-type=assign_id

    ID生成器介紹

    Mybatis-Plus中的ID生成器主要分為2類,一類是IdentifierGenerator,另一類是IKeyGenerator

    MybatisPlus主鍵生成策略是什么

    1、IdentifierGenerator

    源碼如下:

    public interface IdentifierGenerator {
        //根據id是否為null判斷是否需要主動分配Id
        default boolean assignId(Object idValue) {
            return StringUtils.checkValNull(idValue);
        }
    
        //生成數值型Id
        Number nextId(Object entity);
    
        //生成字符型uuid
        default String nextUUID(Object entity) {
            return IdWorker.get32UUID();
        }
    }

    說明:
    IdentifierGenerator生成器中主要提供了3個方法。
    其使用場景是:不依賴數據庫生成ID,而是由mybatis-plus自己提供一套id生成算法。 對應的主鍵生成方式為IdType.ASSIGN_ID、ASSIGN_UUID

    • assignId 是否需要分配id

    • nextId 獲取下一個數值型Id

    • nextUUID 獲取下一個uuid

    典型的實現是默認的id生成器DefaultIdentifierGenerator,基于雪花算法生成id。`

    public class DefaultIdentifierGenerator implements IdentifierGenerator {
        private final Sequence sequence;
    
        public DefaultIdentifierGenerator() {
            this.sequence = new Sequence((InetAddress)null);
        }
    
        public DefaultIdentifierGenerator(InetAddress inetAddress) {
            this.sequence = new Sequence(inetAddress);
        }
    
        public DefaultIdentifierGenerator(long workerId, long dataCenterId) {
            this.sequence = new Sequence(workerId, dataCenterId);
        }
    
        public DefaultIdentifierGenerator(Sequence sequence) {
            this.sequence = sequence;
        }
    
        public Long nextId(Object entity) {
            return this.sequence.nextId();
        }
    }

    具體使用:

    1、聲明由mybatis-plus分配主鍵值

    @TableName(value ="user")
    @Data
    public class User implements Serializable {
        /**
         * 主鍵ID
         */
        @TableId(value = "id",type = IdType.ASSIGN_ID)
        private Long userId;
        private String name;
        private Integer age;
        private String email;

    2、指定idGenerator的實現類

    如果是默認的DefaultIdentifierGenerator,則不需要用戶重新指定。

    @Configuration
    public class IdAutoConfig {
        @Value("${mybatis-plus.zookeeper.serverLists}")
        private String zkServerLists;
    
        @Bean
        public IdentifierGenerator idGenerator() {
            return new ImadcnIdentifierGenerator(zkServerLists);
        }
    }

    2、IKeyGenerator

    源碼如下:

    public interface IKeyGenerator {
        //執行sql生成id
        String executeSql(String incrementerName);
    
        //獲取數據庫類型
        DbType dbType();
    }

    說明:
    IKeyGenerator 生成器主要是根據不同的數據庫類型,執行sql語句生成對應的主鍵。典型的數據庫如Oracle,Postgre,需要根據序列器生成表主鍵。

    相關實現類:

    MybatisPlus主鍵生成策略是什么

    OracleKeyGenerator中的實現:
    可以發現,是通過執行sql調用序列器生成的id。

    public class OracleKeyGenerator implements IKeyGenerator {
        public OracleKeyGenerator() {
        }
    
        public String executeSql(String incrementerName) {
            return "SELECT " + incrementerName + ".NEXTVAL FROM DUAL";
        }
    
        public DbType dbType() {
            return DbType.ORACLE;
        }
    }

    具體使用:
    1、在實體中通過@KeySequence指定序列器名稱,并通過@TableId指定主鍵生成策略為IdType.INPUT

    @KeySequence(value = "SEQ_ORACLE_STRING_KEY", clazz = String.class)
    public class YourEntity {
    
        @TableId(value = "ID_STR", type = IdType.INPUT)
        private String idStr;
    
    }

    2、spring boot配置列中配置keyGenerator具體實現類

    @Bean
    public IKeyGenerator keyGenerator() {
        return new OracleKeyGenerator();
    }

    也可以通過配置項指定:

    mybatis-plus.global-config.db-config.key-generators=com.baomidou.mybatisplus.extension.incrementer.OracleKeyGenerator

    自定義主鍵生成器

    自定義主鍵生成器也有2種方式。
    如果需要通過執行sql語句來生成id的,可以通過實現IKeyGenerator接口來自定義。 如果不想依賴數據庫,完全自定義一套主鍵生成策略,那么可以通過實現IdentifierGenerator接口來擴展。

    下面演示如何通過實現IdentifierGenerator接口,自定義主鍵生成器。

    1、自定義id生成器

    @Component
    public class CustomIdGenerator implements IdentifierGenerator {
        @Override
        public Long nextId(Object entity) {
          	//可以將當前傳入的class全類名來作為bizKey,或者提取參數來生成bizKey進行分布式Id調用生成.
          	String bizKey = entity.getClass().getName();
            //根據bizKey調用分布式ID生成
            long id = ....;
          	//返回生成的id值即可.
            return id;
        }
    }

    2、配置類中指定id生成器

    @Bean
    public IdentifierGenerator idGenerator() {
        return new CustomIdGenerator();
    }

    3、實體類中指定主鍵分配策略IdType.ASSIGN_ID

    @TableName(value ="user")
    @Data
    public class User implements Serializable {
        /**
         * 主鍵ID
         */
        @TableId(value = "id",type = IdType.ASSIGN_ID)
        private Long userId;
        private String name;
        private Integer age;
        private String email;

    感謝各位的閱讀,以上就是“MybatisPlus主鍵生成策略是什么”的內容了,經過本文的學習后,相信大家對MybatisPlus主鍵生成策略是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    南木林县| 鄂州市| 绥中县| 赫章县| 章丘市| 柳河县| 泽库县| 南安市| 海南省| 两当县| 扎鲁特旗| 炉霍县| 格尔木市| 惠安县| 定陶县| 西峡县| 靖西县| 万山特区| 独山县| 德令哈市| 博客| 隆德县| 玉树县| 三台县| 忻城县| 云浮市| 大洼县| 吉木乃县| 阳朔县| 大安市| 开化县| 彭水| 武平县| 油尖旺区| 常宁市| 融水| 浠水县| 兰州市| 周口市| 巫溪县| 托克托县|