java 屏蔽字替换_【mybatis】拦截sql语句进行替换指定字段

想请教大家一下,在使用mybatis时,有个需求是根据某标志位将动态产生的sql某些字段进行替换,例如 dao.query("dao.TestSettingMapper.qryData",param)

这个方法本来正常执行的sql是

“select a1,a2,a3 from tmp where id=001”,

但当param中flag=“special”时,希望产生的sql是

“select b1,b2,b3 from tmp where id=001”

这样 ,我想到是用aop去拦截,在方法拦截里抓出sql去替换,代码大致这样:

public Object invoke(MethodInvocation invocation) throws Throwable {

Object[] arguments = invocation.getArguments();

String sql_id = (String) arguments[0];//sql_id

Map mParam = (Map) arguments[1];//参数

//获取到sql

String sql = mSessionFactory.getConfiguration().getMappedStatement(sql_id)

.getBoundSql(mParam).getSql();

if("special"){

//进行字符替换操作

...

}

}

问题就在于我通过getBoundSql方法获取的sql没想到是含有通配符方式的,这样子就与入参匹配不到了,想请教大家怎么把带有通配符的sql语句再转成mybatis可以识别的写法,或者有没有更理想的方法,可以去拦截替换sql中字段?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值