Mybatis輸入輸出映射問題解讀(共三種類型)
一、輸入parameterType輸出resultType類型
(resultType:列名和pojo中的屬性名要一致)
Mybatis使用ognl表達(dá)式解析對象字段的值,#{}或者${}括號中的值為pojo屬性名稱,
其中,#{}:占位符號,相對于?,${}:sql拼接符號,相對于String
select * from user where name = #{name}; 會被動態(tài)解析為 select * from user where name = ?;
select * from user where name = ${name}; 當(dāng)我們傳遞參數(shù)"mark"時,會被解析 select * from user where name = "mark"; <!-- 1、resultType:如果要返回數(shù)據(jù)集合,只需設(shè)定為每一個元素的數(shù)據(jù)類型
2、 包裝的pojo取值通過 "."來獲取
-->
<select id="getUserByQueryVo" parameterType="queryvo" resultType="com.mark.pojo.User">
<!-- SELECT * FROM USER WHERE username LIKE #{name} -->
SELECT * FROM USER WHERE username LIKE '%${user.username}%'
</select>二、輸出resultMap(列名和pojo中的屬性名不一致)
resultMap包含元素
<!--column不做限制,可以為任意表的字段,而property須為type 定義的pojo屬性-->
<resultMap id="唯一的標(biāo)識" type="映射的pojo對象">
<id column="表的主鍵字段,或者可以為查詢語句中的別名字段" jdbcType="字段類型" property="映射pojo對象的主鍵屬性" />
<result column="表的一個字段(可以為任意表的一個字段)" jdbcType="字段類型" property="映射到pojo對象的一個屬性(須為type定義的pojo對象中的一個屬性)"/>
<!-- 一對一關(guān)聯(lián)-->
<association property="pojo的一個對象屬性" javaType="pojo關(guān)聯(lián)的pojo對象">
<id column="關(guān)聯(lián)pojo對象對應(yīng)表的主鍵字段" jdbcType="字段類型" property="關(guān)聯(lián)pojo對象的主席屬性"/>
<result column="任意表的字段" jdbcType="字段類型" property="關(guān)聯(lián)pojo對象的屬性"/>
</association>
<!-- 一對多關(guān)聯(lián)-->
<!-- 集合中的property須為ofType定義的pojo對象的屬性-->
<collection property="pojo的集合屬性" ofType="集合中的pojo對象">
<id column="集合中pojo對象對應(yīng)的表的主鍵字段" jdbcType="字段類型" property="集合中pojo對象的主鍵屬性" />
<result column="可以為任意表的字段" jdbcType="字段類型" property="集合中的pojo對象的屬性" />
</collection>
</resultMap>如果collection標(biāo)簽是使用嵌套查詢,<collection>標(biāo)簽中的column:要傳遞給select查詢語句的參數(shù),如果傳遞多個參數(shù),格式為column= {參數(shù)名1=表字段1,參數(shù)名2=表字段2} ;
格式如下:
<collection column="傳遞給嵌套查詢語句的字段參數(shù)" property="pojo對象中集合屬性" ofType="集合屬性中的pojo對象" select="嵌套的查詢語句" > </collection>
userMapper實(shí)例
<mapper namespace="com.mark.mapper.userMapper">
<!--
定義resultMap
type:resultMap最終映射的java對象類型,可以使用別名
id:對resultMap的唯一標(biāo)識
-->
<resultMap type="User" id="userResultMap">
<!--
column:查詢出來的列名
property:type指定的pojo類型中的屬性名
最終resultMap對column和property作一個映射關(guān)系(對應(yīng)關(guān)系)
-->
<!-- 主鍵用id -->
<id column="id" property="id"/>
<!-- 普通字段用result -->
<!-- 單表查詢可以不寫全,關(guān)聯(lián)查詢必須寫全所有字段 -->
<result column="user_name" property="username"/>
</resultMap>
<!-- 這里的resultMap要和<resultMap type="User" id="userResultMap">id一致 -->
<select id="findUserByResultMap" parameterType="com.mark.po.UserQueryVo" resultMap="userResultMap">
SELECT id, user_name FROM USER WHERE user.username=#{userCustom.username}
</select>
</mapper>總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot自定義路由覆蓋實(shí)現(xiàn)流程詳解
這篇文章主要介紹了SpringBoot自定義路由覆蓋實(shí)現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
SpringBoot如何使用@Cacheable進(jìn)行緩存與取值
這篇文章主要介紹了SpringBoot如何使用@Cacheable進(jìn)行緩存與取值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
IDEA創(chuàng)建Maven項(xiàng)目后報錯不出現(xiàn)src文件夾的情況解決
最近剛開始學(xué)習(xí)maven,正準(zhǔn)備使用idea創(chuàng)建一個maven項(xiàng)目練手,卻發(fā)現(xiàn)自己創(chuàng)建的maven項(xiàng)目始終沒有src目錄,下面這篇文章主要給大家介紹了關(guān)于IDEA創(chuàng)建Maven項(xiàng)目后報錯不出現(xiàn)src文件夾的情況解決,需要的朋友可以參考下2023-05-05
java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類操作
這篇文章主要介紹了java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10

