Mybatis 不带$符号的分页代码实现

本文介绍了如何在Mybatis中不使用$符号实现分页查询,利用bind标签进行动态SQL计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为limit 后无法使用运算符,所以要借助mybatis 的bind 先进行计算

<select id="selectForPage1" resultType="com.lagou.entity.Position">
       <bind name="offsetSize" value="(num2-1)*num1"/>
        select * from position limit #{offsetSize},#{num1}
    </select>

bind表签可以参考MyBatis动态sql之bind标签

### MyBatis Plus 模糊查询生效的解决方案 在使用 MyBatis Plus 进行模糊查询时,如果发现查询结果符合预期或者未生效,可能是由于参数传递方式当、SQL 构造问题或其他配置缺失引起的。以下是针对该问题的具体分析与解决办法。 #### 1. 参数处理中的特殊字符 `%` 的影响 当 `like` 查询中传入的参数包含 `%` 或 `_` 等通配符时,MyBatis 默认会对其进行转义处理。这可能会导致 SQL 执行过程中无法正确匹配目标数据[^1]。 可以通过以下两种方式进行调整: - **方法一:手动移除多余 `%` 并重新拼接** 如果前端已经传递了有 `%` 的字符串,则可以在后端代码中将其替换掉多余的 `%` 符号后再进行拼接操作。 ```java String keyword = "%" + param.getKeyword().replace("%", "") + "%"; ``` - **方法二:利用 Wrapper 接口安全构建条件表达式** 使用 MyBatis Plus 提供的 `QueryWrapper` 来封装查询逻辑可以有效避免手写 SQL 来的风险。 ```java QueryWrapper<Employee> queryWrapper = new QueryWrapper<>(); queryWrapper.like("name", param.getName()); List<Employee> result = employeeMapper.selectList(queryWrapper); ``` #### 2. 数据库表名或字段名称错误引发异常 若数据库中存在指定的表或列名,也会造成查询失败并抛出类似如下错误信息: ``` org.springframework.jdbc.BadSqlGrammarException: ### Error querying database... Cause: java.sql.SQLSyntaxErrorException: Table 'mybatisplus.employee' doesn't exist ``` 此时需确认实体类映射关系是否正确以及对应的物理表是否存在[^2]。 #### 3. 配置分页插件的影响 即使实现了基本功能,在某些场景下仍可能遇到因缺少必要组件而导致的行为偏差现象。例如启用分页查询却忘记注册 `PaginationInterceptor` 插件的话,那么即便调用了诸如 `selectPage()` 方法也会按照预想那样生成两条独立 sql 请求而是退化成单条无限制检索命令[^3]。 综上所述,要彻底解决问题可以从以下几个方面入手: - 对输入值做适当清理; - 双重检查模型定义同实际存储结构的一致性状况; - 审视项目初始化阶段是否有遗漏加载关键扩展模块的情况发生; ```java // 示例代码片段展示如何通过 QueryWrapper 实现精确控制 LIKE 表达式的构造过程 public List<UserInfoVO> searchUsers(String keyWord){ QueryWrapper<UserEntity> wrapper=new QueryWrapper<>(); if(StringUtils.isNotBlank(keyWord)){ // 自动添加前后百分号实现部分匹配效果 wrapper.like("username",keyWord.trim()); } return this.baseMapper.selectList(wrapper).stream() .map(item->convertToVo(item)) .collect(Collectors.toList()); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值