最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis-Plus枚舉和自定義主鍵ID的實現(xiàn)步驟

 更新時間:2022年02月18日 10:23:52   作者:一心同學(xué)  
這篇文章主要給大家介紹了關(guān)于MyBatis-Plus枚舉和自定義主鍵ID的相關(guān)資料,文中通過實例代碼以及圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

一、枚舉

當(dāng)我們在開發(fā)時,在往數(shù)據(jù)庫表的某個屬性字段插入數(shù)據(jù)時,希望把這個值限定在一定的范圍,例如性別,只有男和女,而年級只有小學(xué),初中,高中。通過這樣子的規(guī)范可以讓我們的代碼看起來更加簡潔,MyBatis-Plus中也提供了這樣的一個功能。

??步驟一:編寫配置文件

#枚舉類所在的包
mybatis-plus.type-enums-package=com.yixin.myenum
mybatis-plus.configuration.default-enum-type-handler=org.apache.ibatis.type.EnumOrdinalTypeHandler    

??步驟二:編寫枚舉類

Tip:我們將枚舉類放在com.yixin.myenum這個包下。

@EnumValue的作用就是將我們的描述(小學(xué),中心,高中,大學(xué))插入數(shù)據(jù)庫,如果沒有這個注解,那么插入的就是枚舉前面的編號(1,2,3,4)。 

package com.yixin.myenum;
 
import com.baomidou.mybatisplus.annotation.EnumValue;
 
public enum GradeEnum {
    PRIMARY(1, "小學(xué)"),
    SECONDORY(2, "中學(xué)"),
    HIGH(3, "高中"),
    UNIVERSITY(4, "大學(xué)");
 
    private int code;
 
   @EnumValue//描述作為枚舉值保存到數(shù)據(jù)庫
    private String desc;
 
    GradeEnum(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }
 
    public int getCode() {
        return code;
    }
 
    public void setCode(int code) {
        this.code = code;
    }
 
    public String getDesc() {
        return desc;
    }
 
    public void setDesc(String desc) {
        this.desc = desc;
    }
}

 ??步驟三:更改實體類

將我們的實體類的屬性類型更替為我們相對應(yīng)的枚舉

package com.yixin.pojo;
 
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.Version;
import com.yixin.myenum.GradeEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
 
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    //枚舉類型
    private GradeEnum grade;
 
}

這樣就可以了!

我們進行測試:

    @Test
    void test2() {
 
        Student student=new Student();
        student.setAge(18);
        student.setName("一心同學(xué)");
        student.setGrade(GradeEnum.UNIVERSITY);
 
        int result=studentMapper.insert(student);
        System.out.println(result);
 
    }

控制臺輸出:

數(shù)據(jù)庫:

可以發(fā)現(xiàn),已經(jīng)成功將我們的grade數(shù)據(jù)插進去了。

二、自定義ID生成器

??數(shù)據(jù)庫準備

DROP TABLE IF EXISTS `student`;
 
CREATE TABLE `student` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `name` varchar(20) DEFAULT NULL COMMENT '名字',
  `age` int DEFAULT NULL COMMENT '年齡',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

??步驟一:編寫主鍵策略

注意:我這里導(dǎo)入mybatis-plus-boot-starter版本3.4.0,因為如果是低版本的話是沒有IdentifierGenerator這個類的。

        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>

需要重寫方法nextId,這個方法返回的值就是我們的主鍵ID,前面的代碼主要是為了后臺輸出方便查看。

我們的策略是隨機生成100以內(nèi)的數(shù)字充當(dāng)主鍵(當(dāng)然,在開發(fā)中不會這樣,這里這是為了演示自定義主鍵的功能)

package com.yixin.config;
 
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;
 
import java.util.Random;
import java.util.concurrent.atomic.AtomicLong;
 
public class StudentIdGenerator implements IdentifierGenerator {
 
    Random random=new Random();
 
    @Override
    public Long nextId(Object entity) {
        //可以將當(dāng)前傳入的class全類名來作為bizKey或者提取參數(shù)來生成bizKey進行分布式Id調(diào)用生成
        String bizKey = entity.getClass().getName();
        System.out.println("bizKey:" + bizKey);
        MetaObject metaObject = SystemMetaObject.forObject(entity);
        String name = (String) metaObject.getValue("name");
 
      final long id=random.nextInt(100);
        System.out.println("為" + name + "生成主鍵值->:" + id);
        return id;
    }
}

??步驟二:注冊到容器中

package com.yixin.config;
 
 
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
 
