目录
- 先说下结论
- 解决方法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>
最后
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
精彩评论