正文
下面就来说一下 mybatis 是通过什么来实现多表联合查询的。首先看一下表关系,如图:
这里,我已经搭好了开发的环境,用到的是 SpringMVC + Spring + MyBatis,当然,为了简单期间,你可以不用搭前端的框架,只使用 Spring + MyBatis 就可以,外加 junit 测试即可。环境我就不带大家搭了,这里只说涉及到联合查询的操作。
设计好表之后,我用到了 mybatis 的自动生成工具 mybatis generator 生成的实体类、mapper 接口、以及 mapper xml 文件。由于是测试多表联合查询,因此需要自己稍加改动。
下面是 User 和 Role 的实体类代码:
User
- <span style="font-family:Comic Sans MS;font-size:12px;">package com.sica.domain;
- import java.io.Serializable;
- import java.util.List;
- public class User implements Serializable {
- private String id;
- private String username;
- private String password;
- private List<Role> roles;
- private static final long serialVersionUID = 1L;
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id == null ? null : id.trim();
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username == null ? null : username.trim();
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password == null ? null : password.trim();
- }
- public List<Role> getRoles() {
- return roles;
- }
- public void setRoles(List<Role> roles) {
- this.roles = roles;
- }
- @Override
- public boolean equals(Object that) {
- if (this == that) {
- return true;
- }
- if (that == null) {
- return false;
- }
- if (getClass() != that.getClass()) {
- return false;
- }
- User other = (User) that;
- return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
- && (this.getUsername() == null ? other.getUsername() == null : this.getUsername().equals(other.getUsername()))
- && (this.getPassword() == null ? other.getPassword() == null : this.getPassword().equals(other.getPassword()));
- }
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
- result = prime * result + ((getUsername() == null) ? 0 : getUsername().hashCode());
- result = prime * result + ((getPassword() == null) ? 0 : getPassword().hashCode());
- return result;
- }
- }</span>
Role
- <span style="font-family:Comic Sans MS;font-size:12px;">package com.sica.domain;
- import java.io.Serializable;
- public class Role implements Serializable {
- private String id;
- private String name;
- private String jsms;
- private String bz;
- private Integer jlzt;
- private String glbm;
- private String userid;
- private static final long serialVersionUID = 1L;
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id == null ? null : id.trim();
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name == null ? null : name.trim();
- }
- public String getJsms() {
- return jsms;
- }
- public void setJsms(String jsms) {
- this.jsms = jsms == null ? null : jsms.trim();
- }
- public String getBz() {
- return bz;
- }
- public void setBz(String bz) {
- this.bz = bz == null ? null : bz.trim();
- }
- public Integer getJlzt() {
- return jlzt;
- }
- public void setJlzt(Integer jlzt) {
- this.jlzt = jlzt;
- }
- public String getGlbm() {
- return glbm;
- }
- public