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

MybatisPlus擴展功能

 更新時間:2026年01月14日 14:20:44   作者:什么都不會的Tristan  
本文介紹了代碼生成器的安裝和使用步驟,以及DB靜態(tài)工具的用途,代碼生成器可以自動生成PO、Mapper、Service等相關(guān)代碼,而DB靜態(tài)工具可以避免循環(huán)依賴,提高開發(fā)效率,感興趣的朋友跟隨小編一起看看吧

代碼生成器

作用:生成相對固定的PO、Mapper、Service等相關(guān)代碼

步驟

安裝插件

安裝好后重啟idea

在“工具”一欄里有相關(guān)的兩個選項

先點擊“Config Database”配置數(shù)據(jù)庫

測試連接成功后點擊ok

然后點擊“Code Generator”,彈窗如下

最上方是選擇要對那個表生成代碼,可以多選

module欄:如果是聚合工程并且當(dāng)前模塊為子模塊,需要填寫為該子模塊的名字(如果不符合則不用填寫這一欄)

package欄:填寫代碼生成的父級包路徑

例:

如圖

則填寫紅框框起來的部分,因為PO、MapperService都在該包下

author欄:作者

over file選項:勾選上表示生成代碼覆蓋原來的代碼

Entity:勾選上表示要生成實體類,欄里填寫要生成在哪一個包下

Mapper、Controller、Service、ServiceImpl類似Entity

TablePrefix欄:前綴,如果表名有前綴并且生成代碼的時候想要忽略這個前綴,則填寫

最下方一欄選項是注解,勾選上則生成對應(yīng)的注解

寫完后點擊右下角“code generator”即可生成代碼,親測有效~

DB靜態(tài)工具

作用:避免循環(huán)依賴

maven坐標(biāo):MyBatis-Plus 的 Starter 依賴已經(jīng)包含,不用單獨再導(dǎo)入

案例

需求:

1.改造根據(jù)id查詢用戶的接口,查詢用戶的同時,查詢出用戶對應(yīng)的所有地址

Controller

@GetMapping("{id}")
@ApiOperation("根據(jù)id查詢用戶")
public UserVO queryUserById(@ApiParam("用戶ID") @PathVariable Long id){
    return userService.queryUserAndAddressById(id);
}

Service實現(xiàn)類

@Override
public UserVO queryUserAndAddressById(Long id) {
    // 查詢用戶
    User user = getById(id);
    if (user == null|| user.getStatus() == 2){
        throw new RuntimeException("用戶狀態(tài)異常!");
    }
    // 查詢地址
    List<Address> addresses = Db.lambdaQuery(Address.class)
            .eq(Address::getUserId, id)
            .list();
    // 封裝VO
    // 轉(zhuǎn)User的PO為VO
    UserVO userVO = BeanUtil.copyProperties(user, UserVO.class);
    // 轉(zhuǎn)地址VO
    if (CollUtil.isNotEmpty(addresses)){
        userVO.setAddresses(BeanUtil.copyToList(addresses, AddressVO.class));
    }
    return null;
}

2.改造根據(jù)id批量查詢用戶的接口,查詢用戶的同時,查詢出用戶對應(yīng)的所有地址

Controller

@GetMapping
@ApiOperation("根據(jù)id批量查詢用戶")
public List<UserVO> queryUserById(@ApiParam("用戶ID集合") @RequestParam List<Long> ids){
    return userService.queryUserAndAddressByIds(ids);
}

Service實現(xiàn)類

@Override
public List<UserVO> queryUserAndAddressByIds(List<Long> ids) {
    // 查詢用戶
    List<User> users = listByIds(ids);
    if (CollUtil.isEmpty(users)) {
        return Collections.emptyList();
    }
    // 查詢地址
    // 獲取用戶id集合
    List<Long> userIds = users.stream().map(User::getId).collect(Collectors.toList());
    // 根據(jù)用戶id查詢地址
    List<Address> addresses = Db.lambdaQuery(Address.class).in(Address::getUserId, userIds).list();
    // 轉(zhuǎn)換地址VO
    List<AddressVO> addressVOS = BeanUtil.copyToList(addresses, AddressVO.class);
    // 用戶地址集合分組處理,相同用戶的放入一個集合(組)中
    Map<Long, List<AddressVO>> addressVOMap = new HashMap<>();
    if (CollUtil.isEmpty(addresses)) {
        addressVOMap = addressVOS.stream().collect(Collectors.groupingBy(AddressVO::getUserId));
    }
    // 轉(zhuǎn)VO返回
    List<UserVO> list = new ArrayList<>(users.size());
    for (User user : users) {
        // 轉(zhuǎn)User的PO為VO
        UserVO userVO = BeanUtil.copyProperties(user, UserVO.class);
        // 轉(zhuǎn)地址VO
        userVO.setAddresses(addressVOMap.get(user.getId()));
        list.add(userVO);
    }
    return list;
}

