Mybatis關聯(lián)查詢遇到的坑-無主鍵的關聯(lián)數(shù)據(jù)去重問題
先說下結論
使用Mybatis的association關聯(lián)查詢時,例如 DeviceInfo 關聯(lián) RawData 查詢數(shù)據(jù),如果查詢的SQL不包含DeviceInfo的主鍵時
Mybatis會將查詢的結果集按照RawData數(shù)據(jù)進行去重,與你有沒有使用group by無關。
解決方法1
如果你的查詢不需要關聯(lián)數(shù)據(jù),重寫resultMap,去掉association關聯(lián)的部分,此時無論你有沒有查詢主鍵,返回的數(shù)據(jù)都是正確數(shù)據(jù)
<resultMap id="DeviceTypeResultMap" type="DeviceInfo"> ?? ?<!-- 有沒有查詢主鍵,返回的數(shù)據(jù)都是正確數(shù)據(jù) --> ?? ?<!--<id column="device_id" property="deviceId" jdbcType="BIGINT"></id>--> ?? ?<result column="device_type_name" property="deviceTypeName" jdbcType="VARCHAR" /> ?? ?<result column="device_type_id" property="deviceTypeId" jdbcType="INTEGER" /> </resultMap>
解決方法2
如果你的查詢不需要關聯(lián)數(shù)據(jù),但是懶的再寫resultMap,那么SQL的查詢字段一定要加上主表的主鍵
例子:
DeviceInfo
public class DeviceInfo implements Serializable { ?? ?private Long deviceId; ?? ?private Integer deviceTypeId; ?? ?private String deviceTypeName; ?? ?private RawData rawData; ?? ?…… }
DeviceInfo 關聯(lián)查詢 RawData 返回的 resultMap
<resultMap id="BaseResultMap" ?? ?type="DeviceInfo"> ?? ?<id column="device_id" property="deviceId" jdbcType="BIGINT"></id> ?? ?<result column="mac" property="mac" jdbcType="VARCHAR" /> ?? ?<result column="device_type_id" property="deviceTypeId" jdbcType="BIGINT" /> ?? ?<association property="rawData" ?? ??? ?javaType="RawData"> ?? ??? ?<id column="device_id" property="deviceId" /> ?? ??? ?<result column="data_time" property="dataTime" jdbcType="TIMESTAMP" /> ?? ??? ?<result column="battery_power" property="batteryPower" ?? ??? ??? ?jdbcType="TINYINT" /> ?? ?</association> </resultMap>
根據(jù) device_type_id 分組查詢 device_type_id 和 device_type_name
<select id="getDeviceTypeList" parameterType="DeviceInfo" resultMap="BaseResultMap"> ?? ?select device_type_id,device_type_name FROM tb_device_info group by device_type_id order by null </select>
最后
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot對Druid配置SQL監(jiān)控功能失效問題及解決方法
這篇文章主要介紹了SpringBoot對Druid配置SQL監(jiān)控功能失效問題的解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05Java爬蟲實現(xiàn)爬取京東上的手機搜索頁面 HttpCliient+Jsoup
下面小編就為大家分享一篇Java爬蟲實現(xiàn)爬取京東上的手機搜索頁面 HttpCliient+Jsoup,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11獲取JPEGImageEncoder和JPEGCode這兩個類的方法
下面小編就為大家?guī)硪黄@取JPEGImageEncoder和JPEGCode這兩個類的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07Mybatis的SqlRunner執(zhí)行流程實現(xiàn)
MyBatis提供了一個用于操作數(shù)據(jù)庫的SqlRunner工具類,對JDBC做了很好的封裝,本文主要介紹了Mybatis的SqlRunner執(zhí)行流程實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-10-10一步步教你如何使用Java實現(xiàn)WebSocket
websocket協(xié)議是基于TCP的一種新的網(wǎng)絡協(xié)議,它實現(xiàn)了瀏覽器與服務器的全雙工通訊-允許服務器主動發(fā)起信息個客戶端,websocket是一種持久協(xié)議,http是非持久協(xié)議,下面這篇文章主要給大家介紹了關于如何使用Java實現(xiàn)WebSocket的相關資料,需要的朋友可以參考下2023-05-05SpringMVC中Model和ModelAndView的EL表達式取值方法
下面小編就為大家分享一篇SpringMVC中Model和ModelAndView的EL表達式取值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03Spring Boot中使用Spring-data-jpa實現(xiàn)數(shù)據(jù)庫增刪查改
本篇文章主要介紹了Spring Boot中使用Spring-data-jpa實現(xiàn)增刪查改,非常具有實用價值,需要的朋友可以參考下。2017-03-03