mybatis association会出现覆盖记录 导致只返回最后一条记录

开始封装的返回类: 

package com.mpn.dto;

import com.mpn.model.TUser;

public class TUserDto {
	/*
	 * 角色
	 */
	private TUser tUser;
    /** 角色名称*/
    private String roleName;


	public String getRoleName() {
		return roleName;
	}

	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}

	public TUser gettUser() {
		return tUser;
	}

	public void settUser(TUser tUser) {
		this.tUser = tUser;
	}

    
}

mapper类:

<resultMap id="BaseResultMapRolename" type="com.mpn.dto.TUserDto">
		<result column="RoleName" property="roleName" jdbcType="VARCHAR" />
		<association property="tUser" javaType="com.mpn.model.TUser">
			<id column="UserId" property="userId" jdbcType="VARCHAR" />
			<result column="UserName" property="userName" jdbcType="VARCHAR" />
			<result column="UserPwd" property="userPwd" jdbcType="VARCHAR" />
			<result column="UserPhone" property="userPhone" jdbcType="VARCHAR" />
			<result column="UserWeChat" property="userWeChat" jdbcType="VARCHAR" />
			<result column="UserEmail" property="userEmail" jdbcType="VARCHAR" />
			<result column="UserRealName" property="userRealName" jdbcType="VARCHAR" />
			<result column="UserRold" property="userRold" jdbcType="VARCHAR" />
			<result column="UserIsEnabled" property="userIsEnabled" jdbcType="VARCHAR" />
			<result column="UserRemark" property="userRemark" jdbcType="VARCHAR" />
			<result column="UserCreateTime" property="userCreateTime"  javaType="java.sql.Date" jdbcType="DATE" />
			<result column="UserProvince" property="userProvince" jdbcType="VARCHAR" />
			<result column="UserCity" property="userCity" jdbcType="VARCHAR" />
			<result column="UserCounty" property="userCounty" jdbcType="VARCHAR" />
			<result column="UserTown" property="userTown" jdbcType="VARCHAR" />
			<result column="UserVillage" property="userVillage" jdbcType="VARCHAR" />
		</association>
	</resultMap>


<select id="searchByName" parameterType="com.mpn.model.TUser"  
 resultMap="BaseResultMapRolename">
		Select u.*,r.RoleName 
		From t_user u 
		Left Join t_role r On u.UserRold = r.RoleId
		Where u.UserIsEnabled = 1
		<if test="userName != null">
			and u.username like '%'#{userName,jdbcType=VARCHAR}'%'
		</if>
	</select>

以上代码导致的结果是查询出来的总是最后一条数据,类似后面数据覆盖了之前数据的现象。

发现问题的关键在于resultMap中如果不定义类似主键之类的能够区分每一条结果集的字段的话,会引起后面一条数据覆盖前面一条数据的现象。

最终将resultMap中添加id,并相应在bean中添加该字段,代码如下,问题解决。

package com.mpn.dto;

import com.mpn.model.TUser;

public class TUserDto {
	//防止覆盖添加 id
	private String userIds;
	/*
	 * 角色
	 */
	private TUser tUser;
    /** 角色名称*/
    private String roleName;


	public String getUserIds() {
		return userIds;
	}

	public void setUserIds(String userIds) {
		this.userIds = userIds;
	}

	public String getRoleName() {
		return roleName;
	}

	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}

	public TUser gettUser() {
		return tUser;
	}

	public void settUser(TUser tUser) {
		this.tUser = tUser;
	}

    
}
<resultMap id="BaseResultMapRolename" type="com.mpn.dto.TUserDto">
		<id column="UserId" property="userIds" jdbcType="VARCHAR" />
		<result column="RoleName" property="roleName" jdbcType="VARCHAR" />
		<association property="tUser" javaType="com.mpn.model.TUser">
			<id column="UserId" property="userId" jdbcType="VARCHAR" />
			<result column="UserName" property="userName" jdbcType="VARCHAR" />
			<result column="UserPwd" property="userPwd" jdbcType="VARCHAR" />
			<result column="UserPhone" property="userPhone" jdbcType="VARCHAR" />
			<result column="UserWeChat" property="userWeChat" jdbcType="VARCHAR" />
			<result column="UserEmail" property="userEmail" jdbcType="VARCHAR" />
			<result column="UserRealName" property="userRealName" jdbcType="VARCHAR" />
			<result column="UserRold" property="userRold" jdbcType="VARCHAR" />
			<result column="UserIsEnabled" property="userIsEnabled" jdbcType="VARCHAR" />
			<result column="UserRemark" property="userRemark" jdbcType="VARCHAR" />
			<result column="UserCreateTime" property="userCreateTime"  javaType="java.sql.Date" jdbcType="DATE" />
			<result column="UserProvince" property="userProvince" jdbcType="VARCHAR" />
			<result column="UserCity" property="userCity" jdbcType="VARCHAR" />
			<result column="UserCounty" property="userCounty" jdbcType="VARCHAR" />
			<result column="UserTown" property="userTown" jdbcType="VARCHAR" />
			<result column="UserVillage" property="userVillage" jdbcType="VARCHAR" />
		</association>
	</resultMap>


<select id="searchByName" parameterType="com.mpn.model.TUser" resultMap="BaseResultMapRolename">
		Select u.*,r.RoleName 
		From t_user u 
		Left Join t_role r On u.UserRold = r.RoleId
		Where u.UserIsEnabled = 1
		<if test="userName != null">
			and u.username like '%'#{userName,jdbcType=VARCHAR}'%'
		</if>
	</select>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值