`

MyBatis学习5之多表查询 OneToMany

阅读更多

接着上一篇博客OnToOne继续探讨mybatis多表查询

OneToMany,在t_group表中一个组对应多个人员信息,根据一个组去查询该组下的所有人员信息

1、修改sql映射文件GroupPersonUserMapper.xml

         <select id="findGroupAndPersonByGID" resultMap="GroupAndPerson">
	 	select g.id,g.group_name,g.description, 	
		p.gid,p.id pid,p.name,p.telphone,p.address,p.email
		from t_group g left join t_person  p on g.id = p.gid
		where g.id = #{id}
	 </select>
	 <resultMap type="com.zlt.mybatis.model.Group" id="group">
		 <id property="id" column="id"/>
	 	 <result property="groupName" column="group_name"/>
	 	 <result property="description" column="description" />
	 </resultMap>
	 <resultMap type="com.zlt.mybatis.model.Group" id="GroupAndPerson" extends="group">
	 	<collection property="persons" column="gid" ofType="com.zlt.mybatis.model.Person">
	 		<id property="id" column="pid"/>
	 		<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"/>
		</collection>
	 </resultMap>

 2、单元测试用例

 

public void testOneToMany(){
		SqlSession session = null;
		try{
				session = sqlSessionFactory.openSession();
				String statement = "com.zlt.mybatis.model.Group.findGroupAndPersonByGID";
				//List<Group> groups = session.selectList(statement, 1);
				Group group = session.selectOne(statement, 1);
				if(null != group) {
						StringBuffer sb = new StringBuffer();
						sb.append("id:" + group.getId() + "\t")
						  .append("groupName:" + group.getGroupName() +"\t")
						  .append("description:" + group.getDescription() +"\t");
						String len = sb.toString(); 
						List<Person> persons = group.getPersons();
						for (Person person : persons) {
							sb.append("id:" + person.getId() + "\t")
							.append("name:" + person.getName() + "\t")
							.append("telphone:" + person.getTelphone() + "\t")
							.append("address:" +person.getAddress() + "\t")
							.append("email:" + person.getEmail() + "\t")
							.append("gid:" + person.getGid() + "\t");
							System.out.println(sb.toString());
							sb.delete(len.length(), sb.length());
						}
				}
			}finally{
			if(null != session) session.close();
		}
	}

 3、测试结果

 

 

id:1	groupName:Java开发部	description:Java项目组开发	id:1	name:张三	telphone:10086	address:浦东新区广兰路	email:zhangsan@163.com	gid:1	
id:1	groupName:Java开发部	description:Java项目组开发	id:2	name:李四	telphone:10000	address:浦东新区广兰路	email:lisi@163.com	gid:1	

 ManyToOne

 

1、修改SQL映射文件

 

<select id="findGroupAndPersonByGID2" resultMap="GroupAndPerson2">
	 	select p.id id,p.name,p.telphone,p.address,p.email,p.gid,
	 	g.id gid,g.group_name,g.description	
		from t_person p left join t_group  g on p.gid = g.id
		where p.id = #{id}
	 </select>
	 <resultMap type="com.zlt.mybatis.model.Person" id="GroupAndPerson2">
 		<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="group" javaType="com.zlt.mybatis.model.Group">
	 		<id property="id" column="gid"/>
	 		<result property="groupName" column="group_name"/>
	 		<result property="description" column="description" />
		</association>
	 </resultMap> 

 2、单元测试

 

 

public void testManyToOne(){
		SqlSession session = null;
		try{
				session = sqlSessionFactory.openSession();
				String statement = "com.zlt.mybatis.model.Group.findGroupAndPersonByGID2";
				Person person = session.selectOne(statement, 2);
				if(null != person) {
						StringBuffer sb = new StringBuffer();
							sb.append("id:" + person.getId() + "\t")
							.append("name:" + person.getName() + "\t")
							.append("telphone:" + person.getTelphone() + "\t")
							.append("address:" +person.getAddress() + "\t")
							.append("email:" + person.getEmail() + "\t")
							.append("gid:" + person.getGid() + "\t");
							Group group = person.getGroup();
							sb.append("group-id:" + group.getId() + "\t")
							  .append("groupName:" + group.getGroupName() +"\t")
							  .append("description:" + group.getDescription() +"\t");
						
							System.out.println(sb.toString());
				}
			}finally{
			if(null != session) session.close();
		}
	}

 3、测试结果

 

 

id:2	name:李四	telphone:10000	address:浦东新区广兰路	email:lisi@163.com	gid:1	group-id:1	groupName:Java开发部	description:Java项目组开发	

 

 

分享到:
评论

相关推荐

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

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

    mybatis之多对多

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

    Mybatis 一对多关联查询(两种方法)

    在Mybatis框架中,一对多关联查询是一种常见的数据操作,用于获取一个实体对象与其关联的多个子对象的数据。本文将详细解析两种实现Mybatis一对多关联查询的方法,并结合提供的文件来阐述其实现过程。 首先,我们来...

    MyBatis一对多映射

    在MyBatis中,我们可以通过配置XML映射文件或者注解来实现这种映射,以便在查询主表时,能够自动加载与之关联的从表数据。 二、XML配置方式的一对多映射 1. 主表实体类:定义主表对应的Java类,通常包含一个集合...

    Spring整合MyBatis关联查询示例

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

    SpringBoot中mybatis表关联映射关系(一对多嵌套:结果方式)

    SpringBoot 中 MyBatis 表关联映射关系(一对多嵌套:结果方式) 在 SpringBoot 中,MyBatis 是一个非常流行的持久层框架,它提供了强大的持久化功能,能够将 Java 对象与数据库表进行映射。在实际开发中,我们经常...

    mybatis关联映射源码

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

    Mybatis查询方式

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

    MyBatis_关系映射之一对多-src.zip

    在这个名为"MyBatis_关系映射之一对多-src.zip"的压缩包中,我们很显然会探讨MyBatis中的一对多关系映射这一核心概念。 在数据库设计中,一对多关系是常见的实体关系类型,意味着一个父表(或父实体)可以与多个子...

    JavaEE多表查询源代码下载

    2. **一对多关联查询**:对于一个父表对应多个子表的情况,使用@OneToMany注解和标签。在查询父表时,MyBatis会自动加载与之关联的所有子表数据。 3. **多对多关联查询**:多对多关系比较复杂,通常需要一个中间表...

    Mybatis知识点整理

    1. OneToMany:一对多关联映射,通常用于父表引用子表的情况。 2. ManyToOne:多对一关联映射,子表引用父表的情况。 3. OneToOne:一对一关联映射,两个表中的记录一一对应。 4. resultMap:自定义复杂的结果映射,...

    MyBatis高级映射(一对多查询)

    本篇主要探讨的是MyBatis中的高级映射之一——一对多查询。在数据库关系模型中,一对多关系是常见的关联类型,例如一个学生可以对应多个课程,一个部门可以有多个员工等。MyBatis提供了一对多映射功能,使得在Java...

    MyBatis常用项目范例

    一对多(OneToMany)范例则涉及一个实体类对应多个其他实体类的情况,如一个用户可以有多个订单。在MyBatis中,这需要使用`association`和`collection`标签来配置映射。在实际应用中,你可能会遇到懒加载和急加载的...

    Mybatis关联映射Demo

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

    Mybatis系列课程-Association

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

    Mybatis-Plus实战

    3. 多表关联:MP提供了多表关联查询的方法,如OneToMany、ManyToOne、OneToMany和ManyToMany。 4. 批量操作:通过batchInsert、batchUpdate等方法,可以一次性处理大量数据,提高性能。 5. 插件机制:MP允许自定义...

    oneToMany-OneToOne-search.zip

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

    mybatis一对多多对一

    在MyBatis中,一对多和多对一的关系映射是数据库设计中常见的实体关系,它们在实际项目中被广泛运用。MyBatis通过映射配置文件或注解方式,帮助开发者实现这些复杂的关联查询。下面我们将详细探讨这两个概念以及如何...

    mybatis-day02培训内容1

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

    Mybatis的教程例子

    在本教程例子中,我们将深入探讨Mybatis的核心概念,并以"OneToMany"关系为例,展示如何在实际项目中处理一对多关联映射。 首先,理解Mybatis的基本架构是关键。Mybatis包含了一个SqlSessionFactory,用于创建...

Global site tag (gtag.js) - Google Analytics