lambdaQuery: 最簡單易用的ORM框架

ORM(object relational mapping)框架的作用是將程序中的對象與數據庫中的關係型數據表之間建立映射關係,大大簡化了開發難度。lambdaQuery作為一款優秀的ORM框架,其最大的特點就是簡單易用,支持鏈式調用,讓編程更加優雅。下面我們將從幾個方面來闡述lambdaQuery的特點和優勢。

一、lambdaQuery()

lambdaQuery()是lambdaQuery框架的入口方法,用於開啟一個查詢。lambdaQuery()方法返回一個Query對象,通過鏈式調用可以簡單方便地構造查詢條件。


List<User> list = lambdaQuery(User.class)
    .eq(User::getUserName, "admin")
    .ne(User::getStatus, 0)
    .like(User::getRealName, "張三")
    .list();

上述代碼演示了利用lambdaQuery()方法進行查詢的基本用法,首先指定查詢的實體類User,然後通過鏈式調用指定查詢條件,最後通過list()方法獲取查詢結果。

二、lambdaQuery if else

lambdaQuery支持類似Java流程控制語句的if-else條件判斷,可以根據不同的條件指定不同的查詢條件。


QueryWrapper<User> wrapper = lambdaQueryWrapper(User.class)
    .eq(User::getUserName, "admin")
    .eq(User::getStatus, 1)
    .ifPresent(username, p -> p.like(User::getRealName, "%張三%"))
    .ifPresent(status, p -> p.lt(User::getCreateTime, LocalDateTime.now()))
    .ifPresent(StringUtils::isNotBlank, password, p -> p.like(User::getPassword, password));
List<User> list = wrapper.list();

在以上代碼中,利用QueryWrapper對象的ifPresent()方法實現了if-else條件判斷,當username不為空時,添加like(User::getRealName, “%張三%”)條件;當status不為空時,添加lt(User::getCreateTime, LocalDateTime.now())條件;當password不為空時,添加like(User::getPassword, password)條件。

三、lambdaQueryWrapper多表查詢

除了基本的單表查詢之外,lambdaQuery還支持多表查詢,可以根據不同的關聯關係構造查詢條件。


List<UserOrderVO> list = lambdaQueryWrapper(UserOrderVO.class)
    .leftJoin(User.class, UserOrderVO::getUserId, User::getId)
    .eq(User::getUserName, "admin")
    .select(User::getId, UserOrderVO::getTotalPrice)
    .groupBy(User::getId)
    .list();

以上代碼演示了利用lambdaQueryWrapper對象進行多表聯合查詢的基本用法,通過leftJoin()方法指定左連接的表和關聯關係,然後通過鏈式調用指定查詢條件和查詢字段,最後通過groupBy()指定分組條件。

四、lambdaQuery if else條件

與單表查詢類似,lambdaQueryWrapper對象也支持if-else條件判斷,根據不同的條件指定不同的查詢條件。


QueryWrapper<UserOrderVO> wrapper = lambdaQueryWrapper(UserOrderVO.class)
    .eq(UserOrderVO::getStatus, 0)
    .eq(UserOrderVO::getOrderType, 1)
    .ifPresent(StringUtils::isNotBlank, userName, w -> w.like(User::getUserName, userName))
    .ifPresent(StringUtils::isNotBlank, realName, w -> w.like(User::getRealName, realName));
List<UserOrderVO> list = wrapper.list();

在以上代碼中,利用QueryWrapper對象的ifPresent()方法實現了if-else條件判斷,當userName不為空時,添加like(User::getUserName, userName)條件;當realName不為空時,添加like(User::getRealName, realName)條件。

五、lambdaQueryWrapper查詢指定字段

在實際開發中,有時候我們並不需要查詢表中所有的字段,這時候可以利用lambdaQueryWrapper的select()方法指定查詢的字段。


List<UserVO> list = lambdaQueryWrapper(User.class)
    .eq(User::getUserName, "admin")
    .select(User::getRealName, User::getPhone)
    .listAs(UserVO.class);

在以上代碼中,通過select()方法指定查詢的字段,只查詢了User表中的realName和phone字段,最後通過listAs()方法指定返回類型為UserVO,即只返回實體類中指定的字段。

六、lambdaQueryWrapper方法

除了上述方法外,lambdaQueryWrapper還提供了一些常用的方法,如orderBy()、likeLeft()、likeRight()等。


List<User> list = lambdaQueryWrapper(User.class)
    .ne(User::getStatus, 0)
    .orderByDesc(User::getCreateTime)
    .likeLeft(User::getRealName, "張")
    .list();

在以上代碼中,通過orderByDesc()方法指定查詢結果按createTime降序排列,通過likeLeft()方法指定查詢realName以「張」開頭的記錄。

七、lambdaQuery trim

