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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

mybatis 一对一 一对多 级联查询

發(fā)布時間:2023/12/10 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatis 一对一 一对多 级联查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

大家好,我是烤鴨:

? ? 今天分享一下關于mybatis的級聯(lián)查詢。

? ? 環(huán)境:

? ? ? ? mybatis? ?3.2.8

? ? ? ? spring? ? ? 4.1.9

?

1.? ?業(yè)務場景

? ? 在一個人申請某些賬號或者權限的時候,比如微信的認證流程。

? ?會讓你一步一步按要求輸入,比如第一步:點擊微信認證,第二步:認證聯(lián)系人信息填寫;最后一步:填寫公眾號名稱、功能介紹、選擇運營地區(qū)就。

? ?當你在填寫完第二步退出之后,再重新登錄會發(fā)現(xiàn)第一步的信息已經(jīng)記錄了。

? ?這里至少要設計四張表,流程表和每一步的表,都是主鍵一一關聯(lián),這是一對一。

? ?又或者如其他平臺的企業(yè)版的認證,可以添加下級的機構,這就是一對多了。

2.? ? mybatis 構建

? ? ?get,set方法是必須要的,我這里沒粘貼出來。

pojo:

public class ApplyCompanyBackResp{private static final long serialVersionUID = 1L;private ApplyCompanyBusinessA businessA1;private ApplyCompanyBusinessAl businessAl;private ApplyCompanyBusinessCt businessC1;private ApplyCompanyBusinessCr businessC2;private ApplyCompanyBusinessJ businessAliantJ1;private ApplyCompanyBusinessM businessM1;private ApplyCompanyBusinessMo businessAliantM2;private List<ApplyCompanyBusinessJ1Store> businessJ1StoreList;}

mapper:

<!--根據(jù)當前頁面獲取該企業(yè)開通的權限--><select id="applyCompanyAuthorityBusiness" parameterType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyAuthority"resultMap="applyCompanyResp">SELECTacbc.`status` AS 'c1Status','c1' AS 'c1Remarks',acbcc.`status` AS 'c2Status','c2' AS 'c2Remarks',acba.`status` AS 'a1Status','a1' AS 'a1Remarks',acbac.`status` AS 'a2Status','a2' AS 'a2Remarks',acbj.status AS 'J1Status','j1' AS 'j1Remarks',acbmr.`status` AS 'm1Status','m1' AS 'm1Remarks',acbmr2.status AS 'm2Status','m2' AS 'm2Remarks',acbjs.jx_name AS 'j1Name',acbjs.status AS 'j1StoreStatus'FROM apply_company_process acpLEFT JOIN apply_company_business_c1 acbc ON acbc.apply_id = acp.apply_idLEFT JOIN apply_company_business_c2 acbcc ON acbcc.apply_id = acp.apply_idLEFT JOIN apply_company_business_a1 acba ON acba.apply_id = acp.apply_idLEFT JOIN apply_company_business_a2 acbac ON acbac.apply_id = acp.apply_idLEFT JOIN apply_company_business_j1 acbj ON acbj.apply_id = acp.apply_idLEFT JOIN apply_company_business_m1 acbmr ON acbmr.apply_id = acp.apply_idLEFT JOIN apply_company_business_m2 acbmr2 ON acbmr2.apply_id = acp.apply_idLEFT JOIN apply_company_business_j1_store acbjs ON acbjs.apply_id = acbj.apply_id<where>1 = 1 AND 'needOptimization' = 'needOptimization' AND acp.apply_id = #{applyId}</where></select><resultMap type="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBackResp" id="applyCompanyResp"><!-- 配置xx相關的映射信息 --><association property="businessA1" column="apply_id" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessA1"><id property="applyId" column="applyId" /><result property="remarks" column="a1Remarks"/><result property="status" column="a1Status"/></association><!-- 配置xx的映射信息 --><association property="businessA2" column="apply_id" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessA2"><id property="applyId" column="applyId" /><result property="remarks" column="a2Remarks"/><result property="status" column="a2Status"/></association><!-- 配置xx相關的映射信息 --><association property="businessC1" column="apply_id" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessC1"><id property="applyId" column="applyId" /><result property="remarks" column="c1Remarks"/><result property="status" column="c1Status"/></association><!-- 配置xx相關的映射信息 --><association property="businessC2" column="apply_id" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessC2"><id property="applyId" column="applyId" /><result property="remarks" column="c2Remarks"/><result property="status" column="c2Status"/></association><!-- 配置xx相關的映射信息 --><association property="businessAliantJ1" column="apply_id" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessJ1"><id property="applyId" column="applyId" /><result property="remarks" column="j1Remarks"/><result property="status" column="j1Status"/></association><!-- 配置xx相關的映射信息 --><association property="businessM1" column="businessMobileRecycling.aliStatus" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessM1"><id property="applyId" column="applyId" /><result property="remarks" column="m1Remarks"/><result property="status" column="m1Status"/></association><!-- 配置xx相關的映射信息 --><association property="businessAliantM2" column="apply_id" javaType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessM2"><id property="applyId" column="applyId" /><result property="remarks" column="m2Remarks"/><result property="status" column="m2Status"/></association><!-- 配置xx相關的信息 --><!--collection用于指定集合類型的映射.property指定對應的集合名稱.ofType指定集合中存放的數(shù)據(jù)的類型 --><collection property="businessJ1StoreList" ofType="com.xxx.xxxx.xxx.xxx.xxx.entity.ApplyCompanyBusinessJ1Store"><!-- id和result指定了需要配置的列和屬性名和映射 --><result property="applyId" column="applyId" /><result property="jxName" column="j1Name"/><result property="status" column="j1StoreStatus"/></collection></resultMap>