邏輯刪除

邏輯刪除就是基于代碼邏輯模擬刪除效果,但并不會真正刪除數(shù)據(jù)。思路如下:

  • 在表中添加一個字段標(biāo)記數(shù)據(jù)是否被刪除
  • 當(dāng)刪除數(shù)據(jù)時把標(biāo)記置為1
  • 查詢時只查詢標(biāo)記為0的數(shù)據(jù)

那這樣一來,查詢語句后面都需要加上deleted=0的條件,但是mp的方法沒有這個條件,怎么辦?

MybatisPlus提供了邏輯刪除功能,無需改變方法調(diào)用的方式,而是在底層幫我們自動修改CRUD的語句。我們要做的就是在application.yaml文件中配置邏輯刪除的字段名稱和值即可:

mybatis-plus:
  type-aliases-package: com.itheima.mp.pojo
  global-config:
      db-config:
          logic-delete-field: deleted # 配置邏輯刪除字段(自定義,與表中該字段對應(yīng))
          logic-delete-value: 1 # 邏輯已刪除值(默認為1)
          logic-not-delete-value: 0 # 邏輯未刪除值(默認為0)

配置了之后,刪除某條數(shù)據(jù)實際就是把某條數(shù)據(jù)的deleted字段設(shè)置為1,并不會真的從數(shù)據(jù)庫中刪除

枚舉處理器

當(dāng)實體類中某個變量的值的數(shù)量比較固定,并且每個值對應(yīng)某一種描述時,推薦使用枚舉

比如:1表示賬號正常,2表示賬號凍結(jié)

這時候就把實體類中的status字段定義為枚舉類型,但是數(shù)據(jù)庫怎么根據(jù)自定義的枚舉類型來判斷操作數(shù)是什么呢?這時就用到了mp的枚舉處理器

使用步驟:

  1. 加@EnumValue注解
  2. 配置yaml文件

案例

實體類

@Data
public class User {
    /**
     * 使用狀態(tài)(1正常 2凍結(jié))
     */
    private UserStatus status;
}

枚舉類

@Getter
public enum UserStatus {
    NORMAL(1, "正常"),
    FREEZE(2, "凍結(jié)");
    @EnumValue
    private final int value;
    private final String desc;
    UserStatus(int value, String desc) {
        this.value = value;
        this.desc = desc;
    }
}

@EnumValue是mp提供的注解,表示哪個值是數(shù)據(jù)庫增刪改查時實際需要操作的數(shù),比如上述就是value的值是數(shù)據(jù)庫增刪改查時實際需要操作的數(shù)

yaml文件配置

mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

搞定!

注意:

  1. PO對應(yīng)的DTO和VO如果存在相互拷貝的情況,都需要改成自定義的枚舉類型
  2. 默認返回給前端的值為枚舉項的名字,以案例為例,比如“NORMAL”,如果需要返回value,則在value上方加上注解 @JsonValue

JSON處理器

實體類中某個字段存儲的是json格式的數(shù)據(jù),并且想處理里面的某個數(shù)據(jù)時,需要單獨定義一個類,那么這個數(shù)據(jù)庫怎么存儲這個類呢?這時就用到了mp的JSON處理器

使用方式:

  1. 給該字段加上@TableField(typeHandler = JacksonTypeHandler.class)
  2. 給該實體類加上@TableName(autoResultMap = true)

案例

User類

