真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

一文帶你讀懂MyBatis中的參數(shù)-創(chuàng)新互聯(lián)

一文帶你讀懂MyBatis中的參數(shù)?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)提供高防物理服務(wù)器租用、云服務(wù)器、香港服務(wù)器、西信服務(wù)器托管

前言

相信很多人可能都遇到過下面這些異常:

  • "Parameter 'xxx' not found. Available parameters are [...]"
  • "Could not get property 'xxx' from xxxClass. Cause:
  • "The expression 'xxx' evaluated to a null value."
  • "Error evaluating expression 'xxx'. Return value (xxxxx) was not iterable."

不只是上面提到的這幾個(gè),我認(rèn)為有很多的錯(cuò)誤都產(chǎn)生在和參數(shù)有關(guān)的地方。

想要避免參數(shù)引起的錯(cuò)誤,我們需要深入了解參數(shù)。

想了解參數(shù),我們首先看MyBatis處理參數(shù)和使用參數(shù)的全部過程。

本篇由于為了便于理解和深入,使用了大量的源碼,因此篇幅較長,需要一定的耐心看完,本文一定會(huì)對(duì)你起到很大的幫助。

參數(shù)處理過程

處理接口形式的入?yún)?/strong>

在使用MyBatis時(shí),有兩種使用方法。一種是使用的接口形式,另一種是通過SqlSession調(diào)用命名空間。這兩種方式在傳遞參數(shù)時(shí)是不一樣的,命名空間的方式更直接,但是多個(gè)參數(shù)時(shí)需要我們自己創(chuàng)建Map作為入?yún)?。相比而言,使用接口形式更?jiǎn)單。

接口形式的參數(shù)是由MyBatis自己處理的。如果使用接口調(diào)用,入?yún)⑿枰?jīng)過額外的步驟處理入?yún)?,之后就和命名空間方式一樣了。

在MapperMethod.Java會(huì)首先經(jīng)過下面方法來轉(zhuǎn)換參數(shù):

public Object convertArgsToSqlCommandParam(Object[] args) {
 final int paramCount = params.size();
 if (args == null || paramCount == 0) {
 return null;
 } else if (!hasNamedParameters && paramCount == 1) {
 return args[params.keySet().iterator().next()];
 } else {
 final Map param = new ParamMap();
 int i = 0;
 for (Map.Entry entry : params.entrySet()) {
 param.put(entry.getValue(), args[entry.getKey()]);
 // issue #71, add param names as param1, param2...but ensure backward compatibility
 final String genericParamName = "param" + String.valueOf(i + 1);
 if (!param.containsKey(genericParamName)) {
 param.put(genericParamName, args[entry.getKey()]);
 }
 i++;
 }
 return param;
 }
}            
分享名稱:一文帶你讀懂MyBatis中的參數(shù)-創(chuàng)新互聯(lián)
文章鏈接:http://weahome.cn/article/dpesod.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部