MybatisPlus—自定义SQL

2024-06-04 1440阅读

目录

1. 自定义SQL介绍

2. 自定义SQL使用步骤 

3. 自定义SQL实例

4.总结


1. 自定义SQL介绍

        介绍:自定义SQL并不是由我们来编写全部SQL语句,而是通过利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。

        使用需求:如果我们想要对数据库某字段进行直接赋值,那么可以在Mapper层或者.xml层编写对应的SQL语句。如果我们要对数据库某字段进行特殊赋值或者动态赋值,又或者其他复杂的操作,如:更新字段balance=balance+20,我们不得不在业务层进行编写,而这样会导致代码编写不符合规范(SQL语句需要在Mapper层中编写),但直接编写SQL语句又十分冗长麻烦。因此我们可以使自定义SQL的功能,将where条件交给MP编写,而剩余的Update、Select等语句由我们自定义编写(如下图所示)。
MybatisPlus—自定义SQL 第1张


2. 自定义SQL使用步骤 

        自定义SQL方法在业务层定义where条件和需要使用的参数,并将where条件与参数传入自定义Mapper方法中,最后在Mapper方法或者xml文件中自定义编写剩余的SQL语句。 

MybatisPlus—自定义SQL 第2张 


3. 自定义SQL实例

通过自定义SQL实现如下SQL语句:

update tb_user set balance = balance - 200 WHERE (id IN (1,2,4))
 /*Service层*/
    @Test
    void testCustomSqlUpdate() {
        //1. 设置更新条件
        List ids = List.of(1L, 2L, 4L);
        int amount = 200;
        //2. 定义where条件
        LambdaQueryWrapper wrapper = new LambdaQueryWrapper().in(User::getId, ids);
        //3. 调用自定义SQL方法
        userMapper.updateBalanceByIds(wrapper, amount);
    }
/*Mapper层*/
    @Mapper
    public interface UserMapper extends BaseMapper {
    //如果忘记"ew"可以用WRAPPER的常量代替:@Param(Constants.WRAPPER) 
    void updateBalanceByIds(@Param("ew") LambdaQueryWrapper wrapper, @Param("amount") int amount);
    }
    
        update tb_user set balance = balance - #{amount} ${ew.customSqlSegment}
    

4.总结

        总结:自定义SQL方法在业务层定义where条件和需要使用的参数,并将where条件与参数传入自定义Mapper方法中,最后在Mapper方法或者xml文件中自定义编写剩余的SQL语句。

        使用场景:当遇到SQL语句中,除where条件之外的语句很难用MP编写的情况下,可以使用自定义SQL。


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]