MyBatisPlus:自定义SQL

由于SQL不能写在业务层,所以可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分

①基于Wrapper 构建Where条件

 @Test
    public void test7(){
        //需求:将id满足ids的数据项的balance字段减200
        int amount=200;
        List<Long> ids=List.of(1L, 2L,3L);
        //构建条件,使用Lambda 形式获取参数类型
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>().in(User::getId, ids);
        //调用自定义方法
        userMapper.updateBalanceByIds(wrapper, amount);
    }

②在mapper方法中使用Param注解声明wrapper变量名称,必须是ew

@Mapper
public interface UserMapper extends BaseMapper<User> {
    /*自定义SQL
     在mapper方法的参数中使用@Param注解Wrapper变量名称,且名称必须为ew
     使用 ew 作为命名是为了统一约定,通常表示 "Entity Wrapper",这样可以直接在 SQL 语句中使用 ${ew} 作为查询条件的占位符。
     */
    void updateBalanceByIds(@Param("ew")LambdaQueryWrapper<User> wrapper,@Param("amount") int amount);
}

 ③自定义SQL,并且使用Wrapper条件

<mapper namespace="com.example.demo.mapper.UserMapper">
    <update id="updateBalanceByIds">
        UPDATE tb_user SET balance = balance - #{amount} ${ew.customSqlSegment}
    </update>
</mapper>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值