电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:183日期: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 數據庫
相關文章:
主站蜘蛛池模板: 多功能真空滤油机_润滑油全自动滤油机_高效真空滤油机价格-重庆润华通驰 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 济南电缆桥架|山东桥架-济南航丰实业有限公司 | 扬尘监测_扬尘监测系统_带证扬尘监测设备 - 郑州港迪科技有限公司 | 盛源真空泵|空压机-浙江盛源空压机制造有限公司-【盛源官网】 | 衬四氟_衬氟储罐_四氟储罐-无锡市氟瑞特防腐科技有限公司 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 不锈钢螺丝,不锈钢螺栓,不锈钢标准件-江苏百德特种合金有限公司 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 无缝钢管-聊城无缝钢管-小口径无缝钢管-大口径无缝钢管 - 聊城宽达钢管有限公司 | 高考志愿规划师_高考规划师_高考培训师_高报师_升学规划师_高考志愿规划师培训认证机构「向阳生涯」 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 沈阳激光机-沈阳喷码机-沈阳光纤激光打标机-沈阳co2激光打标机 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 聚合氯化铝厂家-聚合氯化铝铁价格-河南洁康环保科技 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 振动筛-交叉筛-螺旋筛-滚轴筛-正弦筛-方形摇摆筛「新乡振动筛厂家」 | 户外健身路径_小区健身器材_室外健身器材厂家_价格-浩然体育 | 超声波焊接机,振动摩擦焊接机,激光塑料焊接机,超声波焊接模具工装-德召尼克(常州)焊接科技有限公司 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 黑田精工电磁阀-CAMMOZI气缸-ROSS电磁-上海茂硕机械设备有限公司 | 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 水轮机密封网 | 水轮机密封产品研发生产厂家 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 土壤检测仪器_行星式球磨仪_土壤团粒分析仪厂家_山东莱恩德智能科技有限公司 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 | 北京网站建设|北京网站开发|北京网站设计|高端做网站公司 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 煤矿人员精确定位系统_矿用无线通信系统_煤矿广播系统 | 北京普辉律师事务所官网_北京律师24小时免费咨询|法律咨询 | 申江储气罐厂家,储气罐批发价格,储气罐规格-上海申江压力容器有限公司(厂) | 浙江美尔凯特智能厨卫股份有限公司 | 航拍_专业的无人机航拍摄影门户社区网站_航拍网 |