MybatisPlus的项目书写的下半场总结

又来总结了,不然我写这一行的时候,只有上帝和我知道我当时写什么~~

1、条件查询的三种写法,现在我只用了第一种
1)通常写法

QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 20);

2)QueryWrapper 的 lambda 表达式写法,这样能够避免写字段名写错,或者未转换驼峰写法导致 SQL 错误

QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(UserInfo::getAge, 20);

3)LambdaQueryWrapper 与 QueryWrapper 的 lambda 写法基本一致

LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(UserInfo::getAge, 20);

2、or()用法的注意点

where status =0 and phone =? or email =?

等价于

QueryWrapper<TUserinfo> userWrapper = new QueryWrapper();
userWrapper.eq("status",0).or("phone",loginId).or().eq("email",loginId);    

带括号的or拼接用下面的写法,箭头函数 (输入参数) ->(输出值) ,J8的lambda表达式

where status =0 and (phone =? or email =?)

等价于

QueryWrapper<TUserinfo> userWrapper = new QueryWrapper();
userWrapper.eq("status", 0);
userWrapper.and(use -> use.eq("phone", loginId).or().eq("email",loginId));    

3、去除多余的and或or
别写where 1=1 了 用<where><if>标签去除第一个多余的and,但是<if>里面又包含<if>的条件存在多余的系统是去不掉的,例如

            <if test="map.smsType != null and map.smsType != ''">
                and C.TYPE = #{map.smsType}
            </if>
            <if test="map.channelType != null and map.channelType != ''">
                AND (
                <trim prefixOverrides="OR">
                    <if test="map.channelType.contains('MD1')">
                        OR(C.CHANNEL = 'MD1' OR (C.CHANNEL = 'all' AND C.RESULT LIKE concat('%','MD1','%')))
                    </if>
                    <if test="map.channelType.contains('MD2')">
                        OR(C.CHANNEL = 'MD2' OR (C.CHANNEL = 'all' AND C.RESULT LIKE concat('%','MD2','%')))     
                </trim>
                )
            </if>

trim标签内sql语句加前缀
suffix 加后缀 prefixOverrides 去除多余的前缀 (可解决上面所说问题) suffixOverrides 去除多余的后缀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值