在SQL語句中,有時候會出現多餘的空格和換行符,這樣會導致SQL語句的可讀性下降,影響代碼的維護性。lambdaQuery提供了trim()方法,可去掉SQL語句中的前綴、後綴和多餘的空格和換行符。


String sql = lambdaQueryWrapper(User.class)
    .select(User::getId, User::getUserName)
    .eq(User::getStatus, 1)
    .eq(User::getGender, 1)
    .orderByAsc(User::getCreateTime)
    .trim()
    .getSql();

在以上代碼中,利用lambdaQueryWrapper對象的getSql()方法獲取查詢的SQL語句,然後通過trim()方法去除SQL語句中的多餘空格和換行符。

八、lambdaQueryWrapper查詢空字符

在查詢時,可能需要查詢某個字段為空的記錄,lambdaQueryWrapper提供了isNull()和isNotNull()方法,用於查詢空值和非空值。


List<User> list = lambdaQueryWrapper(User.class)
    .isNull(User::getRealName)
    .list();

在以上代碼中,通過isNull()方法查詢realName字段為空的記錄。

總結

本文從lambdaQuery()、lambdaquery if else、lambdaquerywrapper多表查詢、lambdaquery if else條件、lambdaquerywrapper查詢指定字段、lambdaquerywrapper方法、lambdaquery trim、lambdaQueryWrapper查詢空字符等多個方面詳細闡述了lambdaQuery框架的特點和優勢,其簡單易用、支持鏈式調用等特點讓開發更加高效、優雅。感興趣的讀者可以去GitHub上查看其源碼,學習更多高級用法。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/295679.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-27 12:56
下一篇 2024-12-27 12:57

相關推薦

  • Ojlat:一款快速開發Web應用程序的框架

    Ojlat是一款用於快速開發Web應用程序的框架。它的主要特點是高效、易用、可擴展且功能齊全。通過Ojlat,開發人員可以輕鬆地構建出高質量的Web應用程序。本文將從多個方面對Oj…

    編程 2025-04-29
  • Zlios——一個多功能的開發框架

    你是否在開發過程中常常遇到同樣的問題,需要不斷去尋找解決方案?你是否想要一個多功能、易於使用的開發框架來解決這些問題?那麼,Zlios就是你需要的框架。 一、簡介 Zlios是一個…

    編程 2025-04-29
  • agavi開發框架

    Agavi是一個基於MVC模式的Web應用程序開發框架,以REST和面向資源的設計為核心思想。本文章將從Agavi的概念、優點、使用方法和實例等方面進行詳細介紹。 一、概念 Aga…

    編程 2025-04-29
  • Python unittest框架用法介紹

    Python unittest框架是Python自帶的一種測試框架,可以用來編寫並運行測試用例。在本文中,我們將從以下幾個方面詳細介紹Python unittest框架的使用方法和…

    編程 2025-04-29
  • com.alipay.sofa.bolt框架

    com.alipay.sofa.bolt框架是一款高性能、輕量級、可擴展的RPC框架。其廣泛被應用於阿里集團內部服務以及阿里雲上的服務。該框架通過NIO支持高並發,同時還內置了多種…

    編程 2025-04-29
  • 用Python繪製心形圖案的最簡單方法

    在這篇文章中,我們將探討使用Python繪製心形圖案的最簡單的方法,並提供相應的代碼示例。 一、基礎知識 在了解如何使用Python繪製心形之前,我們需要了解一些基礎知識,包括: …

    編程 2025-04-28
  • Django框架:從簡介到項目實戰

    本文將從Django的介紹,以及如何搭建Django環境開始,逐步深入到Django模型、視圖、模板、表單,最後通過一個小型項目實戰,進行綜合性的應用,讓讀者獲得更深入的學習。 一…

    編程 2025-04-28
  • LuaEP:一款強大的Lua開發框架

    LuaEP是一個集成了可以快速開發web應用程序所需的組件的Lua開發框架。它以Lua語言為基礎,提供了許多常用接口和庫,使得開發者不需要從頭開始編寫web應用程序,而是專註於業務…

    編程 2025-04-28
  • Guava Limiter——限流器的簡單易用

    本文將從多個維度對Guava Limiter進行詳細闡述,介紹其定義、使用方法、工作原理和案例應用等方面,並給出完整的代碼示例,希望能夠幫助讀者更好地了解和使用該庫。 一、定義 G…

    編程 2025-04-27
  • Java持久層框架的複合主鍵實現

    用Java持久層框架來操作數據庫時,複合主鍵是常見的需求。這篇文章將詳細闡述javax.persistence複合主鍵的實現方式,並提供完整的示例代碼。 一、複合主鍵的定義 複合主…

    編程 2025-04-27

發表回復

登錄後才能評論