想請教大家一下,在使用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中字段?
添加回答
舉報
0/150
提交
取消