Mybatis-plus條件構造器

一、可重用性

Mybatis-plus作為Mybatis的擴展工具,提供了豐富的功能讓開發更加高效便捷。其中之一的條件構造器可以幫助我們構建各種查詢條件,而且支持鏈式調用,非常適合多條件查詢,可以讓代碼更加簡潔,易讀易懂。例如:

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "張三").eq(User::getSex, "男");
List<User> userList = userService.list(wrapper);

上述代碼中,我們使用了LambdaQueryWrapper構造器,通過調用eq方法添加查詢條件,最終得到用戶列表。該構造器還支持很多其他的查詢條件,例如like、in、between、isNull等等,且這些條件可以組合使用,非常靈活方便。

二、自動填充欄位

在實際開發中,我們經常需要記錄創建時間、更新時間、創建人、更新人等信息,Mybatis-plus也為我們提供了自動填充功能,可以在插入和更新操作時自動填充這些欄位。具體實現如下:

public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        LocalDateTime now = LocalDateTime.now();
        this.setFieldValByName("createTime", now, metaObject);
        this.setFieldValByName("updateTime", now, metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }
}

上述代碼中,我們實現了Mybatis-plus提供的MetaObjectHandler介面,重寫了insertFill和updateFill方法,在插入和更新操作時分別設置了createTime和updateTime欄位的值。這樣,我們在插入或更新實體時不用手動賦值,Mybatis-plus會自動填充。

三、分頁查詢

分頁查詢是Web應用的常見需求之一,Mybatis-plus也提供了分頁查詢的功能,非常方便。我們只需要在查詢條件中添加分頁信息,然後調用相關方法即可,如下所示:

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "張三").eq(User::getSex, "男");

Page<User> page = new Page<>(1, 10);
IPage<User> userPage = userService.page(page, wrapper);
List<User> userList = userPage.getRecords();

上述代碼中,我們使用了分頁查詢的方法page,第一個參數是當前頁數,第二個參數是每頁記錄數。我們還使用了IPage介面,通過getRecords方法獲取當前頁的記錄列表,非常方便。

四、動態SQL拼裝

Mybatis-plus的條件構造器不僅支持基本的查詢條件,還支持動態SQL拼裝,配合註解使用可以生成更加複雜的SQL語句。例如我們需要查詢名字是「張三」或者「李四」的用戶,可以使用如下代碼:

@Select({"<script>",
        "SELECT * FROM user WHERE 1=1",
        "<when test='name != null'>",
        "AND name in",
        "<foreach item='item' index='index' collection='name' open='(' separator=',' close=')'>",
        "#{item}",
        "</foreach>",
        "</when>",
        "</script>"})
List<User> findUserList(@Param("name") List<String> name);

上述代碼中,我們使用了@Select註解和${}佔位符語法,通過動態SQL拼裝實現了查詢名字是「張三」或「李四」的用戶。

五、代碼生成器

Mybatis-plus還提供了代碼生成器的功能,可以根據資料庫表結構自動生成實體、Mapper、Service等相關代碼,大大提高了開發效率。使用該功能非常簡單,只需要配置相關參數,運行代碼生成器即可。示例如下:

public class CodeGenerator {

    public static void main(String[] args) {
        // 數據源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL)
                .setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8")
                .setUsername("root")
                .setPassword("root");

        // 全局配置
        GlobalConfig config = new GlobalConfig();
        config.setActiveRecord(true)
                .setAuthor("coder-pig")
                .setOutputDir("D:\\src\\main\\java")
                .setFileOverride(true);

        // 策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true)
                .setNaming(NamingStrategy.underline_to_camel)
                .setInclude("user");

        // 包配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.coderpig")
                .setMapper("mapper")
                .setEntity("entity")
                .setService("service")
                .setServiceImpl("service.impl")
                .setController("controller");

        // 代碼生成器
        AutoGenerator generator = new AutoGenerator();
        generator.setDataSource(dataSourceConfig)
                .setGlobalConfig(config)
                .setStrategy(strategyConfig)
                .setPackageInfo(packageConfig);

        // 執行
        generator.execute();
    }
}

上述代碼中,我們配置了數據源信息、輸出目錄、生成策略、包配置等參數,並通過執行generator.execute()方法啟動代碼生成器。生成的代碼文件可以直接拷貝到項目中使用,非常方便快捷。

原創文章,作者:AJQYP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/372934.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
AJQYP的頭像AJQYP
上一篇 2025-04-25 15:26
下一篇 2025-04-25 15:26

相關推薦

  • 條件運算符(?:)是什麼意思?

    條件運算符(?:)是JavaScript中的一種特殊的運算符,也是許多編程語言中相似語法的一部分。它可以允許我們在一個簡單、一行的語句中完成條件判斷和賦值操作,非常方便。 1.語法…

    編程 2025-04-29
  • 理解Mybatis中的SQL Limit用法

    Mybatis是一種非常流行的ORM框架,提供了SQL映射配置文件,可以使用類似於傳統SQL語言的方式編寫SQL語句。其中,SQL的Limit語法是一個非常重要的知識點,能夠實現分…

    編程 2025-04-29
  • Django ORM如何實現或的條件查詢

    在我們使用Django進行資料庫操作的時候,查詢條件往往不止一個,一個好的查詢語句需要考慮我們的查詢要求以及業務場景。在實際工作中,我們經常需要使用或的條件進行查詢,本文將詳細介紹…

    編程 2025-04-29
  • 素數條件Python

    本文將對素數條件Python進行詳細闡述,介紹其概念、優缺點及應用場景。 一、概念 素數條件Python是一種基於Python語言的編程模式,其特點在於對於給定自然數$x$,判斷其…

    編程 2025-04-27
  • Python中不滿足條件重複執行的解決方法

    本文將以Python中不滿足條件重複執行為中心,從多個方面進行詳細闡述解決方法。 一、while循環 while循環是Python中常用的循環語句之一,它可以用於重複執行一段代碼,…

    編程 2025-04-27
  • Mybatis中update if詳解

    一、if標籤的基本用法 在Mybatis中使用update語句更新資料庫表中的一條或多條數據,我們通常通過if標籤來動態生成update語句。if標籤的使用方法如下: <up…

    編程 2025-04-25
  • C#條件編譯指令

    一、定義和作用 是C#中的條件編譯指令,用於根據條件的不同來編譯不同的代碼塊。在編譯程序時,編譯器會根據指定的條件來判斷該代碼塊是否需要被編譯。這個指令對於處理不同平台的代碼、處理…

    編程 2025-04-25
  • Mybatis批量插入操作

    一、基本概念 Mybatis是一種基於java的持久層框架,旨在幫助開發人員簡化資料庫操作。該框架提供了多種方式來執行資料庫操作,其中包括批量插入。批量插入是一種在單個事務中提交多…

    編程 2025-04-25
  • MyBatis如何防止SQL注入

    MyBatis是一款開源的持久層框架,它可以簡化Java應用程序中的數據持久化過程,並提供了許多有用的功能。然而,安全問題一直是Web應用程序的一大挑戰,其中最嚴重的問題之一是SQ…

    編程 2025-04-25
  • Vue條件渲染

    一、v-if和v-show區別 v-if和v-show都是Vue中的條件渲染指令,它們可以根據給定的表達式的真假條件來顯示或隱藏元素。但是,它們的實現方式有所不同。 v-if:根據…

    編程 2025-04-24

發表回復

登錄後才能評論