成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

解決mybatis三表連接查詢數據重復的問題

瀏覽:241日期:2023-10-20 13:39:15

此問題的產生,主要是數據庫的字段名一樣導致

三張表 DOCTOR JOB OBJECT

有問題的查詢語句和查詢結果是:

SELECT d.*,j.*,o.* from (select d.*,rownum r from DOCTOR d where rownum<=6) d join job j on d.job_id=j.id join object o on o.id=d.object_id where r>0

<img src='https://img-blog.csdn.net/20161020110037608?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center' alt='' />

注意 :查詢結果中有6列是一樣的id,name

修改為別名

SELECT d.*,j.name jobn,j.id jid,j.oid joid,o.id objid,o.name objn from (select d.*,rownum r from DOCTOR d where rownum<=6) d join job j on d.job_id=j.id join object o on o.id=d.object_id where r>0

<span style='color:#3366ff;'>新的查詢結果是: 注意看列名</span><span style='color:#3366ff;'></span><span style='color:#3366ff;'><img src='https://img-blog.csdn.net/20161020110703515?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center' alt='' /></span>

此時依然不能解決數據重復問題,還需要修改resultMap的column屬性名為別名

解決mybatis三表連接查詢數據重復的問題

至此問題全部解決!

補充:Mybatis連3表查詢數據resultMap結果映射

一、前言

MyBatis是基于“數據庫結構不可控”的思想建立的,也就是我們希望數據庫遵循第三范式或BCNF,但實際事與愿違,那么結果集映射就是MyBatis為我們提供這種理想與現實間轉換的手段了,而resultMap就是結果集映射的配置標簽了。

二、從SQL查詢結果到領域模型實體

在深入ResultMap標簽前,我們需要了解從SQL查詢結果集到JavaBean或POJO實體的過程。

1. 通過JDBC查詢得到ResultSet對象

2. 遍歷ResultSet對象并將每行數據暫存到HashMap實例中,以結果集的字段名或字段別名為鍵,以字段值為值

3. 根據ResultMap標簽的type屬性通過反射實例化領域模型

4. 根據ResultMap標簽的type屬性和id、result等標簽信息將HashMap中的鍵值對,填充到領域模型實例中并返回

三、ResultMap標簽

1. 屬性說明

id屬性 ,resultMap標簽的標識。

type屬性 ,返回值的全限定類名,或類型別名。

autoMapping屬性 ,值范圍true(默認值)|false, 設置是否啟動自動映射功能,自動映射功能就是自動查找與字段名小寫同名的屬性名,并調用setter方法。而設置為false后,則需要在`resultMap`內明確注明映射關系才會調用對應的setter方法。

2. 基本作用:建立SQL查詢結果字段與實體屬性的映射關系信息

示例1:通過setter構造領域模型

