mybatis一对多映射,只能查出一条数据的解决方法

配置如下:





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

这样操作一样可以实现对应的功能。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值