为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

SMILET 2019-01-31 21:27:12
想请教大家一下,在使用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<String, Object> mParam = (Map<String, Object>) arguments[1];//参数     //获取到sql     String sql = mSessionFactory.getConfiguration().getMappedStatement(sql_id).getBoundSql(mParam).getSql();    if("special"){    //进行字符替换操作     ...     }} 问题就在于我通过getBoundSql方法获取的sql没想到是含有通配符方式的,这样子就与入参匹配不到了,想请教大家怎么把带有通配符的sql语句再转成mybatis可以识别的写法,或者有没有更理想的方法,可以去拦截替换sql中字段?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 2981 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信