模糊查询 + 分页 有坑!

前言

不知道你有没有使用过Mysqllike语句,进行模糊查询?

不知道你有没有将查询结果,进行分页处理?

模糊查询,加上分页处理,会有意想不到的坑,不信我们继续往下看。

我之前提供过一个品牌查询接口,给前端品牌选择控件使用的。

当时为了性能考虑,怕前端控件因为一次性加载太多的品牌,而导致页面卡死。

因此,对品牌查询接口做了分页处理。

刚开始品牌表的数据比较少,没有出现什么问题。

后来,产品加需求了,在品牌下拉选择控件中,让用户可以输入自定义品牌。

在用户添加品牌前,需要先查一下,如果该品牌存在,则使用已有品牌。如果不存在,则新增品牌。(这里是精确匹配)

这个需求很简单,很容易实现了。

后来,产品又加需求了,需要按名称模糊查询品牌。

该功能上线后,使用了很长一段时间,也没啥问题。

突然,在不经意的某一天,这个功能却出问题了。

到底怎么回事呢?

1.案发现场

某一天下午,运营找到测试反馈一个问题说:明明品牌苏三,已经存在了,但用户输入关键字:苏三时,系统没有让用户直接选择已有品牌,而是添加了一个叫:苏三的自定义的品牌。

我过去一看&#x

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用 Mybatis-Plus 提供的 QueryWrapper 来构造模糊查询条件,使用 Page 类进行分页查询。具体步骤如下: 1. 定义实体类和 Mapper 接口,使用 Mybatis-Plus 提供的注解来简化 SQL 语句的编写。 ```java // 实体类 @Data public class User { private Long id; private String name; private Integer age; } // Mapper 接口 @Mapper public interface UserMapper extends BaseMapper<User> { } ``` 2. 在 Service 层中编写模糊查询的方法,使用 QueryWrapper 进行条件构造,使用 Page 进行分页查询。 ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public Page<User> findUsers(String name, Integer age, Integer pageNum, Integer pageSize) { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(name)) { queryWrapper.like("name", name); } if (age != null) { queryWrapper.eq("age", age); } Page<User> page = new Page<>(pageNum, pageSize); return userMapper.selectPage(page, queryWrapper); } } ``` 3. 在 Controller 层中接收请求参数,调用 Service 层的方法进行查询,并将结果返回给前端。 ```java @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping public Page<User> findUsers(@RequestParam(required = false) String name, @RequestParam(required = false) Integer age, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize) { return userService.findUsers(name, age, pageNum, pageSize); } } ``` 这样就可以实现模糊多表分页查询了。需要注意的是,如果要查询多表的数据,需要在 Mapper 接口中自定义 SQL 语句,在 Service 层中调用这些自定义的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏三说技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值