关于MyBatisPlus分页模糊查询时去除字段空格这件事

起因:

        最近BOSS提了个要求,在根据商品名称查询的时候,要实现去除字段空格后分页查询(虽然之前提过,但是因为太忙+没能立马实现,就耽搁了),于是今天又提到这个需求,还好不算太忙,就想着实现它。

解决过程

  • 使用TRIM函数

        刚开始,我第一时间想到的就是TRIM函数,模糊地记得它可以去掉字符串的空格,然后就在QueryWrapper中直接写在了like语句中。结果在测试时发现,似乎没有生效?当时就懵了个逼,啥情况?为啥和想象中的不一样?

        接着就直接在数据库中查询这个TRIM(goods_name) 的执行结果:

SELECT TRIM(goods_name) FROM goods WHERE goods_status = 1;

        (执行结果)

        emmm

        啊这?好像和想象中的完全不一样啊。

        后面发现TRIM函数只能去除字段两端的空格,于是便想到了REPLACE方法来将空格替换掉

  • 使用REPLACE函数

        当接触REPLACE函数时,其实不太确定能不能实现在QueryWrapper中的模糊查询的,但是这次我学会了,先在Navicat中测试一遍查询结果,然后再拉入IDEA中。

        SQL代码:

SELECT REPLACE(goods_name, ' ', '') FROM goods WHERE goods_status = 1;

         执行结果:

        看结果,应该是自己想象中的样子,于是乎,将SQL套入QueryWrapper中便成了下面这样:
        queryWrapper.like("REPLACE(goods_name,' ','')", key )
                     .eq("goods_status", 1)
                     .orderByAsc("id")
                     .orderByAsc("goods_imei");

        其效果也是差不多了,最终也实现了模糊查询时去掉字段空格

         貌似,到这就结束了。。。。

BUT

        当我想按原来的方式(加空格查询的方式)查询时,发现竟然查不到了,不过想想也是(毕竟都去掉空格查询了,再加上空格查询,似乎就白搭了),不过这样的问题还是很好解决的,就是在QueryWrapper中使用or(),然后再like 一下,就OK啦!

        代码如下:

        queryWrapper.like("REPLACE(goods_name,' ','')", key )
                .or()
                .like("goods_name", key)
                .eq("goods_status", 1)
                .orderByAsc("id")
                .orderByAsc("goods_imei");

结尾:

        这虽然看上去不咋地,其实 写出了也就那样(废话文学)。但也让我真正了解了TRIM和REPLACE的用法,继续加油吧! 

Tips:

         如果你想问,为什么搜索到的商品名称会这样(不区分大小写)

        

        那就是用到了   utf8mb4_general_ci 的字符集(而不是utf8mb4_bin哦)

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值