MyBatisPlus-条件构造器以及如何自定义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条件的后面进行增加

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Mybatisplus 自定义sql 使用条件构造器可以在自定义 SQL 语句中使用 Mybatisplus 的条件构造器,方便快捷地构造查询条件。 使用步骤: 1. 在 Mapper 接口中定义自定义 SQL 语句的方法,方法返回值为 List 或者其他需要返回的结果类型。 2. 在自定义 SQL 语句中使用 ${} 占位符来引用条件构造器生成的 SQL 片段。 3. 在方法参数中使用 @Param 注解来指定条件构造器生成的 SQL 片段的参数名称和类型,同时在自定义 SQL 语句中使用 #{参数名} 占位符来引用参数。 4. 在方法中使用 QueryWrapper 类来构造查询条件,然后将 QueryWrapper 对象作为参数传递给自定义 SQL 语句方法即可。 示例代码如下: ``` @Mapper public interface UserMapper extends BaseMapper<User> { @Select("SELECT * FROM user ${ew.customSqlSegment}") List<User> selectByCustomSql(@Param(Constants.WRAPPER) QueryWrapper<User> wrapper); } ``` 其中,${ew.customSqlSegment} 是 Mybatisplus 条件构造器生成的 SQL 片段,@Param(Constants.WRAPPER) 指定了 wrapper 参数的名称和类型。 调用示例: ``` QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq("age", 18).like("name", "张"); List<User> userList = userMapper.selectByCustomSql(wrapper); ``` 以上代码中,使用 QueryWrapper 构造了查询条件,然后将 QueryWrapper 对象作为参数传递给 selectByCustomSql 方法,该方法会根据传入的 QueryWrapper 对象生成自定义 SQL 语句,并返回符合条件的用户列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monly21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值