MyBatis-Plus內(nèi)置接口方法的具體使用
Service CRUD接口
Service CRUD 接口說明:
通用 Service CRUD 封裝IService接口,進(jìn)一步封裝 CRUD 采用
get 查詢單行
remove 刪除
list 查詢集合
page 分頁
前綴命名方式區(qū)分Mapper
層避免混淆,泛型
T
為任意實(shí)體對象
1.1 Save
// 插入一條記錄(選擇字段,策略插入) boolean save(T entity); // 插入(批量) boolean saveBatch(Collection<T> entityList); // 插入(批量) boolean saveBatch(Collection<T> entityList, int batchSize);
參數(shù)說明
類型 | 參數(shù)名 | 描述 |
---|---|---|
T | entity | 實(shí)體對象 |
Collection<T> | entityList | 實(shí)體對象集合 |
int | batchSize | 插入批次數(shù)量 |
1.2 SaveOrUpdate
// TableId 注解存在更新記錄,否插入一條記錄 boolean saveOrUpdate(T entity); // 根據(jù)updateWrapper嘗試更新,否繼續(xù)執(zhí)行saveOrUpdate(T)方法 boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper); // 批量修改插入 boolean saveOrUpdateBatch(Collection<T> entityList); // 批量修改插入 boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
參數(shù)說明
類型 | 參數(shù)名 | 描述 |
---|---|---|
T | entity | 實(shí)體對象 |
Wrapper<T> | updateWrapper | 實(shí)體對象封裝操作類 UpdateWrapper |
Collection<T> | entityList | 實(shí)體對象集合 |
int | batchSize | 插入批次數(shù)量 |
1.3 Remove
// 根據(jù) queryWrapper 設(shè)置的條件,刪除記錄 boolean remove(Wrapper<T> queryWrapper); // 根據(jù) ID 刪除 boolean removeById(Serializable id); // 根據(jù) columnMap 條件,刪除記錄 boolean removeByMap(Map<String, Object> columnMap); // 刪除(根據(jù)ID 批量刪除) boolean removeByIds(Collection<? extends Serializable> idList);
參數(shù)說明
類型 | 參數(shù)名 | 描述 |
---|---|---|
Wrapper<T> | queryWrapper | 實(shí)體包裝類 QueryWrapper |
Serializable | id | 主鍵 ID |
Map<String, Object> | columnMap | 表字段 map 對象 |
Collection<? extends Serializable> | idList | 主鍵 ID 列表 |
1.4 Update
// 根據(jù) UpdateWrapper 條件,更新記錄 需要設(shè)置sqlset boolean update(Wrapper<T> updateWrapper); // 根據(jù) whereWrapper 條件,更新記錄 boolean update(T updateEntity, Wrapper<T> whereWrapper); // 根據(jù) ID 選擇修改 boolean updateById(T entity); // 根據(jù)ID 批量更新 boolean updateBatchById(Collection<T> entityList); // 根據(jù)ID 批量更新 boolean updateBatchById(Collection<T> entityList, int batchSize);
參數(shù)說明
類型 | 參數(shù)名 | 描述 |
---|---|---|
Wrapper<T> | updateWrapper | 實(shí)體對象封裝操作類 UpdateWrapper |
T | entity | 實(shí)體對象 |
Collection<T> | entityList | 實(shí)體對象集合 |
int | batchSize | 更新批次數(shù)量 |
1.5 Get
// 根據(jù) ID 查詢 T getById(Serializable id); // 根據(jù) Wrapper,查詢一條記錄。結(jié)果集,如果是多個(gè)會拋出異常,隨機(jī)取一條加上限制條件 wrapper.last("LIMIT 1") T getOne(Wrapper<T> queryWrapper); // 根據(jù) Wrapper,查詢一條記錄 T getOne(Wrapper<T> queryWrapper, boolean throwEx); // 根據(jù) Wrapper,查詢一條記錄 Map<String, Object> getMap(Wrapper<T> queryWrapper); // 根據(jù) Wrapper,查詢一條記錄 <V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
參數(shù)說明
類型 | 參數(shù)名 | 描述 |
---|---|---|
Serializable | id | 主鍵 ID |
Wrapper<T> | queryWrapper | 實(shí)體對象封裝操作類 QueryWrapper |
boolean | throwEx | 有多個(gè) result 是否拋出異常 |
T | entity | 實(shí)體對象 |
Function<? super Object, V> | mapper | 轉(zhuǎn)換函數(shù) |
1.6 List
// 查詢所有 List<T> list(); // 查詢列表 List<T> list(Wrapper<T> queryWrapper); // 查詢(根據(jù)ID 批量查詢) Collection<T> listByIds(Collection<? extends Serializable> idList); // 查詢(根據(jù) columnMap 條件) Collection<T> listByMap(Map<String, Object> columnMap); // 查詢所有列表 List<Map<String, Object>> listMaps(); // 查詢列表 List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper); // 查詢?nèi)坑涗? List<Object> listObjs(); // 查詢?nèi)坑涗? <V> List<V> listObjs(Function<? super Object, V> mapper); // 根據(jù) Wrapper 條件,查詢?nèi)坑涗? List<Object> listObjs(Wrapper<T> queryWrapper); // 根據(jù) Wrapper 條件,查詢?nèi)坑涗? <V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
參數(shù)說明
類型 | 參數(shù)名 | 描述 |
---|---|---|
Wrapper<T> | queryWrapper | 實(shí)體對象封裝操作類 QueryWrapper |
Collection<? extends Serializable> | idList | 主鍵 ID 列表 |
Map<String, Object> | columnMap | 表字段 map 對象 |
Function<? super Object, V> | mapper | 轉(zhuǎn)換函數(shù) |
有一個(gè)Mapper CRUD接口沒有寫,其實(shí)大差不差用法都差不多。除了方法名不同以外,sevice接口有異常拋出和事務(wù)注解,一般都用service接口操作數(shù)據(jù)庫。
更多Service接口操作,請見官網(wǎng)。
綜合案例
package com.ycxw.mybatis_test; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.github.javafaker.Faker; import com.ycxw.mybatis_test.entity.Book; import com.ycxw.mybatis_test.mapper.BookMapper; import com.ycxw.mybatis_test.service.IBookService; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @Slf4j @SpringBootTest class MybatisTextApplicationTests { @Autowired private IBookService bookService; @Autowired private BookMapper bookMapper; @Test void contextLoads() { } /** * 保存單個(gè) */ @Test public void test01() { /*創(chuàng)建faker實(shí)例 參數(shù):指定使用語言和國家*/ Faker faker = new Faker(new Locale("zh", "CN")); /* faker.number().randomDouble(x,x,x) * 生成一個(gè)介于 100 和 999 之間的隨機(jī)浮點(diǎn)數(shù),并且保留兩位小數(shù)。 * */ Book book = new Book() .setBookname(faker.book().title()) .setPrice((float) faker.number().randomDouble(2, 100, 999)); bookService.save(book); } /** * 保存多個(gè) */ @Test public void test02() { /* * Stream.generate方法:創(chuàng)建一個(gè)無限流,其中每個(gè)元素都是使用提供的lambda表達(dá)式生成的。 * 使用lambda表達(dá)式創(chuàng)建一個(gè)新的Book對象,并用Faker庫生成的隨機(jī)書名和價(jià)格對其進(jìn)行初始化。 * limit方法:將流限制為只包含前1000個(gè)元素。 * collect方法:將流收集到一個(gè)列表中。 * */ Faker faker = new Faker(new Locale("zh", "CN")); List<Book> list = Stream.generate( () -> new Book() .setBookname(faker.book().title()) .setPrice((float) faker.number().randomDouble(2, 100, 999)) ).limit(10).collect(Collectors.toList()); bookService.saveBatch(list); } @Test public void test03() { Faker faker = new Faker(Locale.CHINA); List<Book> list = Stream.generate( () -> new Book() .setBookname(faker.book().title()) .setPrice((float) faker.number().randomDouble(2, 100, 999)) ).limit(1000).collect(Collectors.toList()); bookService.saveBatch(list, 500); } @Test public void test04() { QueryWrapper<Book> wrapper = new QueryWrapper<>(); /*條件刪除 * lt小于 * */ wrapper.lt("price", 500); // wrapper.like("name", "你"); bookService.remove(wrapper); } @Test public void test05() { Map<String, Object> ms = new HashMap<>(); ms.put("price", 100); // ms.put("name", "你"); bookService.removeByMap(ms); } @Test public void test06() { List<Long> ids = bookService .list() .stream() .limit(5) .map(Book::getId) .collect(Collectors.toList()); bookService.removeBatchByIds(ids); } @Test public void test07() { UpdateWrapper<Book> wrapper = new UpdateWrapper<>(); wrapper.eq("id", 493587255361727L); wrapper.set("name", "jack"); wrapper.setSql("price=price+1"); bookService.update(wrapper); } @Test public void test08() { Faker faker = new Faker(Locale.CHINA); Book Book = new Book() .setBookname(faker.book().title()) .setPrice((float) faker.number().randomDouble(2, 100, 999)); UpdateWrapper<Book> wrapper = new UpdateWrapper<>(); wrapper.eq("id", 493587255361723L); bookService.update(Book, wrapper); } @Test public void test09() { QueryWrapper<Book> wrapper = new QueryWrapper<>(); wrapper.like("name", "呂"); wrapper.gt("price", 200); bookService.getOne(wrapper); } @Test public void test10() { QueryWrapper<Book> wrapper = new QueryWrapper<>(); /*sql條件加拼接*/ wrapper.gt("price", 200); /*拼接sql到最后*/ wrapper.last("limit 1"); bookService.getOne(wrapper); } @Test public void test11() { QueryWrapper<Book> wrapper = new QueryWrapper<>(); wrapper.gt("price", 200); bookService.getOne(wrapper, false); } @Test public void test12() { QueryWrapper<Book> wrapper = new QueryWrapper<>(); wrapper.gt("price", 200); wrapper.last("limit 1"); bookService.getMap(wrapper).forEach((k, v) -> { log.warn("{},{}", k, v); }); } @Test public void test13() { QueryWrapper<Book> wrapper = new QueryWrapper<>(); wrapper.gt("price", 200); wrapper.last("limit 1"); bookService.getObj(wrapper, e -> { log.warn("{}", e); return new Object(); }); } }
到此這篇關(guān)于MyBatis-Plus內(nèi)置接口方法的具體使用的文章就介紹到這了,更多相關(guān)MyBatis-Plus內(nèi)置接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring實(shí)現(xiàn)Logback日志模板設(shè)置動(dòng)態(tài)參數(shù)功能
本文介紹如何在Spring應(yīng)用中實(shí)現(xiàn)Logback日志模板的動(dòng)態(tài)參數(shù)設(shè)置,通過設(shè)計(jì)traceId鏈路標(biāo)識,將其動(dòng)態(tài)添加到日志輸出中,從而實(shí)現(xiàn)簡易的鏈路追蹤功能,感興趣的朋友跟隨小編一起看看吧2024-11-11java中orElse和orElseGet方法區(qū)別小結(jié)
這篇文章主要給大家介紹了關(guān)于java中orElse和orElseGet方法區(qū)別的相關(guān)資料,兩者之間的區(qū)別細(xì)微,但是卻在某些場景下顯的很重要,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10springboot整合webservice使用簡單案例總結(jié)
WebService是一個(gè)SOA(面向服務(wù)的編程)的架構(gòu),它是不依賴于語言,平臺等,可以實(shí)現(xiàn)不同的語言間的相互調(diào)用,下面這篇文章主要給大家介紹了關(guān)于springboot整合webservice使用的相關(guān)資料,需要的朋友可以參考下2024-07-07解析Neatbeans(常見錯(cuò)誤) build-impl.xml:305: Compile failed
本篇文章是對Neatbeans(常見錯(cuò)誤) build-impl.xml:305: Compile failed的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07java實(shí)現(xiàn)數(shù)字轉(zhuǎn)換人民幣中文大寫工具
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)數(shù)字轉(zhuǎn)換人民幣中文大寫工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04Struts2學(xué)習(xí)筆記(3)-DMI動(dòng)態(tài)調(diào)用方式
本文主要介紹Struts2的DMI動(dòng)態(tài)調(diào)用的兩種方式,簡單實(shí)用,希望能給大家做一個(gè)參考。2016-06-06springboot從application.properties中注入list,?map方式
這篇文章主要介紹了springboot從application.properties中注入list,map方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11