MyBatis 多表联合查询及优化
序
这篇文章我打算来简单的谈谈 mybatis 的多表联合查询。起初是觉得挺简单的,没必要拿出来写,毕竟 mybatis 这东西现在是个开发的都会用,而且网上的文章也是一搜罗一大堆,根本就用不着我来重复。但是吧,就我前几天在做一个多表联合查询的时候,竟然出了很多意想不到的问题,而且这些问题的出现,并不是对 mybatis 不了解,而是在用的过程中会或多或少的忽略一些东西,导致提示各种错误。背景
老规矩,开始之前,还是要先说说这件事的背景。也就是最近几天,公司要做一个后台的管理平台,由于之前的一些限制,这次要做成单独的项目进行部署,因此就要重新考虑很多东西。索性这几天有时间,就做了一个小 Demo ,实现 mybatis 的多表联合查询的,由于之前用的是 Hibernate 做的联合查询,众所周知,Hibernate 是全自动的数据库持久层框架,它可以通过实体来映射数据库,通过设置一对多、多对一、一对一、多对多的关联来实现联合查询。正文
sql left join 多表连接下面就来说一下 mybatis 是通过什么来实现多表联合查询的。首先看一下表关系,如图:这里,我已经搭好了开发的环境,用到的是 SpringMVC + Spring + MyBatis,当然,为了简单期间,你可以不用搭前端的框架,只使用 Spring + MyBatis 就可以,外加 junit 测试即可。环境我就不带大家搭了,这里只说涉及到联合查询的操作。
设计好表之后,我用到了 mybatis 的自动生成工具 mybatis generator 生成的实体类、mapper 接口、以及 mapper xml 文件。由于是测试多表联合查询,因此需要自己稍加改动。
下面是 User 和 Role 的实体类代码:
User
[java] view plain copy <span >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 serialVersionUI
D = 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 : im(); } public String getPassword() { return password; } public void setPassword(String password) { this.password = password == null ? null : im(); } public List<Role> getRoles() { return roles; } public void setRoles(List<Role> roles) { les = roles; } @Override public boolean equals(Object that) { if (this == that) { return true; } if (that == null) { return false; } if (getClass() != Class()) { return false; } User other = (User) that; return (Id() == null ? Id() == null : Id().Id())) && (Username() == null ? Username() == null : Username().Username())) && (Password() == null ? Password() == null : Password().Password())); } @Override public int hashC
ode() { 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
[java] view plain copy <span >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 : im(); } public String getJsms() { return jsms; } public void setJsms(String jsms) { this.jsms =
jsms == null ? null : im(); } 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 void setGlbm(String glbm) { this.glbm = glbm == null ? null : im(); } public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid == null ? null : im(); } @Override public boolean equals(Object that) { if (this == that) { return true; } if (that == null) { return false; } if (getClass() != Class()) { return false; } Role other = (Role) that; return (Id() == null ? Id() == null : Id().Id())) && (Name() == null ? Name() == null : Name().Name())) && (Jsms() == null ? Jsms() == null : Jsms().Jsms())) && (Bz() == null ? Bz() == null : Bz().Bz())) && (Jlzt() == null ? Jlzt() == nu
ll : Jlzt().Jlzt())) && (Glbm() == null ? Glbm() == null : Glbm().Glbm())) && (Userid() == null ? Userid() == null : Userid().Userid())); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); result = prime * result + ((getName() == null) ? 0 : getName().hashCode()); result = prime * result + ((getJsms() == null) ? 0 : getJsms().hashCode()); result = prime * result + ((getBz() == null) ? 0 : getBz().hashCode()); result = prime * result + ((getJlzt() == null) ? 0 : getJlzt().hashCode()); result = prime * result + ((getGlbm() == null) ? 0 : getGlbm().hashCode()); result = prime * result + ((getUserid() == null) ? 0 : getUserid().hashCode()); return result; } }</span>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论