MyBatis-Plus內(nèi)置接口方法的具體使用
Service CRUD接口
Service CRUD 接口說明:
通用 Service CRUD 封裝IService接口,進(jìn)一步封裝 CRUD 采用
get 查詢單行remove 刪除list 查詢集合page 分頁(yè)前綴命名方式區(qū)分Mapper層避免混淆,泛型
T為任意實(shí)體對(duì)象
1.1 Save
// 插入一條記錄(選擇字段,策略插入) boolean save(T entity); // 插入(批量) boolean saveBatch(Collection<T> entityList); // 插入(批量) boolean saveBatch(Collection<T> entityList, int batchSize);
參數(shù)說明
| 類型 | 參數(shù)名 | 描述 |
|---|---|---|
| T | entity | 實(shí)體對(duì)象 |
| Collection<T> | entityList | 實(shí)體對(duì)象集合 |
| 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í)體對(duì)象 |
| Wrapper<T> | updateWrapper | 實(shí)體對(duì)象封裝操作類 UpdateWrapper |
| Collection<T> | entityList | 實(shí)體對(duì)象集合 |
| 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 對(duì)象 |
| 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í)體對(duì)象封裝操作類 UpdateWrapper |
| T | entity | 實(shí)體對(duì)象 |
| Collection<T> | entityList | 實(shí)體對(duì)象集合 |
| int | batchSize | 更新批次數(shù)量 |
1.5 Get
// 根據(jù) ID 查詢
T getById(Serializable id);
// 根據(jù) Wrapper,查詢一條記錄。結(jié)果集,如果是多個(gè)會(huì)拋出異常,隨機(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í)體對(duì)象封裝操作類 QueryWrapper |
| boolean | throwEx | 有多個(gè) result 是否拋出異常 |
| T | entity | 實(shí)體對(duì)象 |
| 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í)體對(duì)象封裝操作類 QueryWrapper |
| Collection<? extends Serializable> | idList | 主鍵 ID 列表 |
| Map<String, Object> | columnMap | 表字段 map 對(duì)象 |
| Function<? super Object, V> | mapper | 轉(zhuǎn)換函數(shù) |
有一個(gè)Mapper CRUD接口沒有寫,其實(shí)大差不差用法都差不多。除了方法名不同以外,sevice接口有異常拋出和事務(wù)注解,一般都用service接口操作數(shù)據(jù)庫(kù)。
更多Service接口操作,請(qǐng)見官網(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ù):指定使用語(yǔ)言和國(guó)家*/
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對(duì)象,并用Faker庫(kù)生成的隨機(jī)書名和價(jià)格對(duì)其進(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Security重寫AuthenticationManager實(shí)現(xiàn)賬號(hào)密碼登錄或者手機(jī)號(hào)碼登錄
本文主要介紹了Spring?Security重寫AuthenticationManager實(shí)現(xiàn)賬號(hào)密碼登錄或者手機(jī)號(hào)碼登錄,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-08-08
java中動(dòng)態(tài)代理如何實(shí)現(xiàn)詳解
動(dòng)態(tài)代理是基于接口實(shí)現(xiàn)的代理,mybatis就是用這個(gè)技術(shù)實(shí)現(xiàn)的,下面這篇文章主要給大家介紹了關(guān)于java中動(dòng)態(tài)代理如何實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2024-01-01
SpringCloud超詳細(xì)講解微服務(wù)網(wǎng)關(guān)Gateway
這篇文章主要介紹了SpringCloud Gateway微服務(wù)網(wǎng)關(guān),負(fù)載均衡,熔斷和限流,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
springboot項(xiàng)目idea熱部署的教程詳解
這篇文章主要介紹了springboot項(xiàng)目idea熱部署,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
Java?zxing實(shí)現(xiàn)生成并解析二維碼與條形碼
這篇文章主要為大家詳細(xì)介紹了Java如何通過zxing實(shí)現(xiàn)生成并解析二維碼與條形碼,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-11-11
mybatis映射文件操作存儲(chǔ)過程的實(shí)現(xiàn)
本文主要介紹了mybatis映射文件操作存儲(chǔ)過程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
ElasticSearch創(chuàng)建后索引修改數(shù)據(jù)類型方法步驟
Elasticsearch存儲(chǔ)數(shù)據(jù)之前需要先創(chuàng)建索引,類似于結(jié)構(gòu)型數(shù)據(jù)庫(kù)建庫(kù)建表,創(chuàng)建索引時(shí)定義了每個(gè)字段的索引方式和數(shù)據(jù)類型,這篇文章主要給大家介紹了關(guān)于ElasticSearch創(chuàng)建后索引修改數(shù)據(jù)類型的方法步驟,需要的朋友可以參考下2023-09-09

