`

MyBatis学习5之多表查询OneToOne

阅读更多

在进行项目开发时,多表嵌套查询是非常多的,今天我们就来讲解下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	

 注:这是从人员的角度去维护用户信息,反之也可以从用户的角度维护人员信息

 

 

 

  • 大小: 23.9 KB
  • 大小: 40.3 KB
  • 大小: 18.7 KB
分享到:
评论

相关推荐

    springboot整合mybatis-plus实现多表分页查询

    在本文中,我们将深入探讨如何在SpringBoot项目中整合MyBatis-Plus,实现多表分页查询。MyBatis-Plus是一个强大的MyBatis扩展,简化了对数据库的操作,包括CRUD操作以及复杂的关联查询。它提供了丰富的API,使得开发...

    mybatis之多对多

    4. ** resultMap**:在处理复杂查询时,MyBatis的`&lt;resultMap&gt;`元素可以定义字段与对象属性的映射规则,尤其在涉及多对多关系时,`resultMap`能够帮助我们处理关联表的数据。 5. **一对一(OneToOne)和一对多...

    Spring整合MyBatis关联查询示例

    本示例将探讨如何在Spring环境中实现MyBatis的关联查询,包括一对多、一对一和多对多关系的处理。理解这些关联关系对于构建复杂的业务逻辑至关重要。 首先,我们需要配置Spring与MyBatis的整合。这通常涉及以下几个...

    mybatis关联映射源码

    在MyBatis中,关联映射是处理对象关系映射(ORM)的重要部分,用于描述实体类之间的关联关系,如一对一(OneToOne)、一对多(OneToMany)和多对多(ManyToMany)。下面我们将深入探讨这些关联映射的实现和原理。 ...

    Mybatis查询方式

    多对多查询通常涉及多个表和中间表,因此配置较为复杂,需要在两个实体的映射文件中分别定义`&lt;association&gt;`或`&lt;collection&gt;`元素,以及中间表的映射。 ### MySQL数据库的配合 MySQL作为常用的数据库系统,与...

    JavaEE多表查询源代码下载

    在查询父表时,MyBatis会自动加载与之关联的所有子表数据。 3. **多对多关联查询**:多对多关系比较复杂,通常需要一个中间表来维护两个主表的关联关系。使用@ManyToMany注解,并在MyBatis的映射文件中使用和结合来...

    mybatis20190102oneToOne

    该文件为我的博客“Mybatis注解方式实现一对一,一对多的关联查询”(链接:https://blog.csdn.net/weixin_44003141/article/details/85686694)的源代码,欢迎下载查看。

    mybatis5.rar

    在这个“mybatis5.rar”压缩包中,我们很可能会找到关于Mybatis一对一关联查询的相关示例。一对一关联查询是数据库中常见的关系映射类型,通常用于处理两个实体之间存在一对一关系的情况。 在Mybatis中,一对一关联...

    Mybatis知识点整理

    4. resultMap:自定义复杂的结果映射,处理多表关联查询。 六、Mybatis缓存 Mybatis提供了本地缓存和二级缓存两种机制。本地缓存是在SqlSession级别,同一个SqlSession内的多次查询可以复用之前的结果。二级缓存是...

    MyBatis常用项目范例

    读取(Read)数据是通过`select`标签实现,可以查询单个或多个记录。更新(Update)操作涉及到`update`标签,利用参数绑定更新指定记录。最后,删除(Delete)操作使用`delete`标签,根据条件删除对应的数据。 简单...

    Mybatis关联映射Demo

    Mybatis关联映射是数据库操作中的一个重要概念,它允许我们在SQL查询中处理一对多、多对一、多对多等复杂关系。在这个"Mybatis关联映射Demo"中,我们将深入探讨如何在Mybatis框架中实现这些关系映射,以便更好地理解...

    Spring Boot开发之Mybatis1对1查询

    本篇文章将深入探讨如何在Spring Boot项目中实现MyBatis的一对一(1:1)查询。一对一查询通常用于处理两个实体之间存在一对一关系的情况,比如一个用户对应一个唯一的地址信息。 首先,我们需要理解一对一关系的...

    Mybatis系列课程-Association

    5. **注解配置**: Mybatis也支持使用注解来配置关联关系,如`@OneToOne`、`@OneToMany`和`@ManyToMany`,这使得代码更简洁,但功能和XML配置基本一致。 6. **结果映射(Result Map)**: 结果映射是Mybatis处理关联...

    oneToMany-OneToOne-search.zip

    该项目可以帮助开发者深入理解如何在实际项目中使用MyBatis实现一对一和一对多查询,同时也能学习到如何在Java中处理关联关系,提高数据库操作的效率和灵活性。通过注解和XML配置的混合使用,开发者可以根据项目的...

    mybatis-day02培训内容1

    本篇主要围绕三个章节展开:SQL99中的连接查询、Hibernate的多表开发以及MyBatis的一对一映射。 首先,我们回顾SQL99中的连接查询,这是数据查询的基础。连接查询主要有三种类型: 1. 内连接(Inner Join):返回...

    mybatis_01.zip

    MyBatis支持多种关联映射,包括一对一(OneToOne),一对多(OneToMany)和多对多(ManyToMany)。以下是一些示例: 1. **一对一关联**:假设用户和地址是一对一关系,可以在`UserMapper.xml`中添加一个`select`...

    大型SpringMVC,Mybatis,Redis,Solr,Nginx,SSM分布式电商项目视频教程

    通过本教程的学习,开发者不仅可以掌握SpringMVC、Mybatis、Redis、Solr、Nginx等关键技术,还能够深入了解如何运用这些技术构建复杂的分布式电商系统。这对于提升个人技能和推动项目成功都具有重要意义。

    struts2+hibernate+spring多表操作示例

    4. **多表查询与操作**:在多表关联的场景下,常见的操作有联合查询、级联保存/更新和级联删除。例如,通过Hibernate的 Criteria 或 HQL 查询语言,可以方便地执行多表的JOIN操作。级联保存时,只需要保存父对象,...

    MyBatis的一对一关联映射

    在实际的项目开发中,数据库中的表与表之间经常存在各种关联关系,比如一对一(One-to-One)、一对多(One-to-Many)和多对多(Many-to-Many)关系。本篇文章将重点讲解如何在 MyBatis 中实现一对一的关联映射。 一...

    spring-boot-mybaties.zip

    5. 多对多关联映射 - 在两个关联实体类中,各自定义一个集合类型的属性,分别表示对方的实体集合,并添加`@ManyToMany`注解,指明关联的中间表和字段。 - 创建一个专门的中间实体类,表示多对多的关系,其中包含两...

Global site tag (gtag.js) - Google Analytics