配置如下:
<collection property="blogsRolePermission" ofType="com.self.blogs.entity.BlogsRolePermission">
<id column="auto_id" property="autoid" jdbcType="INTEGER" />
<result column="role_name" property="roleName" jdbcType="VARCHAR" />
<result column="permission_name" property="permissionName" jdbcType="VARCHAR" />
<result column="inputTime" property="inputtime" jdbcType="TIMESTAMP" />
<result column="updateTime" property="updatetime" jdbcType="TIMESTAMP" />
</collection>
由于两张表中的autoid的字段名称一样,系统在筛选时无法判断,所以只能读取第一条数据作为最后结果。切记,结果集有集合的,在mapper文件写column的时候不设为一样的,在具体的sql中修改列名字。 因此在这个地方把中的autoid改为auto_id别名
SQL语句修改如下:
SELECT a.*,b.autoid auto_id,b.permission_name from blogs_role A ,blogs_role_permission B where A.role_name=B.role_name
and A.role_name=#{roleName}
如果嫌配置麻烦,可以直接把返回值直接写成Map,但是不符合java面向对象的思想。
如果需要关联的表过多,配置过于麻烦,可以把需要查出来的字段放在一个对象中。
public class BlogsUserPermission implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String roleName;
private String roleRemarks;
private String permissionName;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getRoleRemarks() {
return roleRemarks;
}
public void setRoleRemarks(String roleRemarks) {
this.roleRemarks = roleRemarks;
}
public String getPermissionName() {
return permissionName;
}
public void setPermissionName(String permissionName) {
this.permissionName = permissionName;
}
@Override
public String toString() {
return "BlogsUserPermission [username=" + username + ", roleName=" + roleName + ", roleRemarks=" + roleRemarks
+ ", permissionName=" + permissionName + "]";
}
}
对应的xml如下:
<?xml version="1.0" encoding="UTF-8"?><select id="selectBlogsUserPermission" resultMap="BaseResultMap"
parameterType="com.self.blogs.entity.BlogsUserPermission">
select
A.username,A.role_name,b.role_remarks,c.permission_name
from
blogs_user_role A,blogs_role B,blogs_role_permission C
where A.role_name=B.role_name AND B.role_name=C.role_name and a.username=#{username}
</select>
这样操作一样可以实现对应的功能。