MyBatisPlus-条件构造器以及如何自定义SQL

目录

  • 一、概述
  • 二、QueryWrapper
  • 三、LambdaQueryWrapper
  • 四、UpdateWrapper
  • 五、LambdaUpdateWrapper
  • 五、自定义SQL

一、概述

通过构建各种复杂的where条件,满足日常开发中的所有需求

在这里插入图片描述

二、QueryWrapper

@Test
void testQueryWrapper() {
    QueryWrapper<User> wrapper = new QueryWrapper<User>().like("username", "张");
    List<User> users = userService.list(wrapper);
    System.out.println(users);
}

三、LambdaQueryWrapper

@Test
void testLambdaQueryWrapper() {
    LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
            .like(User::getUsername, "张");
    List<User> users = userService.list(wrapper);
    System.out.println(users);
}

四、UpdateWrapper

@Test
void testUpdateWrapper() {
    // 要修改的数据
    User user = User.builder().username("张三").build();
    // where查询条件
    UpdateWrapper<User> wrapper = new UpdateWrapper<User>().eq("id", 1);
    userService.update(user, wrapper);
}

五、LambdaUpdateWrapper

@Test
void testLambdaUpdateWrapper() {
    // 要修改的数据
    User user = User.builder().username("张三**").build();
    // where查询条件
    LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<User>().eq(User::getId, 1);
    userService.update(user, wrapper);
}

五、自定义SQL

将ID为 1,2,3的用户金额减 10

测试类

@Test
void testCustomSQL() {
    List<Integer> ids = List.of(1, 2, 3);
    Integer amount = 10;
    LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<User>().in(User::getId, ids);
    userService.updateVagueByIds(wrapper, amount);
}

Service接口

public interface IUserService extends IService<User> {

    /**
     * 自定义SQL修改用户数据
     * @param wrapper
     */
    void updateVagueByIds(LambdaUpdateWrapper<User> wrapper, Integer amount);
}

ServiceImp实现类

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

    /**
     * 自定义SQL修改用户数据
     *
     * @param wrapper
     * @param amount
     */
    @Override
    public void updateVagueByIds(LambdaUpdateWrapper<User> wrapper, Integer amount) {
        this.baseMapper.updateVagueByIds(wrapper, amount);
    }

}

注意:这里ServiceImpl已经指定了泛型为UserMapper,所以我们在调用Mapper接口的时候直接使用this.baseMapper即可,不需要再依赖注入。

Mapper接口

@Mapper
public interface UserMapper extends BaseMapper<User> {
    void updateVagueByIds(@Param(Constants.WRAPPER) LambdaUpdateWrapper<User> wrapper,  @Param("amount") Integer amount);
}

注意:这里的wrpper条件构造器需要增加@Param(Constants.WRAPPER)指定ew表明这个参数是一个条件构造器。

XML文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ming.mapper.UserMapper">
    <update id="updateVagueByIds">
        update user set balance = balance - #{amount} ${ew.customSqlSegment}
    </update>
</mapper>

注意:这里使用条件构造器的方法为${ew.customSqlSegment},不需要增加where语句,直接再SQL条件的后面进行增加