MyBatis-Plus内置接口方法的具体使用
作者:云村小威
java开发应用程序与数据库交互使用比较多的就是mybatisPlus接口,本文主要介绍了MyBatis-Plus内置接口方法的具体使用,具有一定的参考价值,感兴趣的可以了解一下
Service CRUD接口
Service CRUD 接口说明:
通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用
get 查询单行remove 删除list 查询集合page 分页前缀命名方式区分Mapper层避免混淆,泛型
T为任意实体对象
1.1 Save
// 插入一条记录(选择字段,策略插入) boolean save(T entity); // 插入(批量) boolean saveBatch(Collection<T> entityList); // 插入(批量) boolean saveBatch(Collection<T> entityList, int batchSize);
参数说明
| 类型 | 参数名 | 描述 |
|---|---|---|
| T | entity | 实体对象 |
| Collection<T> | entityList | 实体对象集合 |
| int | batchSize | 插入批次数量 |
1.2 SaveOrUpdate
// TableId 注解存在更新记录,否插入一条记录 boolean saveOrUpdate(T entity); // 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法 boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper); // 批量修改插入 boolean saveOrUpdateBatch(Collection<T> entityList); // 批量修改插入 boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
参数说明
| 类型 | 参数名 | 描述 |
|---|---|---|
| T | entity | 实体对象 |
| Wrapper<T> | updateWrapper | 实体对象封装操作类 UpdateWrapper |
| Collection<T> | entityList | 实体对象集合 |
| int | batchSize | 插入批次数量 |
1.3 Remove
// 根据 queryWrapper 设置的条件,删除记录 boolean remove(Wrapper<T> queryWrapper); // 根据 ID 删除 boolean removeById(Serializable id); // 根据 columnMap 条件,删除记录 boolean removeByMap(Map<String, Object> columnMap); // 删除(根据ID 批量删除) boolean removeByIds(Collection<? extends Serializable> idList);
参数说明
| 类型 | 参数名 | 描述 |
|---|---|---|
| Wrapper<T> | queryWrapper | 实体包装类 QueryWrapper |
| Serializable | id | 主键 ID |
| Map<String, Object> | columnMap | 表字段 map 对象 |
| Collection<? extends Serializable> | idList | 主键 ID 列表 |
1.4 Update
// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset boolean update(Wrapper<T> updateWrapper); // 根据 whereWrapper 条件,更新记录 boolean update(T updateEntity, Wrapper<T> whereWrapper); // 根据 ID 选择修改 boolean updateById(T entity); // 根据ID 批量更新 boolean updateBatchById(Collection<T> entityList); // 根据ID 批量更新 boolean updateBatchById(Collection<T> entityList, int batchSize);
参数说明
| 类型 | 参数名 | 描述 |
|---|---|---|
| Wrapper<T> | updateWrapper | 实体对象封装操作类 UpdateWrapper |
| T | entity | 实体对象 |
| Collection<T> | entityList | 实体对象集合 |
| int | batchSize | 更新批次数量 |
1.5 Get
// 根据 ID 查询
T getById(Serializable id);
// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
T getOne(Wrapper<T> queryWrapper, boolean throwEx);
// 根据 Wrapper,查询一条记录
Map<String, Object> getMap(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);参数说明
| 类型 | 参数名 | 描述 |
|---|---|---|
| Serializable | id | 主键 ID |
| Wrapper<T> | queryWrapper | 实体对象封装操作类 QueryWrapper |
| boolean | throwEx | 有多个 result 是否抛出异常 |
| T | entity | 实体对象 |
| Function<? super Object, V> | mapper | 转换函数 |
1.6 List
// 查询所有 List<T> list(); // 查询列表 List<T> list(Wrapper<T> queryWrapper); // 查询(根据ID 批量查询) Collection<T> listByIds(Collection<? extends Serializable> idList); // 查询(根据 columnMap 条件) Collection<T> listByMap(Map<String, Object> columnMap); // 查询所有列表 List<Map<String, Object>> listMaps(); // 查询列表 List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper); // 查询全部记录 List<Object> listObjs(); // 查询全部记录 <V> List<V> listObjs(Function<? super Object, V> mapper); // 根据 Wrapper 条件,查询全部记录 List<Object> listObjs(Wrapper<T> queryWrapper); // 根据 Wrapper 条件,查询全部记录 <V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
参数说明
| 类型 | 参数名 | 描述 |
|---|---|---|
| Wrapper<T> | queryWrapper | 实体对象封装操作类 QueryWrapper |
| Collection<? extends Serializable> | idList | 主键 ID 列表 |
| Map<String, Object> | columnMap | 表字段 map 对象 |
| Function<? super Object, V> | mapper | 转换函数 |
有一个Mapper CRUD接口没有写,其实大差不差用法都差不多。除了方法名不同以外,sevice接口有异常抛出和事务注解,一般都用service接口操作数据库。
更多Service接口操作,请见官网。
综合案例
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() {
}
/**
* 保存单个
*/
@Test
public void test01() {
/*创建faker实例
参数:指定使用语言和国家*/
Faker faker = new Faker(new Locale("zh", "CN"));
/*
faker.number().randomDouble(x,x,x)
* 生成一个介于 100 和 999 之间的随机浮点数,并且保留两位小数。
* */
Book book = new Book()
.setBookname(faker.book().title())
.setPrice((float) faker.number().randomDouble(2, 100, 999));
bookService.save(book);
}
/**
* 保存多个
*/
@Test
public void test02() {
/*
* Stream.generate方法:创建一个无限流,其中每个元素都是使用提供的lambda表达式生成的。
* 使用lambda表达式创建一个新的Book对象,并用Faker库生成的随机书名和价格对其进行初始化。
* limit方法:将流限制为只包含前1000个元素。
* collect方法:将流收集到一个列表中。
* */
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();
});
}
}到此这篇关于MyBatis-Plus内置接口方法的具体使用的文章就介绍到这了,更多相关MyBatis-Plus内置接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
