我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。
步骤:
实现:
@Test
void testCustomSqlUpdate(){
//update tb_user set balance = balance - #{amount} where id in(?,?,?,?,...)
List<Long> ids = Arrays.asList(1L, 2L, 3L, 4L);
QueryWrapper<User> wrapper = new QueryWrapper<User>()
.in("id",ids);
int amount = 200;
userMapper.updateBalanceByIds(wrapper,amount);
}
@Mapper
public interface UserMapper extends BaseMapper<User> {
//自定义sql,同时拼接where条件
void updateBalanceByIds(@Param(Constants.WRAPPER) QueryWrapper<User> wrapper,@Param("amount") int amount);
}
<mapper namespace="com.itheima.mp.mapper.UserMapper">
<update id="updateBalanceByIds">
update tb_user set balance = balance - #{amount} ${ew.customSqlSegment}
</update>
</mapper>
运行结果图: