日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyBatis之输入与输出(resultType、resultMap)映射

發(fā)布時(shí)間:2023/11/29 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis之输入与输出(resultType、resultMap)映射 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

在MyBatis中,我們通過parameterType完成輸入映射(指將值映射到sql語句的占位符中,值的類型與dao層響應(yīng)方法的參數(shù)類型一致),通過resultType完成輸出映射(從數(shù)據(jù)庫中輸出,通過dao層的方法查詢到的數(shù)據(jù)輸出到pojo對(duì)象中)。?注意輸入與輸出都是相對(duì)于數(shù)據(jù)庫的。接下來我們先談?wù)勢(shì)斎胗成洹9こ棠夸浗Y(jié)構(gòu)如下:

1.輸入映射parameterType

通過parameterType傳入簡(jiǎn)單類型或?qū)ο?#xff0c;我們之前講過了,接下來我們要講的是parameterType傳遞pojo包裝對(duì)象。可以定義pojo包裝類型擴(kuò)展mapper接口輸入?yún)?shù)的內(nèi)容。

看下我們的需求:定義查詢條件查詢用戶信息,需要向statement輸入查詢條件,查詢條件可以有user信息、商品信息等等。

首先我們?cè)赿omain包下創(chuàng)建UserCustom類并繼承User,UserCustom類用于對(duì)User屬性進(jìn)行擴(kuò)展(例如User中只有用戶信息,而我們可以在UserCustom中加入商品信息),然后再創(chuàng)建User的包裝類UserQueryVo.java:

UserMapper.xml中添加如下配置信息:

UserMapper.java中添加方法:

然后便可以進(jìn)行測(cè)試:

可能出現(xiàn)的異常:如果在parameterType中指定了錯(cuò)誤的屬性名時(shí)會(huì)出現(xiàn)如下異常:

org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userCusto' in 'class cn.itcast.mybatis.po.UserQueryVo'### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userCusto' in 'class cn.itcast.mybatis.po.UserQueryVo'

2.輸出映射

輸出映射有resultType和resultMap,他們都是指定輸出結(jié)果的類型(pojo、簡(jiǎn)單類型、hashmap…),并將sql查詢結(jié)果映射為java對(duì)象 。

2.1resultType

借用上述parameter傳遞包裝pojo對(duì)象的知識(shí)(不用parameter傳遞包裝pojo對(duì)象的知識(shí)也行),我們來談?wù)動(dòng)胷esultType輸出簡(jiǎn)單類型。UserMapper.xml文件中添加如下配置:

然后在UserMapper.java中添加如下方法:

測(cè)試:

這里因?yàn)椴樵兊挠涗浗Y(jié)果集為一條記錄且該記錄只有1列,所以我們使用的是返回簡(jiǎn)單類型。

使用resultType時(shí)我們應(yīng)該注意:sql查詢的列名要和resultType指定pojo的屬性名相同,指定相同屬性方可映射成功,如果sql查詢的列名要和resultType指定pojo的屬性名全部不相同(或是部分不相同),則映射到pojo對(duì)象中的對(duì)應(yīng)屬性為null。例如有時(shí)候我們不需要查詢select * from user where id = ?而是select username,address _address where id = ??此時(shí)我們給查詢的address列名給了一個(gè)別名_address,這樣我們通過查詢表中address的數(shù)據(jù)然后在將它映射到User對(duì)象時(shí),該對(duì)象的address屬性就為null,即沒將從表中查詢到的address數(shù)據(jù)映射到user對(duì)象的address屬性中。

此時(shí)resultMap就出現(xiàn)了。如果sql查詢列名和最終要映射的pojo的屬性名不一致,使用resultMap就可以將列名和pojo的屬性名做一個(gè)對(duì)應(yīng)關(guān)系 (列名和屬性名映射配置)。

2.2resultMap

使用resultMap需要在UserMapper.xml中進(jìn)行配置:

然后在UserMapper.xml中使用它:

UserMapper.java文件中:

測(cè)試類代碼:

運(yùn)行測(cè)試類發(fā)現(xiàn),即使我們查詢的列名與User對(duì)象的屬性不一樣,但是我們的確映射成功了。

轉(zhuǎn)載于:https://my.oschina.net/u/3881735/blog/1832602

總結(jié)

以上是生活随笔為你收集整理的MyBatis之输入与输出(resultType、resultMap)映射的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。