欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決mapper.xml中resultType映射類型的問(wèn)題

 更新時(shí)間:2023年06月26日 14:21:12   作者:內(nèi)涵無(wú)處不在  
這篇文章主要介紹了解決mapper.xml中resultType映射類型的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mapper.xml中resultType映射類型問(wèn)題

記錄一下在公司開發(fā)中遇到的問(wèn)題

在使用 mapper.xml 進(jìn)行編寫時(shí) resultMap=“String” String竟然引用不進(jìn)去,在程序中標(biāo)紅,別的mapper中也映射過(guò)但是別的就好使,然后重新啟動(dòng)的時(shí)候代碼執(zhí)行報(bào)錯(cuò)

<select id="queryAreaBy" parameterType="String" resultType="String">
? ? ? ?select SUM(area) as area from tb_forward_area where
? ? ? ? ? ? ? ? ? ? server_time = #{serverTime} ?and
? ? ? ? ? ? ? ? ? ? region_code like concat('%',#{regionCode},'%')
? ? ? ? ? ? ? ? ? ? and del_flag='0'
? ? </select>

這時(shí)需要 在resultType 中引入絕對(duì)路徑

<select id="queryAreaBy" parameterType="String" resultType="java.lang.String" >
? ? ? ? select SUM(area) as area from tb_forward_area where
? ? ? ? ? ? ? ? ? ? server_time = #{serverTime} ?and
? ? ? ? ? ? ? ? ? ? region_code like concat('%',#{regionCode},'%')
? ? ? ? ? ? ? ? ? ? and del_flag='0'
? ? </select>

代碼也不報(bào)錯(cuò)了也可以正常使用了,第二天繼續(xù)編寫項(xiàng)目時(shí),試了下把 java.lang. 這個(gè)路徑刪了他也好使了,但是在同一個(gè)mapper中別的SQL想使用String或者Long類型的還需要引入絕對(duì)路徑

mybatis Mapper接口映射Mapper.xml代碼分析

我們?cè)谑褂胢ybatis時(shí),會(huì)用到Mapper接口映射Mapper.xml,具體怎么映射的我們不知道。只知道要這么用,下面我們開始分析mybatis代碼。

在分析具體代碼時(shí),我們有必要先看一下jdk動(dòng)態(tài)代理。

簡(jiǎn)單點(diǎn)說(shuō):jdk動(dòng)態(tài)代理,可以讓我們?cè)诓粚?shí)現(xiàn)接口的情況下,去動(dòng)態(tài)生成接口的實(shí)現(xiàn)。

傳統(tǒng)上我們要去實(shí)現(xiàn)接口,都會(huì)創(chuàng)建具體的實(shí)現(xiàn)類.java,  而jdk動(dòng)態(tài)代理,可以讓我們不用創(chuàng)建具體的實(shí)現(xiàn)類.java,就可以生成接口實(shí)現(xiàn)。

代碼如下:

/**
 * 代理工具方法,可以為任意接口生成任意實(shí)例代理,該方式使用在了mybatis的Mapper接口映射Mapper.xml中,具體在     MapperProxyFactory
 * @param tClass
 * @param invocationHandler
 * @param <T>
 * @return
 */
public <T> T test4(Class<T> tClass, InvocationHandler invocationHandler) {
   T t = (T) Proxy.newProxyInstance(tClass.getClassLoader(), new Class[] {tClass},invocationHandler);
   return t;
}
@Test
public void test6() {
   UserMapper userMapper = test4(UserMapper.class, new InvocationHandler() {
      @Override
      public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
         System.out.println("查詢所有");
         return null;
      }
   });
   userMapper.getAll();
}

UserMapper為接口,上面的代碼就直接生成了UserMapper的實(shí)現(xiàn)。

執(zhí)行結(jié)果:

可以看到我們已經(jīng)成功生成了UserMapper的實(shí)現(xiàn),方法也正常執(zhí)行了。

mybatis正是使用了該特性進(jìn)行Mapper接口與Mapper.xml進(jìn)行映射。

mybatis代碼如下:

具體方法映射在mapperProxy的invoke方法中完成。 如下

進(jìn)而到MapperMethod中,如下:

然后是SqlCommand,如下:

繼續(xù)往下:

