开始封装的返回类:
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>