public class EStudent{ private long id; private String name; private int age; // getter,setter方法 /** * 必須提供一個無參數的構造函數 */ public EStudent(){}}

<select resultMap='getStudentRM'> SELECT ID, Name, Age FROM TStudent</select><resultMap type='EStudnet'> <id property='id' column='ID'/> <result property='studentName' column='Name'/> <result property='studentAge' column='Age'/></resultMap>

子元素說明:

id元素 ,用于設置主鍵字段與領域模型屬性的映射關系

result元素 ,用于設置普通字段與領域模型屬性的映射關系

示例2:通過構造函數構造領域模型

public class EStudent{ private long id; private String name; private int age; // getter方法 public EStudent(long id, String name, int age){ this.id = id; this.name = name; this.age = age; }}

<select resultMap='getStudentRM'> SELECT ID, Name, Age FROM TStudent</select><resultMap type='EStudnet'> <constructor> <idArg column='ID' javaType='_long'/> <arg column='Name' javaType='String'/> <arg column='Age' javaType='_int'/> </constructor></resultMap>

子元素說明:

constructor元素 ,指定使用指定參數列表的構造函數來實例化領域模型。注意:其子元素順序必須與參數列表順序對應

idArg子元素 ,標記該入參為主鍵

arg子元素 ,標記該入參為普通字段(主鍵使用該子元素設置也是可以的)

3. 一對一關系、一對多關系查詢這里不多說

注意:在采用嵌套結果的方式查詢一對一、一對多關系時,必須要通過resultMap下的id或result標簽來顯式設置屬性/字段映射關系,否則在查詢多條記錄時會僅僅返回最后一條記錄的情況。

4. 動態映射關系信息

通過 discriminator子元素 (鑒別器)可以實現動態映射關系信息的設置。具體示例如下:

public class EStudent{ private long id; private String name; private String juniorHighSchool; private String seniorHighSchool; private int during; // 在本校就讀時間 // getter,setter方法 /** * 必須提供一個無參數的構造函數 */ public EStudent(){}}

情景:查詢學生信息的seniorHighSchool信息,若就讀時間during字段值為4、5、6時,則以juniorHighSchool字段作所為seniorHighSchool信息。

<select resultMap='rm'> SELECT ID, Name, JuniorHighSchool, SeniorHighSchool, during FROM TStudent</select><resultMap type='EStudent'> // 若不加這句,則當將juniorHighSchool賦予給seniorHighSchool屬性時,juniorHighSchool屬性將為null <result column='juniorHighSchool' property='juniorHighSchool'/> <discriminator column='during' javaType='_int'> // 形式1:通過resultType設置動態映射信息 <case value='4' resultType='EStudent'> <result column='juniorHighSchool' property='seniorHighSchool'/> </case> // 形式2: 通過resultMap設置動態映射信息 <case value='5' resultMap='dynamicRM'/> <case value='6' resultMap='dynamicRM'/> </discriminator></resultMap><resultMap type='EStudent'> <result column='juniorHighSchool' property='seniorHighSchool'/></resultMap>

注意:上面關于 discriminator子元素 的 case元素 的 resultType屬性 和 resultMap元素 的 type屬性 ,均不是直指返回的領域模型類型,而是指定根據判斷條件后得到映射關系,可通過 id子元素 和 result子元素 重寫映射關系。

5. id元素,result元素,idArg元素,arg元素,discriminator元素的共同屬性

javaType屬性 :Java類的全限定名,或別名

jdbcType屬性 :JDBC類型, JDBC類型為CUD操作時列可能為空時進行處理

typeHandler屬性 :指定類型處理器的全限定類名或類型別名

column屬性 :指定SQL查詢結果的字段名或字段別名。將用于JDBC的 resultSet.getString(columnName)

四、總結

掌握上述內容,那么在寫一對一關系、一對多關系查詢時就更有把握了哦!

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Mybatis 數據庫
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
制服丝袜在线91| www.日韩在线| 91蜜桃婷婷狠狠久久综合9色| 欧美日韩在线观看一区二区| 五月激情六月综合| 亚洲一区二区在| 亚洲男人天堂一区| 欧美成人一品| 久久久久久久久免费| 日韩视频中午一区| 国产成人精品亚洲日本在线桃色| 欧美电影一区二区三区| 国产精品一区免费视频| 欧美日韩一区二区电影| 另类人妖一区二区av| 在线日韩av片| 久久精品国产**网站演员| 欧美三级日韩三级国产三级| 捆绑调教一区二区三区| 欧美日韩精品一区二区天天拍小说 | 国产色婷婷亚洲99精品小说| av男人天堂一区| 国产清纯美女被跳蛋高潮一区二区久久w | 婷婷亚洲久悠悠色悠在线播放| 亚洲一区二区三区涩| 亚洲免费av网站| 国产欧美高清| 肉肉av福利一精品导航| 色一情一乱一乱一91av| 久久99国产精品久久99果冻传媒| 69久久夜色精品国产69蝌蚪网| 国内精品久久久久影院薰衣草| 日韩一区二区影院| 99在线视频精品| 国产精品乱人伦| 国产九九精品| 日本不卡高清视频| 在线不卡a资源高清| 不卡av电影在线播放| 国产欧美日韩精品在线| 黄色av一区| 亚洲国产精品一区二区久久| 久久久久九九九| 韩国在线一区二区| 久久夜色精品国产欧美乱极品| 婷婷六月综合网| 久久av一区| 亚洲高清免费视频| 久久久99爱| 久久不见久久见免费视频7| 91精品婷婷国产综合久久竹菊| 国产.精品.日韩.另类.中文.在线.播放| 欧美sm极限捆绑bd| 黄色成人在线网址| 日韩精品福利网| 欧美日韩一区二区在线视频| 欧美日韩p片| 日韩伦理电影网| 久久久xxx| 国产精品亚洲第一区在线暖暖韩国 | 国产成人在线视频播放| 久久女同精品一区二区| 亚洲福利专区| 麻豆精品蜜桃视频网站| 久久久久久麻豆| 99伊人成综合| 久久99精品国产麻豆不卡| 亚洲精品一区二区三区四区高清| 伊人久久婷婷| 蜜桃一区二区三区四区| 久久久久久久久一| 国产免费成人| 国产a久久麻豆| 亚洲啪啪综合av一区二区三区| 欧美中文字幕一区二区三区 | 老司机午夜精品视频在线观看| 国产ts人妖一区二区| 中文字幕一区二区三区不卡 | 欧美三区不卡| 蜜桃精品在线观看| 精品成人一区二区三区四区| 国产亚洲二区| 国产v日产∨综合v精品视频| 日韩美女视频一区二区 | 国产高清精品网站| 自拍偷拍欧美激情| 欧美日韩久久久一区| 狠狠色伊人亚洲综合网站色| 蜜臀91精品一区二区三区| 国产亚洲美州欧州综合国| 久久久久.com| 99视频精品在线| 亚洲国产精品久久不卡毛片| 日韩欧美美女一区二区三区| 亚洲黄色成人久久久| 国产一区二区三区免费播放| 亚洲视频香蕉人妖| 欧美一区二视频| 一本一本a久久| 丁香婷婷综合网| 亚洲一二三四区| 精品国产一区二区在线观看| 香港久久久电影| 91丝袜美腿高跟国产极品老师 | 麻豆国产精品一区二区三区| 久久精品视频网| 欧美视频在线不卡| 亚洲高清精品中出| 成人黄色在线看| 日本欧美肥老太交大片| 国产精品美女久久久久久久久| 欧美日韩在线观看一区二区| 日韩视频一区二区三区在线播放免费观看| 国产一区二区在线电影| 亚洲女厕所小便bbb| 精品国产乱码久久久久久影片| 欧美一级二区| 国产一区再线| 成人一级视频在线观看| 日本亚洲三级在线| 日韩毛片视频在线看| 精品国产乱码久久| 欧美日韩中文字幕一区二区| 亚洲人成免费| 94-欧美-setu| 国产尤物一区二区| 天堂成人免费av电影一区| 国产精品初高中害羞小美女文| 日韩欧美电影一区| 欧美在线一二三四区| 国产精品一区视频| 激情久久综合| 99re这里都是精品| 国产乱人伦精品一区二区在线观看| 亚洲福利视频一区二区| 欧美激情自拍偷拍| 欧美一区二区三级| 欧美视频在线一区二区三区| 国产免费成人| 日韩一级精品| 黄色精品免费| 欧美成人蜜桃| av在线免费不卡| 高清国产一区二区| 九一久久久久久| 日韩影视精彩在线| 亚洲午夜一区二区三区| 亚洲视频图片小说| 国产精品高潮久久久久无| 久久人人爽人人爽| 日韩一区二区三区精品视频| 欧美三片在线视频观看 | 久久一区二区三区超碰国产精品| 在线欧美福利| 午夜视频久久久| 97精品久久久久中文字幕| 成人一区在线看| 国产不卡一区视频| 国产麻豆精品久久一二三| 捆绑调教美女网站视频一区| 日本网站在线观看一区二区三区| 亚洲线精品一区二区三区| 伊人色综合久久天天| 1024成人网| 国产精品对白交换视频 | 精品一区二区免费| 理论电影国产精品| 久久精品国产一区二区| 免费观看一级特黄欧美大片| 日韩精品免费视频人成| 丝袜美腿亚洲综合| 视频一区在线视频| 奇米影视一区二区三区小说| 免费一区二区视频| 久久精品噜噜噜成人av农村| 麻豆传媒一区二区三区| 久久精品二区亚洲w码| 蜜臀91精品一区二区三区| 另类综合日韩欧美亚洲| 久久精品av麻豆的观看方式| 经典三级在线一区| 国产在线精品一区二区| 国产乱色国产精品免费视频| 国产成人精品免费| 成人美女视频在线观看| 99精品国产视频| 欧美日韩国产欧| 好吊色欧美一区二区三区视频| 一区视频在线| 国产亚洲欧美一区二区| 久久久夜精品| 在线精品视频免费观看| 欧美性色黄大片手机版| 欧美日本国产一区| 日韩欧美亚洲一区二区| 国产午夜精品美女毛片视频| 国产精品高潮呻吟| 亚洲国产视频一区| 美女一区二区视频| 国产久卡久卡久卡久卡视频精品|