基于SpringBoot整合SSMP案例(開啟日志與分頁查詢條件查詢功能實現(xiàn))
開啟事務
導入Mybatis-Plus框架后,我們可以使用Mybatis-Plus自帶的事務,只需要在配置文件中配置即可
使用配置方式開啟日志,設(shè)置日志輸出方式為標準輸出
mybatis-plus: global-config: db-config: table-prefix: tb_ id-type: auto configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
只有最后一行有用
數(shù)據(jù)層開發(fā)-分頁功能
分頁操作需要設(shè)定分頁對象IPage,Page第一個參數(shù)當前頁碼值,第二個是每一頁中條數(shù)
@Test void testPage(){ IPage page = new Page(2,2); bookDao.selectPage(page,null); System.out.println(page.getRecords()); }
IPage對象中封裝了分頁操作中的所有數(shù)據(jù)
數(shù)據(jù)
當前頁碼值
每頁數(shù)據(jù)總量
最大頁碼值
數(shù)據(jù)總量
這樣就直接實現(xiàn)分頁了嗎?
答案是否定的
分頁操作是在MyBatisPlus的常規(guī)操作基礎(chǔ)上增強得到,內(nèi)部是動態(tài)的拼寫SQL語句,
因此需要增強對應的功能,使用MyBatisPlus攔截器實現(xiàn)
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return mybatisPlusInterceptor; } }
執(zhí)行測試代碼
@Test void testPage(){ IPage page = new Page(1,2); bookDao.selectPage(page,null); System.out.println(page.getRecords()); }
可以看出執(zhí)行了兩次查詢,第一次執(zhí)行的查詢獲取了總條數(shù),為下面的分頁做準備
數(shù)據(jù)層開發(fā)-條件查詢功能
上面的分頁查詢中 bookDao.selectPage(page,null);
第二個參數(shù)賦成null,你可能好奇它的功能是什么,那里是用來放條件對象QueryWrapper的。
QueryWrapper解析
QueryWrapper 是 MyBatis-Plus 的一個核心功能,它是用來構(gòu)造 SQL 查詢語句的。MyBatis-Plus 是一款 MyBatis 的增強工具,在 MyBatis 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生。
QueryWrapper 主要提供了以下幾個功能:
鏈式調(diào)用: QueryWrapper 支持鏈式調(diào)用,使得代碼更加簡潔易讀。
條件構(gòu)造器: QueryWrapper 提供了豐富的條件構(gòu)造方法,如 eq (等于)、ne (不等于)、gt (大于)、ge (大于等于)、lt (小于)、le (小于等于) 等。
SQL函數(shù)支持: QueryWrapper 支持 SQL 函數(shù),比如 count、sum、avg 等。
子查詢支持: QueryWrapper 支持子查詢,可以在查詢條件中嵌套子查詢。
排序支持: QueryWrapper 支持 orderBy 方法進行排序。
下面是一個事例
QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("name", "張三") .ne("age", 20) .like("email", "test") .orderByAsc("age");
等價于SQL語句
SELECT * FROM user WHERE name = '張三' AND age != 20 AND email LIKE '%test%' ORDER BY age ASC;
了解完基礎(chǔ)知識點,下面是實際使用
@Test void testGetBy(){ QueryWrapper<Book> queryWrapper = new QueryWrapper<>(); queryWrapper.like("name","Spring"); List list = bookDao.selectList(queryWrapper); }
執(zhí)行結(jié)果
缺點:有的時候我們可能會打錯,比如將name打成了nmae,有沒有什么可以解決呢?有LambdaQueryWrapper。
LambdaQueryWrapper 是 MyBatis-Plus 提供的一個查詢條件構(gòu)造器,它是 QueryWrapper 的一個變種,主要使用 Java 8 的 Lambda 表達式語法。
LambdaQueryWrapper 提供了與 QueryWrapper 類似的功能,包括鏈式調(diào)用、條件構(gòu)造器、SQL函數(shù)支持、子查詢支持、排序支持等。
相比于 QueryWrapper,LambdaQueryWrapper 的主要優(yōu)點在于:
類型安全:LambdaQueryWrapper 使用了 Java 8 的 Lambda 表達式,使得其具有類型安全的特性。你可以在編譯時檢查到類型錯誤,而 QueryWrapper 在編譯時無法檢查到類型錯誤,只能在運行時通過拋出異常來發(fā)現(xiàn)錯誤。
代碼可讀性更強:由于使用了 Lambda 表達式,LambdaQueryWrapper 的代碼可讀性更強。你可以直接看到正在操作的是哪個字段,而不需要通過字符串來指定字段名,這樣也避免了因為字段名拼寫錯誤導致的問題。
例如,我們可以使用 LambdaQueryWrapper 構(gòu)造如下的查詢語句:
LambdaQueryWrapper<User> lambdaQuery = new QueryWrapper<User>().lambda(); lambdaQuery.eq(User::getName, "張三") .ne(User::getAge, 20) .like(User::getEmail, "test") .orderByAsc(User::getAge);
等價于SQL語句
SELECT * FROM user WHERE name = '張三' AND age != 20 AND email LIKE '%test%' ORDER BY age ASC;
User::getName 表示字段名是 "name",其他的類推,這樣我們就不會因為因為不小心而出錯了。
實戰(zhàn)如下
@Test void testGetBy2(){ LambdaQueryWrapper<Book> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.like(Book::getName,"Spring"); List list = bookDao.selectList(queryWrapper); }
執(zhí)行結(jié)果如下
到此這篇關(guān)于基于SpringBoot的SSMP整合案例(開啟日志與分頁查詢條件查詢功能實現(xiàn))的文章就介紹到這了,更多相關(guān)SpringBoot整合SSMP內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring的FactoryBean<Object>接口示例代碼
FactoryBean是Spring框架中的一個接口,用于創(chuàng)建和管理Bean對象,它的作用是將Bean的創(chuàng)建過程交給FactoryBean實現(xiàn)類來完成,而不是直接由Spring容器來創(chuàng)建,本文給大家介紹Spring的FactoryBean<Object>接口,感興趣的朋友一起看看吧2023-11-11Java多線程高并發(fā)中解決ArrayList與HashSet和HashMap不安全的方案
ArrayList實現(xiàn)了可變大小的數(shù)組。它允許所有元素,包括null。ArrayList沒有同步,HashMap和Hashtable類似,不同之處在于HashMap是非同步的,并且允許null,關(guān)于HashSet有一件事應該牢記,即就條目數(shù)和容量之和來講,迭代是線性的,接下來讓我們詳細來了解吧2021-11-11java自帶命令行工具jmap、jhat與jinfo的使用實例代碼詳解
本篇文章主要通過代碼實例對java自帶命令行工具jmap、jhat與jinfo的使用做出了詳解,需要的朋友可以參考下2017-04-04Java 線程對比(Thread,Runnable,Callable)實例詳解
這篇文章主要介紹了Java 線程(Thread,Runnable,Callable)實例詳解的相關(guān)資料,這里對java 線程的三種方法進行了對比,需要的朋友可以參考下2016-12-12關(guān)于JDK源碼中的@author unascribed注釋閑談
這篇文章主要介紹了關(guān)于JDK源碼中的@author unascribed注釋閑談,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08