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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

不一样 使用别名 数据字段和bean_Mybatis-resultMap标签详解

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不一样 使用别名 数据字段和bean_Mybatis-resultMap标签详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

是Maybatis的結果集封裝,搭配等標簽的resultMap屬性使用

屬性:

id:該封裝規則的唯一標識

type:封裝出來的類型,可以是jdk自帶的,比如Map,應該可以是自定義的,比如Employee

autoMapping:自動封裝,如果數據庫字段和javaBean的字段名一樣,可以使用這種方式,但是不建議采取,還是老老實實寫比較穩妥,如果非要使用此功能,那就在全局配置中加上mapUnderscoreToCamelCase=TRUE,它會使經典數據庫字段命名規則翻譯成javaBean的經典命名規則,如:a_column翻譯成aColumn

extends:繼承其他封裝規則,和Java中的繼承一樣,也特別適合這樣的場景

子標簽:

用來標識出對象的唯一性,比如用表的主鍵,如:

column指定數據庫字段名或者其別名

property指定javaBean的屬性名

還有jdbcType,javaType,typeHandler,分別數據庫類型,屬性的java類型,數據庫與Java類型匹配處理器

默認的類型匹配處理器有:

以上羅列的資料不全,可以參考官方文檔的如下章節

非主鍵的映射規則

屬性:

property:同標簽

javaType:同標簽

select:指定嵌套SQL,可以是本XML或者其他XML文件中的

fetchType:延遲加載,lazy打開延遲加載;eager積極加載

column:同標簽

resultMap:不使用嵌套SQL,而是使用復雜SQL一次取出關聯的對象,并封裝,對應下面的方式三

resultSet:引用根據標簽得到的resultSets,如:

SELECT * FROM BLOG WHERE ID = #{id}

SELECT * FROM AUTHOR WHERE ID = #{id}

{call getBlogsAndAuthors(#{id,jdbcType=INTEGER,mode=IN})}

autoMapping:同標簽

columnPrefix:關聯多張表查詢時,為了使列明不重復,使用此功能可以減少開發量

select

B.id as blog_id,

B.title as blog_title,

A.id as author_id,

A.username as author_username,

A.password as author_password,

A.email as author_email,

A.bio as author_bio,

CA.id as co_author_id,

CA.username as co_author_username,

CA.password as co_author_password,

CA.email as co_author_email,

CA.bio as co_author_bio

from Blog B

left outer join Author A on B.author_id = A.id

left outer join Author CA on B.co_author_id = CA.id

where B.id = #{id}

抽取出共同的resultMap,因為作者和其他作者都具有同樣的屬性,因此有:

resultMap="authorResult" />

resultMap="authorResult"

columnPrefix="co_" />

foreignColumn:外鍵列

notNullColumn:不為空的列,如果指定了列,那么只有當字段不為空時,Mybatis才會真正創建對象,才能得到我們想要的值

typeHandler:同標簽

方式一:

select employee_id,first_name,last_name,gendor,birthday,a.dept_id,dept_name,dept_desc

from employee a,department b

where a.dept_id=b.dept_id

and a.employee_id=#{id}

方式二:

select="com.jv.dao.DepartMentMapper.getDepartMentByIdNew" column="dept_id">

select="com.jv.dao.PostMapper.getPostById" column="post_id">

select employee_id,first_name,last_name,gendor,birthday,dept_id,post_id

from employee a

where a.employee_id=#{id}

方式三:

select employee_id,first_name,last_name,gendor,birthday,a.dept_id,dept_name,dept_desc

from employee a,department b

where a.dept_id=b.dept_id

and a.employee_id=#{id}

和association很像,collection是負責處理多行的結果集,如:

方式一:

使用嵌套SQL

SELECT * FROM BLOG WHERE ID = #{id}

SELECT * FROM POST WHERE BLOG_ID = #{id}

方式二:

使用復雜查詢-在collection中直接配置封裝規則

select

B.id as blog_id,

B.title as blog_title,

B.author_id as blog_author_id,

P.id as post_id,

P.subject as post_subject,

P.body as post_body,

from Blog B

left outer join Post P on B.id = P.blog_id

where B.id = #{id}

方式三:

使用復雜查詢-抽取封裝規則放到resultMap中

select

B.id as blog_id,

B.title as blog_title,

B.author_id as blog_author_id,

P.id as post_id,

P.subject as post_subject,

P.body as post_body,

from Blog B

left outer join Post P on B.id = P.blog_id

where B.id = #{id}

方式二和方式三只有在封裝的方式上有區別

負責根據返回的字段的值封裝不同的類型,如:

上面的配置就是如果vehicle_type的值是1,那么封裝的結果為carResult,同事carResult又繼承了vehicleResult的所有普通封裝規則,最后的它結果可以按照下面的配置理解

使用構造器注入屬性值,可能會問既然通過和就可以給屬性注入值了,為什么還有一個構造器注入的,原因是有的JavaBean沒有提供屬性的getter和setter方法。

為了維護更方便,推薦在使用構造器注入的時候加上name屬性,該屬性值與構造器參數名字相同(需要編譯參數加上-parameters,Jdk版本為1.8,而且Mybatis的參數useActualParamName設置為true(默認值為true)),也可以使用@param("paramName")指定特殊的參數名。

總結

以上是生活随笔為你收集整理的不一样 使用别名 数据字段和bean_Mybatis-resultMap标签详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。