statementId就是我們的接口完全限定名加方法名。獲取對(duì)應(yīng)的MappedStatement后,進(jìn)行下一步處理。這里我們肯定會(huì)想,這個(gè)MappedStatement是怎么生成的,生成就是在解析Mapper.xml時(shí)生成的,代碼如下:

上面的id就是namespace+ select,update,delete,insert的id。

從這里也可以看到我們Mapper.xml的namespace必須的是Mapper接口的完全限定名,select,update,delete,insert的id也必須是接口的方法名。否則使用接口去映射時(shí)就會(huì)報(bào)錯(cuò)。

xml解析完畢后,就調(diào)用如下方法,生成接口的代理類,并將接口中方法上的mybatis注解,生成MappedStatement,代碼如下

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java后端實(shí)現(xiàn)MD5加密的方法

    Java后端實(shí)現(xiàn)MD5加密的方法

    有的時(shí)候因?yàn)闃I(yè)務(wù)的需要,我們要制作關(guān)于密碼的修改功能。而關(guān)于密碼的加密一般都是用MD5,那么這篇文章將介紹如何在Java的后端實(shí)現(xiàn)MD5加密,有需要的可以參考借鑒。
    2016-08-08
  • Spring?AOP?后置通知修改響應(yīng)httpstatus方式

    Spring?AOP?后置通知修改響應(yīng)httpstatus方式

    這篇文章主要介紹了Spring?AOP?后置通知修改響應(yīng)httpstatus方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • MyBatis批量插入幾千條數(shù)據(jù)為何慎用foreach

    MyBatis批量插入幾千條數(shù)據(jù)為何慎用foreach

    這篇文章主要介紹了MyBatis批量插入幾千條數(shù)據(jù)為何慎用foreach問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 詳解如何在項(xiàng)目中應(yīng)用SpringSecurity權(quán)限控制

    詳解如何在項(xiàng)目中應(yīng)用SpringSecurity權(quán)限控制

    本文主要介紹了如何在項(xiàng)目中應(yīng)用SpringSecurity權(quán)限控制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Kafka使用Java客戶端進(jìn)行訪問(wèn)的示例代碼

    Kafka使用Java客戶端進(jìn)行訪問(wèn)的示例代碼

    本篇文章主要介紹了Kafka使用Java客戶端進(jìn)行訪問(wèn)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 深入了解Java核心類庫(kù)--Arrays類

    深入了解Java核心類庫(kù)--Arrays類

    這篇文章主要為大家詳細(xì)介紹了java Arrays類定義與使用的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能給你帶來(lái)幫助
    2021-07-07
  • java求100以內(nèi)的素?cái)?shù)示例分享

    java求100以內(nèi)的素?cái)?shù)示例分享

    素?cái)?shù)是指因數(shù)只有1和本身的數(shù)字,這篇文章主要介紹了java求100以內(nèi)的素?cái)?shù)示例,需要的朋友可以參考下
    2014-03-03
  • Cookie的工作原理和應(yīng)用詳解

    Cookie的工作原理和應(yīng)用詳解

    Cookies是 web站點(diǎn)放置到你的硬盤上的程序。它們駐留在你的計(jì)算機(jī)上收集關(guān)于你在因特網(wǎng)上所做的一切事情的信息,并且 web站點(diǎn)可以在任何時(shí)候讀取到Cookies收集到的所有信息
    2021-06-06
  • 詳解配置類為什么要添加@Configuration注解

    詳解配置類為什么要添加@Configuration注解

    這篇文章主要介紹了詳解配置類為什么要添加@Configuration注解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java實(shí)現(xiàn)鏈表數(shù)據(jù)結(jié)構(gòu)的方法

    Java實(shí)現(xiàn)鏈表數(shù)據(jù)結(jié)構(gòu)的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)鏈表數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,每一個(gè)鏈表都包含多個(gè)節(jié)點(diǎn),節(jié)點(diǎn)又包含兩個(gè)部分,一個(gè)是數(shù)據(jù)域(儲(chǔ)存節(jié)點(diǎn)含有的信息),一個(gè)是引用域(儲(chǔ)存下一個(gè)節(jié)點(diǎn)或者上一個(gè)節(jié)點(diǎn)的地址),需要的朋友可以參考下
    2022-01-01

最新評(píng)論