开发者

Mybatis关联查询遇到的坑-无主键的关联数据去重问题

开发者 https://www.devze.com 2023-03-31 10:45 出处:网络 作者: p7+
目录先说下结论解决方法1解决方法2最后先说下结论 使用MyBATis的association关联查询时,例如 DeviceInfo 关联 RawData 查询数据,如果查询的SQL不包含DeviceInfo的主键时
目录
  • 先说下结论
    • 解决方法1
    • 解决方法2
  • 最后

    先说下结论

    使用MyBATis的association关联查询时,例如 DeviceInfo 关联 RawData 查询数据,如果查询的SQL不包含DeviceInfo的主键时

    Mybatis会将查询的结果集按照RawData数据进行去重,与你有没有使用group by无关。

    解决方法1

    如果你的查询不需要关联数据,重写resultMap,去掉association关联的部分,此时无论你有没有查询主键,返回的数据都是正确数据

    <resultMap id="DeviceTypeResultMap" type="DeviceInfo">
     <!-- 有没有查询主键,返回的数据都是正确数据 -->
     <!--<id column="device_id" property="deviceId" jdbcType="BIGINT"></id>-->
     <result column=http://www.devze.com"device_type_name" property="deviceTypeName" jdbcType="VARCHAR" />
     <result column="device_type_id" property="deviceTypeId" jdbcType="INTEGER" />
    </resultMap&g编程t;

    解决方法2

    如果你的查询不需要关联数据,但是懒的再写resultMap,那么SQL的查询字段一定要加上主表的主键

    例子:

    DevicepythonInfo

    publijavascriptc class DeviceInfo implements Serializable {
     private Long deviceId;
     private Integer deviceTypeId;
     private String deviceTypeName;
     private RawData rawData;
     ……
    }

    DeviceInfo 关联查询 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" />
      <re开发者_JAVA开发sult column="data_time" property="dataTime" jdbcType="TIMESTAMP" />
      <result column="battery_power" property="batteryPower"
       jdbcType="TINYINT" />
     </association>
    </resultMap>

    根据 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>

    最后

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号