mybatis多表查询可以分解为多个一对查询
例如:一个用户可以有多个角色,一个角色可以有多个用户这里通过两次查询实现
报错:
说明:这里在两个写两个实体类的时候都重写了tostring方法,导致在运行过程中相互一直调用,形成了递归。一直没有释放,最后导致栈溢出。
实体类1以及重写后的tostring方法:
private Integer id;
private String username;
private Date birthday; // 使用java.sql.Date
private String sex;
private String address;
//加上另一张表的映射
private UserInfo userinfo;
//一个用户多个订单表
private List order;
//一个对应多个角色
private List roles;
//省略get跟set方法还有两个构造方法(无参跟满参)
@Test
public String toString() {
return "User{id = " + id + ", username = " + username + ", birthday = " + birthday + ", sex = " + sex + ", address = " + address + ", userinfo = " + userinfo + ", order = " + order +roles+ "}";
}
实体类2以及重写后的tostring方法:
private int roleId;
private String roleName;
private String roleDetail;
//角色找用户
private List Users;
//省略get/set方法以及两个构造方法(无参以及满参)
@Test
public String toString() {
return "Role{roleId = " + roleId + ", roleName = " + roleName + ", roleDetail = " + roleDetail + ", Users = " + Users + "}";
}
这里在接口的映射文件写的查询语句:
SELECT * FROM `role` INNER JOIN `user_role` ON `role`.role_id = `user_role`.role_id JOIN `user` ON `user_role`.user_id = user.id WHERe role.role_id = #{rId};
解决思路:只要重写两个tostring方法时,删掉一个对应的名,不构成递归,就不会栈溢出。