從sql我們可以看出來,有一張process主表,其他的表都是以applyId作為主鍵關聯(lián)。其中store表是一對多的關系,其他都是一對一。如果我們想把這個企業(yè)的所有權限信息展示,就需要關聯(lián)這些所有的表。

需求是查詢這些權限的狀態(tài),所以不需要太多其他的字段。

association? 一對一。

property :

association? 中的 property 對應的是 resultMap實體中的屬性名稱,在上面就是這個ApplyCompanyBackResp。

ApplyCompanyBackResp 這個pojo中的屬性名稱,比如 businessA1 對應的 property 就是?businessA1。

column:

column 是一定要寫的 ,對應的是數(shù)據(jù)庫的關聯(lián)字段名稱,比如上邊的是apply_id 。

javaType:

返回的實體類型。

id:

數(shù)據(jù)庫表主鍵,我這邊是主鍵關聯(lián),所以id就是apply_id。property 是 實體屬性 ,column是 查詢的結果字段(別名)。比如上邊的各種status,是起的別名,這里要和下邊的 column 對應上。

針對于我這邊不需要查詢主鍵,可以不查。

result:

和id是一樣的, 是非主鍵的字段映射。property 是 實體屬性 ,column是 查詢的結果字段(別名)。

?

collection 一對多:

property :

association? 中的 property 對應的是 resultMap實體中的屬性名稱,在上面就是這個ApplyCompanyBackResp。

ApplyCompanyBackResp 這個pojo中的屬性名稱,比如 businessJ1StoreList對應的 property 就是?businessJ1StoreList。

ofType:

返回的實體類型。

id:

數(shù)據(jù)庫表主鍵,我這邊是主鍵關聯(lián),所以id就是apply_id。property 是 實體屬性 ,column是 查詢的結果字段(別名)。比如上邊的各種status,是起的別名,這里要和下邊的 column 對應上。

針對于我這邊不需要查詢主鍵,可以不查。

result:

和id是一樣的, 是非主鍵的字段映射。property 是 實體屬性 ,column是 查詢的結果字段(別名)。

?

3.? ? 總結

? ? mybatis的級聯(lián)查詢,如果是一對一,一定在 association標簽內(nèi)加 column屬性。這樣查詢出來的才能封裝到?結果對象 中。

? ? 如果是一對多,mysql查詢出來的數(shù)據(jù)結果就會是多條。比如上面的情況,查詢出來的結果如果是2條,這兩條數(shù)據(jù)collection前面的結果是一樣的,只是針對于collection中的屬性名稱的 結果 不一樣。類似下圖,應該j1Name,j1StoreStatus 這列是從別的表查詢出來的,其他列數(shù)據(jù)是相同的。

? ? 如果你想清晰一點你的話,也可以在?association 或者 collection 寫?select標簽,值是 select 語句。類似下圖

? ??

?

總結

以上是生活随笔為你收集整理的mybatis 一对一 一对多 级联查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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