@Data
@TableName(value = "user", autoResultMap = true)
public class User {
    /**
     * 詳細信息
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private UserInfo info;
}

UserInfo類

@Data
@AllArgsConstructor(staticName = "of") // UserInfo.of(...) 等同于 new UserInfo(...)
@NoArgsConstructor
public class UserInfo {
    private Integer age;
    private String intro;
    private String gender;
}

搞定!

到此這篇關(guān)于MybatisPlus擴展功能的文章就介紹到這了,更多相關(guān)MybatisPlus擴展內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 開源的Java圖片處理庫實例詳解

    開源的Java圖片處理庫實例詳解

    Java?圖片處理庫提供了豐富的功能,用于處理和增強圖像,在Java生態(tài)系統(tǒng)中,有幾個流行的開源庫可以用于圖片處理,這些庫提供了豐富的功能,如圖像縮放、裁剪、顏色調(diào)整、格式轉(zhuǎn)換等,本文介紹開源的Java圖片處理庫介紹,感興趣的朋友一起看看吧
    2024-03-03
  • java獲取日期之間天數(shù)的方法

    java獲取日期之間天數(shù)的方法

    這篇文章主要介紹了java獲取日期之間天數(shù)的方法,涉及java針對日期的轉(zhuǎn)換與數(shù)學(xué)運算相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Java SSM框架(Spring+SpringMVC+MyBatis)搭建過程

    Java SSM框架(Spring+SpringMVC+MyBatis)搭建過程

    最近一段時間搭建了ssm環(huán)境,并測試了幾個小項目,下面小編通過圖文并茂的形式給大家分享Java SSM框架(Spring+SpringMVC+MyBatis)搭建過程,需要的朋友參考下吧
    2017-11-11
  • 運行Springboot測試類查詢數(shù)據(jù)庫數(shù)據(jù)顯示白網(wǎng)頁問題及解決方法

    運行Springboot測試類查詢數(shù)據(jù)庫數(shù)據(jù)顯示白網(wǎng)頁問題及解決方法

    Spring Boot應(yīng)用未能啟動的原因是它沒有找到合適的數(shù)據(jù)庫配置具體來說,它需要一個數(shù)據(jù)源(DataSource),但未能在你的配置中找出,也沒有找到任何嵌入式數(shù)據(jù)庫(H2, HSQL 或 Derby),本文給大家分享運行Springboot測試類查詢數(shù)據(jù)庫數(shù)據(jù)顯示白網(wǎng)頁問題及解決方法,一起看看吧
    2023-11-11
  • SpringBoot整合rabbitMq自定義消息轉(zhuǎn)換方式

    SpringBoot整合rabbitMq自定義消息轉(zhuǎn)換方式

    這篇文章主要介紹了SpringBoot整合rabbitMq自定義消息轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java import static及import原理區(qū)別解析

    Java import static及import原理區(qū)別解析

    這篇文章主要介紹了Java import static及import原理區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • SpringBoot3整合MyBatis出現(xiàn)異常:Property?'sqlSessionFactory'or?'sqlSessionTemplate'?are?required

    SpringBoot3整合MyBatis出現(xiàn)異常:Property?'sqlSessionFactory&a

    這篇文章主要介紹了SpringBoot3整合MyBatis報錯:Property?‘sqlSessionFactory‘?or?‘sqlSessionTemplate‘?are?required,其實不是個大問題,只是自己編碼時遇到了,然后總結(jié)總結(jié)分享一下,如果有遇到類似問題的,可以參考一下
    2022-11-11
  • Java 細致圖解帶你分析漢諾塔

    Java 細致圖解帶你分析漢諾塔

    漢諾塔問題是一個經(jīng)典的問題。漢諾塔(Hanoi Tower),又稱河內(nèi)塔,源于印度一個古老傳說。本文將用Java求解這一問題,感興趣的可以學(xué)習(xí)一下
    2022-03-03
  • Sharding-Proxy分庫分表和數(shù)據(jù)加密使用場景分析

    Sharding-Proxy分庫分表和數(shù)據(jù)加密使用場景分析

    這篇文章主要介紹了Sharding-Proxy分庫分表和數(shù)據(jù)加密使用經(jīng)驗分享,通過場景模擬分析結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • Java中LinkedList和ArrayList的效率分析

    Java中LinkedList和ArrayList的效率分析

    本文主要介紹了Java中LinkedList和ArrayList的效率分析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論

泗水县| 通辽市| 文成县| 沙洋县| 仁布县| 关岭| 辽宁省| 江西省| 上栗县| 宿州市| 长治县| 正宁县| 临武县| 兰西县| 太保市| 浪卡子县| 尖扎县| 常德市| 苏尼特左旗| 卢龙县| 万宁市| 甘南县| 高陵县| 信宜市| 霍林郭勒市| 西盟| 余干县| 皋兰县| 江安县| 灌南县| 陆良县| 镇江市| 泸州市| 游戏| 许昌市| 佛坪县| 辽源市| 资兴市| 陇川县| 喀喇| 开封市|