1. MyBatis-Plus模糊查询入门指南
第一次接触MyBatis-Plus的模糊查询功能时,我也被like、likeLeft、likeRight这几个方法搞得晕头转向。明明看起来都是做模糊查询,为什么还要分这么多种?直到在实际项目中踩了几个坑之后,才真正理解了它们的区别和应用场景。
简单来说,这三个方法都是用来构建SQL中的LIKE条件,但处理通配符的方式不同:
- like:在参数两侧都加%通配符,相当于包含查询
- likeLeft:只在参数左侧加%通配符,相当于后缀匹配
- likeRight:只在参数右侧加%通配符,相当于前缀匹配
举个例子,假设我们有个用户表要按姓名搜索:
- 用like("张三")会匹配"老张三"、"张三丰"、"我叫张三"
- 用likeLeft("张三")只匹配"我叫张三"这类以"张三"结尾的
- 用likeRight("张三")只匹配"张三丰"这类以"张三"开头的
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 三种方法的实战应用场景
2.1 like方法:全模糊查询
全模糊查询是最常用的场景,比如电商平台的商品搜索功能。用户输入关键词后,我们希望匹配商品名称、描述等字段中包含该关键词的所有记录。
java复制// 搜索商品名称包含"手机"的所有商品
LambdaQueryWrapper<Product> wrapper = new LambdaQueryWrapper<>();
wrapper.like(Product::getName, "手机");
List<Product> products = productMapper.selectList(wrapper);
这里有个实际开发中的经验:当数据量较大时,全模糊查询可能会导致性能问题。我曾经遇到过用户输入单个字母"a"就查询超时的情况,最后通过添加最小长度限制和缓存机制解决了这个问题。
2.2 likeRight方法:前缀匹配查询
前缀匹配特别适合有固定编码规则的数据查询。比如我们公司的订单编号格式是"年份+月份+日期+序列号"(如20230815001),要查某个月份的所有订单:
java复制// 查询2023年8月的所有订单
LambdaQueryWrapper<Order> wrapper = new Lambda
