在进行项目开发时,多表嵌套查询是非常多的,今天我们就来讲解下mybatis的多表查询使用.
一、数据库表准备,本篇博客使用了三张表(t_group(组信息)、t_person(人员信息)、t_user(人员对应的用户信息))
t_group表结构及测试数据
t_person表结构及测试数据
t_user表结构及测试数据
二、对应的表的实体类
第一种情况:人员与之对应用户是1:1关系
1)Group.java
public class Group { private int id; private String groupName; private String description; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getGroupName() { return groupName; } public void setGroupName(String groupName) { this.groupName = groupName; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
Person.java
public class Person { private int id; private String name; private String address; private String telphone; private String email; private int gid; private User user; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getTelphone() { return telphone; } public void setTelphone(String telphone) { this.telphone = telphone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getGid() { return gid; } public void setGid(int gid) { this.gid = gid; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
User.java
public class User { private int id; private String userName; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
2)新建sql映射文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zlt.mybatis.model.Group"> <!-- 1:1查询人员与之对应的用户信息 select p.id ,p.name,p.telphone,p.address,p.email,p.gid, u.id uid,u.user_name,u.password, u.pid from t_person p left join t_user u on u.pid = p.id where p.id = 1 --> <select id="findPersonByPID" parameterType="int" resultMap="PersonAndUser"> select p.id,p.name,p.telphone,p.address,p.email,p.gid, u.id uid,u.user_name,u.password, u.pid from t_person p left join t_user u on u.pid = p.id where p.id = #{id} </select> <!-- 第一种写法 --> <resultMap type="com.zlt.mybatis.model.Person" id="PersonAndUser"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="telphone" column="telphone" /> <result property="address" column="address"/> <result property="email" column="email"/> <result property="gid" column="gid"/> <association property="user" javaType="com.zlt.mybatis.model.User"> <id property="id" column="id"/> <result property="userName" column="user_name"/> <result property="password" column="password"/> </association> </resultMap> <!-- 第二种写法--> <!-- <resultMap type="com.zlt.mybatis.model.Person" id="person"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="telphone" column="telphone" /> <result property="address" column="address"/> <result property="email" column="email"/> <result property="gid" column="gid"/> </resultMap> <resultMap type="com.zlt.mybatis.model.Person" id="PersonAndUser" extends="person"> <association property="user" javaType="com.zlt.mybatis.model.User"> <id property="id" column="id"/> <result property="userName" column="user_name"/> <result property="password" column="password"/> </association> </resultMap> --> </mapper>
3)在 mybatis配置文件中注册sql映射文件
<mappers> <mapper resource="com/zlt/mybatis/mapping/GroupPersonUserMapper.xml" /> </mappers>
4)单元测试
public void testPersonAndUserByPID(){ SqlSession session = null; try{ session = sqlSessionFactory.openSession(); String statement = "com.zlt.mybatis.model.Group.findPersonByPID"; Person person = session.selectOne(statement, 3); if(null != person) { StringBuffer sb = new StringBuffer(); sb.append("id:" + person.getId() + "\t") .append("name:" + person.getName() +"\t") .append("telphone:" + person.getTelphone() +"\t") .append("email:" + person.getEmail() + "\t") .append("gid:" + person.getGid() + "\t"); User user = person.getUser(); sb.append("id:" + user.getId() + "\t") .append("userName:" + user.getUserName() + "\t") .append("password:" + user.getPassword() + "\t"); System.out.println(sb.toString()); } }finally{ if(null != session) session.close(); } }
5)运行结果
id:3 name:王二 telphone:10001 email:wanger@163.com gid:6 id:3 userName:wanger password:123456
注:这是从人员的角度去维护用户信息,反之也可以从用户的角度维护人员信息
相关推荐
主要介绍了Mybatis基于注解实现多表查询功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
mybatis一对多的查询方法详解! mybatis一对多的查询方法详解! mybatis一对多的查询方法详解! mybatis一对多的查询方法详解!
springboot整合mybatis-plus实现多表分页查询,assocication和collection一对一,一对多关联。简单易懂,容易上手!
springboot和mybatis整合(单多表),以注册登录为案例,并且根据文章查询作者关联
Mybatis框架(多表查询典型案例)
MyBatis Plus 的多表联接、分页查询实现方法 http://localhost/common/getAllQuestionByPage/1/10 多表关联、分页查询接口 http://localhost/common/getAllQuestionWithStudentByPage/1/10 多表关联、分页带参数查询...
主要介绍了Java的MyBatis框架中实现多表连接查询和查询结果分页,借助MyBatis框架中带有的动态SQL查询功能可以比普通SQL查询做到更多,需要的朋友可以参考下
mybatis多表查询.zip
mybatis之多对多
文档中主要说明:(1)多表联合查询步骤,快捷便利;(2)数据批量插入,以及相关的案例,节省运行资源。
MyBatis的学习代码MyBatis的学习代码MyBatis的学习代码MyBatis的学习代码MyBatis的学习代码MyBatis的学习代码MyBatis的学习代码MyBatis的学习代码MyBatis的学习代码MyBatis的学习代码MyBatis的学习代码MyBatis的学习...
Mybatis多参数查询与列表查询不同方式实现,效果看博文 http://blog.csdn.net/evankaka/article/details/45671473
mybatis学习
mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...
主要介绍了MyBatis-Plus多表联合查询并且分页(3表联合),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
MyBatis - CRUD + 多表联合查询 一个简单的demo
支持连表查询的mybatis-plus,mybatis-plus风格的连表操作提供 wrapper.leftJoin() wrapper.rightJoin()等操作
该文件为我的博客“Mybatis注解方式实现一对一,一对多的关联查询”(链接:https://blog.csdn.net/weixin_44003141/article/details/85686694)的源代码,欢迎下载查看。
主要介绍了Spring boot2基于Mybatis实现多表关联查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下