接着上一篇博客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,实现多表分页查询。MyBatis-Plus是一个强大的MyBatis扩展,简化了对数据库的操作,包括CRUD操作以及复杂的关联查询。它提供了丰富的API,使得开发...
4. ** resultMap**:在处理复杂查询时,MyBatis的`<resultMap>`元素可以定义字段与对象属性的映射规则,尤其在涉及多对多关系时,`resultMap`能够帮助我们处理关联表的数据。 5. **一对一(OneToOne)和一对多...
在Mybatis框架中,一对多关联查询是一种常见的数据操作,用于获取一个实体对象与其关联的多个子对象的数据。本文将详细解析两种实现Mybatis一对多关联查询的方法,并结合提供的文件来阐述其实现过程。 首先,我们来...
在MyBatis中,我们可以通过配置XML映射文件或者注解来实现这种映射,以便在查询主表时,能够自动加载与之关联的从表数据。 二、XML配置方式的一对多映射 1. 主表实体类:定义主表对应的Java类,通常包含一个集合...
本示例将探讨如何在Spring环境中实现MyBatis的关联查询,包括一对多、一对一和多对多关系的处理。理解这些关联关系对于构建复杂的业务逻辑至关重要。 首先,我们需要配置Spring与MyBatis的整合。这通常涉及以下几个...
SpringBoot 中 MyBatis 表关联映射关系(一对多嵌套:结果方式) 在 SpringBoot 中,MyBatis 是一个非常流行的持久层框架,它提供了强大的持久化功能,能够将 Java 对象与数据库表进行映射。在实际开发中,我们经常...
在MyBatis中,关联映射是处理对象关系映射(ORM)的重要部分,用于描述实体类之间的关联关系,如一对一(OneToOne)、一对多(OneToMany)和多对多(ManyToMany)。下面我们将深入探讨这些关联映射的实现和原理。 ...
多对多查询通常涉及多个表和中间表,因此配置较为复杂,需要在两个实体的映射文件中分别定义`<association>`或`<collection>`元素,以及中间表的映射。 ### MySQL数据库的配合 MySQL作为常用的数据库系统,与...
在这个名为"MyBatis_关系映射之一对多-src.zip"的压缩包中,我们很显然会探讨MyBatis中的一对多关系映射这一核心概念。 在数据库设计中,一对多关系是常见的实体关系类型,意味着一个父表(或父实体)可以与多个子...
2. **一对多关联查询**:对于一个父表对应多个子表的情况,使用@OneToMany注解和标签。在查询父表时,MyBatis会自动加载与之关联的所有子表数据。 3. **多对多关联查询**:多对多关系比较复杂,通常需要一个中间表...
1. OneToMany:一对多关联映射,通常用于父表引用子表的情况。 2. ManyToOne:多对一关联映射,子表引用父表的情况。 3. OneToOne:一对一关联映射,两个表中的记录一一对应。 4. resultMap:自定义复杂的结果映射,...
本篇主要探讨的是MyBatis中的高级映射之一——一对多查询。在数据库关系模型中,一对多关系是常见的关联类型,例如一个学生可以对应多个课程,一个部门可以有多个员工等。MyBatis提供了一对多映射功能,使得在Java...
一对多(OneToMany)范例则涉及一个实体类对应多个其他实体类的情况,如一个用户可以有多个订单。在MyBatis中,这需要使用`association`和`collection`标签来配置映射。在实际应用中,你可能会遇到懒加载和急加载的...
Mybatis关联映射是数据库操作中的一个重要概念,它允许我们在SQL查询中处理一对多、多对一、多对多等复杂关系。在这个"Mybatis关联映射Demo"中,我们将深入探讨如何在Mybatis框架中实现这些关系映射,以便更好地理解...
5. **注解配置**: Mybatis也支持使用注解来配置关联关系,如`@OneToOne`、`@OneToMany`和`@ManyToMany`,这使得代码更简洁,但功能和XML配置基本一致。 6. **结果映射(Result Map)**: 结果映射是Mybatis处理关联...
3. 多表关联:MP提供了多表关联查询的方法,如OneToMany、ManyToOne、OneToMany和ManyToMany。 4. 批量操作:通过batchInsert、batchUpdate等方法,可以一次性处理大量数据,提高性能。 5. 插件机制:MP允许自定义...
该项目可以帮助开发者深入理解如何在实际项目中使用MyBatis实现一对一和一对多查询,同时也能学习到如何在Java中处理关联关系,提高数据库操作的效率和灵活性。通过注解和XML配置的混合使用,开发者可以根据项目的...
在MyBatis中,一对多和多对一的关系映射是数据库设计中常见的实体关系,它们在实际项目中被广泛运用。MyBatis通过映射配置文件或注解方式,帮助开发者实现这些复杂的关联查询。下面我们将详细探讨这两个概念以及如何...
本篇主要围绕三个章节展开:SQL99中的连接查询、Hibernate的多表开发以及MyBatis的一对一映射。 首先,我们回顾SQL99中的连接查询,这是数据查询的基础。连接查询主要有三种类型: 1. 内连接(Inner Join):返回...
在本教程例子中,我们将深入探讨Mybatis的核心概念,并以"OneToMany"关系为例,展示如何在实际项目中处理一对多关联映射。 首先,理解Mybatis的基本架构是关键。Mybatis包含了一个SqlSessionFactory,用于创建...