确认
- [X] 我的版本是最新版本, 我的版本号与 version 相同, 并且项目里无依赖冲突
- [X] 我已经在 issue 中搜索过, 确认问题没有被提出过
- [X] 我已经修改标题, 将标题中的 描述 替换为遇到的问题
功能改进
paramNameValuePairs在格式化SQL时, 会将参数名替换成占位符MPGENVALi,并在格式化完成或者下一次解析wrapper时清空?这个做法是为了保证参数唯一性或者防止内存溢出吗? 如果我想在mybatis-plus拦截器中获取querryWrapper中的参数名和参数值,并对其进行修改, 无法通过paramNameValuePairs来实现。 有什么办法能够让我在拦截器中获取到参数键值对呢。
参考资料
No response
Comment From: miemieYaho
那你考虑过'column=?or column=?'的情况吗?
Comment From: HY-love-sleep
我明白您的意思, 占位符是必须的, 但是这个map到拦截器里就是null了, 我无法获取到参数。既然paramNameValuePairs无法实现, 能否有别的方式实现呢,比如在abstractWrapper中新增一个数据结构?或者保存一下占位符到参数名的映射?
Comment From: miemieYaho
你说的修改参数功能不足以让我们做该考虑
Comment From: HY-love-sleep
获取querywrapper中绑定的参数和值是很普遍的需求吧。。。
Comment From: miemieYaho
获取了有啥用?你要改值不应该提前改好才对嘛?
Comment From: HY-love-sleep
获取了有啥用?你要改值不应该提前改好才对嘛?
我当前面临的问题是: 在数据库中,敏感字段username是以加密形式存储的。在通过username查询用户信息时,应当使用加密后的值与数据库中的记录进行匹配。然而,前端传递给后端的username值是未经加密的明文形式。为了确保数据的一致性和安全性,需要在后端对这些明文username进行加密处理后再执行数据库查询操作。由于涉及此类需求的接口数量众多,逐一修改每个接口以添加加密逻辑不仅工作量巨大,而且容易引入错误。 理想情况下,在Mapper层实现统一的加密处理可以有效解决上述问题,从而确保所有相关接口无需额外改动即可自动兼容这一安全要求。然而,现有的问题在于但是无法在mybatis-plus的queryWrapper中获取参数值。 如果官方能支持的话, 能够极大地简化使用mybatis-plus项目开发人员的工作。
Comment From: miemieYaho
所以你写个util套一层不就行了
eq(xx,XxUtil.encode(param))
Comment From: HY-love-sleep
所以你写个util套一层不就行了
eq(xx,XxUtil.encode(param))
就是用到的地方太多了, 涉及所有敏感字段查询的地方都得套一层, 而且不一定能覆盖全
Comment From: chess3cake
我们有类似的场景,但我是在拦截器中去重新解析MapperStatement中的sql和参数来做的,这样可以拿到最终sql和对应的占位符参数。
所以你写个util套一层不就行了
eq(xx,XxUtil.encode(param))就是用到的地方太多了, 涉及所有敏感字段查询的地方都得套一层, 而且不一定能覆盖全