欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

MyBatisExcutor攔截器的巧妙用法

這里要講的巧妙用法是用來(lái)實(shí)現(xiàn)在攔截器中執(zhí)行額外 MyBatis 現(xiàn)有方法的用法。

創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)武清,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792

并且會(huì)提供一個(gè)解決攔截Executor時(shí)想要修改MappedStatement時(shí)解決并發(fā)的問(wèn)題。

這里假設(shè)一個(gè)場(chǎng)景:

實(shí)現(xiàn)一個(gè)攔截器,記錄 MyBatis 所有的 insert,update,delete 操作,將記錄的信息存入數(shù)據(jù)庫(kù)。

這個(gè)用法在這里就是將記錄的信息存入數(shù)據(jù)庫(kù)。

實(shí)現(xiàn)過(guò)程的關(guān)鍵步驟和代碼:

1.首先在某個(gè) Mapper.xml 中定義好了一個(gè)往日志表中插入記錄的方法,假設(shè)方法為id="insertSqlLog"。

2.日志表相關(guān)的實(shí)體類(lèi)為SqlLog.

3.攔截器簽名:

@Intercepts({@org.apache.ibatis.plugin.Signature(
  type=Executor.class, 
  method="update", 
  args={MappedStatement.class, Object.class})})
public class SqlInterceptor implements Interceptor

4.接口方法簡(jiǎn)單實(shí)現(xiàn):

public Object intercept(Invocation invocation) throws Throwable {
  Object[] args = invocation.getArgs();
  MappedStatement ms = (MappedStatement) args[0];
  Object parameter = args[1];
  SqlLog log = new SqlLog();
  Configuration configuration = ms.getConfiguration();
  Object target = invocation.getTarget();
  StatementHandler handler = configuration.newStatementHandler((Executor) target, ms, 
       parameter, RowBounds.DEFAULT, null, null);
  BoundSql boundSql = handler.getBoundSql();
  //記錄SQL
  log.setSqlclause(boundSql.getSql());
  //執(zhí)行真正的方法
  Object result = invocation.proceed();
  //記錄影響行數(shù)
  log.setResult(Integer.valueOf(Integer.parseInt(result.toString())));
  //記錄時(shí)間
  log.setWhencreated(new Date());
  //TODO 還可以記錄參數(shù),或者單表id操作時(shí),記錄數(shù)據(jù)操作前的狀態(tài)
  //獲取insertSqlLog方法
  ms = ms.getConfiguration().getMappedStatement("insertSqlLog");
  //替換當(dāng)前的參數(shù)為新的ms
  args[0] = ms;
  //insertSqlLog 方法的參數(shù)為 log
  args[1] = log;
  //執(zhí)行insertSqlLog方法
  invocation.proceed();
  //返回真正方法執(zhí)行的結(jié)果
  return result;
}

重點(diǎn) 

MappedStatement是一個(gè)共享的緩存對(duì)象,這個(gè)對(duì)象是存在并發(fā)問(wèn)題的,所以幾乎任何情況下都不能去修改這個(gè)對(duì)象(通用Mapper除外),想要對(duì)MappedStatement做修改該怎么辦呢?

并不難,Executor中的攔截器方法參數(shù)中都有MappedStatement ms,這個(gè)ms就是后續(xù)方法執(zhí)行要真正用到的MappedStatement,這樣一來(lái),問(wèn)題就容易解決了,根據(jù)自己的需要,深層復(fù)制MappedStatement對(duì)象中自己需要修改的屬性,然后修改這部分屬性,之后將修改后的ms通過(guò)上面代碼中args[0]=ms這種方式替換原有的參數(shù),這樣就能實(shí)現(xiàn)對(duì)ms的修改而且不會(huì)有并發(fā)問(wèn)題了。

這里日志的例子就是一個(gè)更簡(jiǎn)單的應(yīng)用,并沒(méi)有創(chuàng)建ms,只是獲取了一個(gè)新的ms替換現(xiàn)有的ms,然后去執(zhí)行。

總結(jié)

以上所述是小編給大家介紹的MyBatis Excutor 攔截器的巧妙用法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!

網(wǎng)站題目:MyBatisExcutor攔截器的巧妙用法
文章源于:http://aaarwkj.com/article8/peeoip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、電子商務(wù)、小程序開(kāi)發(fā)、云服務(wù)器、品牌網(wǎng)站設(shè)計(jì)、App開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
全国精品免费视频久久久| 色哟哟视频免费在线观看| 免费在线观看污污污网站| 亚洲国产日朝欧美综合久久| 亚洲国产欧美日韩国产| 日本大胆高清人体艺术| 久久一二三四区中文字幕| 久久久久国产综合精品| 欧美日韩一区二区黄色| 亚洲熟妇av一区二区三区l| 伊人欧美一区二区三区| 亚欧乱色熟女一区二区三区| 爱爱网爱综合日日干夜夜操| 日韩一级久久精品理论| 亚洲男人天堂黄色av| av毛片在线播放免费| 亚洲情欲一级片日韩欧美| 亚洲精品网站国产高清| 成人黄色动漫在线播放| 热久久青草精品欧美一区| 欧美日韩一区二区午夜福利| 刚出嫁新婚少妇很紧很爽| 亚洲一区免费在线视频| 婷婷激情亚洲综合综合久久| 国产一区二区麻豆视频| 9热在线视频精品这里只有| 91日本视频在线播放| av免费观看日韩永久| 国产精品久久中文字幕网| 国产视频一区二区三区网| 一区二区三区日韩国产电影 | 国产av自拍在线免费观看| 欧美三级精品三级在线| 亚洲精品黄色片中文字幕| 亚洲日本av一区二区| 蜜臀av在线国产一区| 尤物视频网站在线观看| 日本一区二区三级在线观看| 欧美国产日韩一区在线观看| 国产精品亚洲精品久久| 年轻的少妇一区二区三区|