mybatis的sql中参数替换问题

王者_来归 2018-11-21 04:20:12
在mybatis中mapper的xml配置文件中可以把sql配置进去,里面的参数mybatis框架会自动替换,现在我想自己替换sql中的参数,mybatis只执行我替换后的sql,如何实现?
比如,我有一个sql,如下:

select id,name,account, case sex when 1 then '男' else '女' end as sex
from user a where 1=1
<if test="account!=null">
and a.account=#{account}
</if>
<if test="name!=null">
and a.name like '%#{name}%'
</if>

然后我有一个map,key为account,值为:zhangsan,我想手工把上面的sql替换掉,最终得到的sql为:

select id,name,account, case sex when 1 then '男' else '女' end as sex
from user a where 1=1
and a.account='zhangsan'

,请问有什么公用的方法,实现mybatis替换参数的功能?或者调用什么接口之类的?
...全文
1598 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdxhuangxudong 2021-09-16
  • 打赏
  • 举报
回复

有解决方案了吗?我也有这样的需求

王者_来归 2021-09-18
  • 举报
回复
@wdxhuangxudong 我后面没有采用这种方法,因为我的sql都是可配置化的,如果写死在代码中,就不方便修改了。我的处理方式是,在传递sql前,自己写工具替换掉变量。如果你要用我上帖子中的方法,请参考这个:https://www.cnblogs.com/huaxingtianxia/p/6473852.html
RUA好多鱼~ 2018-11-29
  • 打赏
  • 举报
回复
那就只能把=换成in然后用foreach标签啊,这样你传进来的map有几个参数就会in(“”)几个内容
王者_来归 2018-11-22
  • 打赏
  • 举报
回复
找了半天没有找到答案,就自己规定了一种方式自己写替换逻辑了。
王者_来归 2018-11-22
  • 打赏
  • 举报
回复
引用 2 楼 hp961218 的回复:
参数是Map就不应该是等于,用in代替=,然后foreach拼接参数,差不多就是 a.count in ('a','b','c');但是具体的还得看名字和账户是否一一对应做出具体改变

我的map中不只是一参数的值,map中可以是一个参数,也可以是多个参数。
天涯若风 2018-11-22
  • 打赏
  • 举报
回复
应该有动态占位符吧
hp961218 2018-11-22
  • 打赏
  • 举报
回复
参数是Map就不应该是等于,用in代替=,然后foreach拼接参数,差不多就是 a.count in ('a','b','c');但是具体的还得看名字和账户是否一一对应做出具体改变
王者_来归 2018-11-22
  • 打赏
  • 举报
回复
顶一顶,如果没有解决方案,只能自己写一个简单的了
maradona1984 2018-11-22
  • 打赏
  • 举报
回复
说下你原始需求把...你这看起来想打印日志?
如果是打印日志根本不需要这么做

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