MybatisPlus02--增删改查


环境说明

  • JDK 17
  • SpringBoot 3.0.2
  • MySQL 8.0.32
  • MybatisPlus 3.5.3

环境准备

导入相关依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.32</version>
</dependency>

条件构造器

对于一些复杂查询的情况,MybatisPlus支持自己构造QueryWrapper用于复杂条件查询:

QueryWrapper<User> qw = new QueryWrapper<>();
qw.select("id","name","password")
        .ge("id",1)
        .lt("id",3)
        .orderByAsc("id");
System.out.println(userMapper.selectList(qw));
// QueryWrapper和UpdateWrapper还有专门支持Java 8新增的Lambda表达式的特殊实现
// 可以直接以函数式的形式进行编写,使用方法类似,但是可读性不高。

等价于:

select id,name,password from user where (id>=? and id<?) order by id asc

有时遇到需要批处理的情况,也可以直接使用批处理操作:

List<User> userList = userMapper.selectBatchIds(List.of(1,3,5,2));
System.out.println(userList);
// 类似的还有deleteBatchIds()等

使用MybatisPlus 还可以快速进行分页查询操作,不过在执行前需要先配置一下分页插件:

@Configuration
public class MybatisConfig {
    @Bean
    public MybatisPlusInterceptor paginationInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //添加分页拦截器到MybatisPlusInterceptor中
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

然后通过mapper的selectPage()方法直接使用分页查询:

Page<User> page = userMapper.selectPage(Page.of(2 , 2), Wrappers.emptyWrapper());
System.out.println(page.getRecords());

CRUD接口

IService 接口

IService是 MybatisPlus 提供的一个接口。这个接口中包含了一系列与数据访问层交互的方法,如基础的查询、更新、Lambda查询和Lambda更新等。在具体的使用过程中,我们通常会在服务层对IService进行继承操作,以实现特定的业务逻辑。

同时,IService经常与BaseMapper和ServiceImpl一起使用,它们分别负责数据访问层的核心操作和业务逻辑处理。通过这三者的配合,可以有效地简化数据库操作并提高开发效率。

// User服务层接口
public interface IUserService extends IService<User> {
    // 这里可以添加其他用户相关的业务方法
}

// User服务层实现类
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
    // 如果需要,可以覆盖 IService 中的方法或添加额外的业务逻辑方法
}

Save 保存数据

// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量)
boolean saveBatch(Collection<T> entityList, int batchSize);

// 例
List<User> list = new ArrayList<>();
list.add(new User(null,"Altman","altman.com","123456"));
list.add(new User(null,"Larry Peggy","larry.com","123456"));
userService.saveBatch(list);

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);

// 例
userService.saveOrUpdate(new User(3, "Pixel", "pixel.com", "123456"));

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);

// 例
QueryWrapper<User> qw = new QueryWrapper<>();
qw.eq("id", 5);
userService.remove(qw);

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);

// 例
userService.updateById(new User(2,"Adobe","adobe.com","123456"));

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);

// 例
System.out.println(userService.getById(3));

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);

// 例
List<User> userList = userService.list();
// 根据一个字段查询另一个字段列表
List<String> strings = testService.listObjs(new QueryWrapper<TestEntity>()
	.eq("flag", "ab")
    .lambda().select(TestEntity::getName), Object::toString);
System.out.println(strings);

Page 分页查询

// 无条件分页查询
IPage<T> page(IPage<T> page);
// 条件分页查询
IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);
// 无条件分页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page);
// 条件分页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);

// 例
System.out.println(userService.page(new Page<>()).getRecords());
System.out.println(userService.page(new Page<>(2, 3)).getRecords());

Count 查询总数

// 查询总记录数
int count();
// 根据 Wrapper 条件,查询总记录数
int count(Wrapper<T> queryWrapper);

// 例
QueryWrapper<User> qw = new QueryWrapper<>();
qw.ge("id", 2);
System.out.println(userService.count(qw));

BaseMapper 接口

BaseMapper是一个为简化开发和提高效率而生的通用Mapper,它是数据访问层的核心接口,封装了基本的CRUD操作。

Insert 插入数据

// 插入一条记录
int insert(T entity);

// 例
userMapper.insert(new User(null,"Nico","28825295@qq.com","123456"));

Update 更新数据

// 根据 whereWrapper 条件,更新记录
int update(@Param(Constants.ENTITY) T updateEntity, @Param(Constants.WRAPPER) Wrapper<T> whereWrapper);
// 根据 ID 修改
int updateById(@Param(Constants.ENTITY) T entity);

// 例
UpdateWrapper<User> uw = new UpdateWrapper<>();
uw.set("name","Pixel")
  .eq("id", 3);
userMapper.update(null,uw);

Delete 删除数据

// 根据 entity 条件,删除记录
int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
// 删除(根据ID 批量删除)
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
// 根据 ID 删除
int deleteById(Serializable id);
// 根据 columnMap 条件,删除记录
int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);

// 例
userMapper.deleteById(4);

Select 查询数据

// 根据 ID 查询
T selectById(Serializable id);
// 根据 entity 条件,查询一条记录
T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

// 查询(根据ID 批量查询)
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
// 根据 entity 条件,查询全部记录
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 查询(根据 columnMap 条件)
List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
// 根据 Wrapper 条件,查询全部记录
List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值
List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

// 根据 entity 条件,查询全部记录(并翻页)
IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录(并翻页)
IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询总记录数
Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

// 例
List<User> userList = userMapper.selectList(null);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值