成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_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国内精品久久久久久久
国内精品国产成人| 日韩情涩欧美日韩视频| 欧美一区二区三区公司| 日本美女一区二区三区| 亚洲日韩视频| 久久精品夜色噜噜亚洲a∨| 国产一区欧美日韩| 欧美日韩一区成人| 美女脱光内衣内裤视频久久影院| 亚久久调教视频| 亚洲综合一区二区精品导航| 亚洲免费激情| 亚洲日本在线观看| 亚洲成色www久久网站| 中文字幕在线观看不卡| 国产精品二区影院| 国产精品国产三级国产aⅴ入口 | 日本vs亚洲vs韩国一区三区二区| 国产精品美女久久久浪潮软件| 18成人在线视频| 亚洲三级毛片| 亚洲综合色网站| 麻豆9191精品国产| 日韩电影在线一区二区三区| 日本大香伊一区二区三区| 美美哒免费高清在线观看视频一区二区 | 国产成人自拍在线| 欧美日韩国产首页在线观看| 国产一区二区在线电影| 欧美一级高清片| 波多野结衣在线一区| 久久女同精品一区二区| 欧美日韩在线一区二区三区| 亚洲视频在线观看一区| 亚洲国产网站| 亚洲一区二区三区视频在线| 久久香蕉精品| 久久99精品久久只有精品| 日韩一区二区免费在线电影| 97se亚洲国产综合自在线观| 国产精品不卡一区| 国产精品手机视频| 香蕉成人啪国产精品视频综合网 | 国产偷国产偷精品高清尤物| 国产精品v欧美精品∨日韩| 1区2区3区欧美| 久久久成人网| 国产乱理伦片在线观看夜一区| 精品88久久久久88久久久| 欧美午夜精彩| 香蕉乱码成人久久天堂爱免费| 欧美三级电影一区| 99在线精品视频| 国产精品理论在线观看| 国产精品一页| 国产综合久久久久久久久久久久| 337p日本欧洲亚洲大胆色噜噜| 亚洲特色特黄| 日韩精品每日更新| 日韩精品一区二区三区四区视频 | 亚洲视频福利| 午夜国产精品一区| 欧美一区二区视频在线观看2020| 91捆绑美女网站| 亚洲一区视频在线| 欧美高清激情brazzers| 你懂的一区二区| 亚洲欧美日韩系列| 欧美亚洲一区二区在线| av色综合久久天堂av综合| ...中文天堂在线一区| 色系网站成人免费| 成人国产在线观看| 依依成人精品视频| 欧美精品一级二级| 黄色成人在线网站| 麻豆91在线观看| 久久精品亚洲麻豆av一区二区 | 欧美视频在线观看一区二区| 成人毛片视频在线观看| 中文字幕日韩一区| 欧美午夜一区二区三区免费大片| 91小视频免费观看| 丝袜美腿高跟呻吟高潮一区| 欧美mv日韩mv国产网站| 国产伦精品一区二区三区视频黑人 | 欧美一激情一区二区三区| 136国产福利精品导航网址| 蜜桃av一区二区三区| 国产亚洲欧美日韩在线一区| 久久精品国产第一区二区三区最新章节 | 成人av网站在线观看免费| 亚洲狠狠丁香婷婷综合久久久| 精品视频在线视频| 欧美午夜精品久久久久免费视| 日本欧美大码aⅴ在线播放| 久久久www成人免费毛片麻豆| 久久精品99| 91捆绑美女网站| 免费黄网站欧美| 中文字幕一区二区三区精华液| 欧美女孩性生活视频| 亚洲精品自在在线观看| 成人性生交大合| 午夜精品福利久久久| 国产欧美久久久精品影院| 欧美日韩亚洲丝袜制服| 亚洲精品一区二| 成人激情免费视频| 免费在线观看一区二区三区| 国产精品灌醉下药二区| 欧美一区二区在线观看| 亚洲一区中文| 色综合夜色一区| 极品少妇xxxx偷拍精品少妇| 一区二区三区不卡视频| 久久久久久免费网| 欧美视频三区在线播放| 在线一区欧美| 91麻豆精品一区二区三区| 裸体一区二区三区| 亚洲欧美偷拍卡通变态| 精品欧美乱码久久久久久 | 成人免费视频在线观看| 日韩欧美亚洲国产另类| 色视频成人在线观看免| 亚洲日本国产| 91一区二区三区在线观看| 美国十次了思思久久精品导航| 亚洲人成精品久久久久久| 久久伊99综合婷婷久久伊| 欧美久久久久久久久中文字幕| 久久狠狠久久综合桃花| 亚洲视频福利| 99re热视频精品| 国产高清久久久| 美国十次综合导航| 婷婷亚洲久悠悠色悠在线播放| 亚洲欧美在线观看| 国产欧美日韩另类视频免费观看| 91精品国产福利| 欧美午夜精品久久久久久孕妇| 久久成人免费| 亚洲精品孕妇| 一区在线免费| 午夜精品视频| 91社区在线播放| 高清久久久久久| 国产美女精品人人做人人爽 | 中文字幕亚洲视频| 国产清纯白嫩初高生在线观看91| 日韩欧美高清一区| 69堂成人精品免费视频| 欧美午夜免费电影| 色婷婷国产精品久久包臀| 亚洲一区二区免费看| 亚洲欧洲日本国产| 精品动漫3d一区二区三区免费版| 女同性一区二区三区人了人一| eeuss鲁一区二区三区| 国产69精品久久久久777| 国产一区二区三区不卡在线观看| 免费观看一级欧美片| 日韩高清不卡在线| 偷窥国产亚洲免费视频| 亚洲图片自拍偷拍| 亚洲一区av在线| 亚洲国产一区二区视频| 亚洲国产你懂的| 午夜av一区二区三区| 首页亚洲欧美制服丝腿| 亚洲高清免费在线| 日韩中文字幕不卡| 奇米在线7777在线精品| 麻豆精品视频在线观看视频| 免费成人你懂的| 精品综合久久久久久8888| 黄网站免费久久| 国产精品99久久久久久久女警| 国产激情一区二区三区| 国产福利一区二区三区视频在线| 国产精品夜夜嗨| 成人国产在线观看| 91网站最新地址| 欧美片网站免费| 一区免费视频| 国产一区二区黄色| 久久久久久婷| 精品视频999| 日韩视频免费直播| 久久久高清一区二区三区| 国产精品午夜免费| 亚洲免费观看高清| 性做久久久久久久久| 麻豆91精品91久久久的内涵| 国产精品一区二区果冻传媒| 成人一区在线观看| 欧美视频成人| 国产精品久久九九| 欧美午夜理伦三级在线观看|