// 掃描我們的 mapper 文件夾
@MapperScan("com.yixin.mapper")
@EnableTransactionManagement
@Configuration // 配置類
public class MyBatisPlusConfig {
 
    @Bean
    public IdentifierGenerator customIdGenerator(){
        return new StudentIdGenerator();
    }
}

??步驟三:修改實體類的主鍵策略

    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

??步驟四:測試

    @Test
    void test2() {
        
        Student student=new Student();
        student.setAge(20);
        student.setName("一心同學(xué)");
        student.setGrade(GradeEnum.UNIVERSITY);
 
        int result=studentMapper.insert(student);
        System.out.println(result);
    }

后臺輸出:

數(shù)據(jù)庫:

可以發(fā)現(xiàn),我們自定義的主鍵策略就生效了!

小結(jié)

到此這篇關(guān)于MyBatis-Plus枚舉和自定義主鍵ID的文章就介紹到這了,更多相關(guān)MyBatis-Plus枚舉和自定義主鍵ID內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot無法請求html等靜態(tài)資源文件webapp或者resources/static的問題及解決方案

    SpringBoot無法請求html等靜態(tài)資源文件webapp或者resources/static的問題及解決方案

    今天遇到一個問題無法訪問靜態(tài)資源文件,html,本文給大家分享SpringBoot無法請求html等靜態(tài)資源文件webapp或者resources/static的問題及解決方案,感興趣的朋友一起看看吧
    2024-05-05
  • Java System類兩個常用方法代碼實例

    Java System類兩個常用方法代碼實例

    這篇文章主要介紹了Java System類兩個常用方法代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • java實現(xiàn)遠程桌面的實例代碼

    java實現(xiàn)遠程桌面的實例代碼

    下面小編就為大家分享一篇java實現(xiàn)遠程桌面的實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Eclipse?IDE中如何設(shè)置JVM啟動參數(shù)

    Eclipse?IDE中如何設(shè)置JVM啟動參數(shù)

    這篇文章主要介紹了Eclipse?IDE中如何設(shè)置JVM啟動參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring Boot如何使用Undertow代替Tomcat

    Spring Boot如何使用Undertow代替Tomcat

    這篇文章主要介紹了Spring Boot如何使用Undertow代替Tomcat,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Java設(shè)計模式之備忘錄模式_動力節(jié)點Java學(xué)院

    Java設(shè)計模式之備忘錄模式_動力節(jié)點Java學(xué)院

    我們在編程的時候,經(jīng)常需要保存對象的中間狀態(tài),當(dāng)需要的時候,可以恢復(fù)到這個狀態(tài)。接下來通過本文給大家分享java設(shè)計模式之備忘錄模式,感興趣的的朋友一起看看吧
    2017-08-08
  • 使用Spring?Cache本地緩存示例代碼

    使用Spring?Cache本地緩存示例代碼

    緩存是提高應(yīng)用程序性能的重要手段,通過將頻繁訪問的數(shù)據(jù)存儲在內(nèi)存中,可以減少數(shù)據(jù)庫訪問次數(shù),從而加速數(shù)據(jù)讀取,這篇文章主要介紹了使用Spring?Cache本地緩存的相關(guān)資料,需要的朋友可以參考下
    2025-08-08
  • 鑒權(quán)認證+aop+注解+過濾feign請求的實例

    鑒權(quán)認證+aop+注解+過濾feign請求的實例

    這篇文章主要介紹了鑒權(quán)認證+aop+注解+過濾feign請求的實例講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • RocketMq同組消費者如何自動設(shè)置InstanceName

    RocketMq同組消費者如何自動設(shè)置InstanceName

    這篇文章主要介紹了RocketMq同組消費者如何自動設(shè)置InstanceName問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • java題解LeetCode20.有效的括號

    java題解LeetCode20.有效的括號

    這篇文章主要為大家介紹了java題解LeetCode20.有效的括號示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10

最新評論

宁波市| 武冈市| 饶河县| 克拉玛依市| 武汉市| 阿克| 唐山市| 镶黄旗| 竹山县| 泉州市| 宁陕县| 普兰县| 淳化县| 南充市| 汤阴县| 常山县| 临汾市| 都昌县| 蕲春县| 宿州市| 彰化县| 赫章县| 济源市| 浑源县| 河北省| 南投市| 三亚市| 北票市| 华坪县| 桑植县| 石狮市| 文山县| 上杭县| 屏东市| 潍坊市| 凤翔县| 阜新市| 西乡县| 曲沃县| 文登市| 台江县|