`

一对多关联关系

 
阅读更多

一对多关联关系

 

<?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.hous.day5.classMapper">
	<!--
	方式一: 嵌套结果: 使用嵌套结果映射来处理重复的联合结果的子集
	SELECT * FROM class,student WHERE class.c_id=student.class_id AND class.c_id=#{id}
	SELECT * FROM class,student,teacher WHERE class.c_id=student.class_id AND class.teacher_id=teacher.t_id  AND class.c_id=1
	注意:映射关系要按照顺序,和javabean的属性对应
	-->
	<select id="getClass" parameterType="int" resultMap="classResultMap">
		SELECT * FROM class,student,teacher WHERE class.c_id=student.class_id 
			AND class.teacher_id=teacher.t_id  AND class.c_id=#{id}
	</select>
	<resultMap type="com.hous.day5.Classes" id="classResultMap">
		<id property="id" column="c_id"/>
		<result property="name" column="c_name"/>
		<association property="teacher" javaType="com.hous.day5.Teacher">
			<id property="id" column="t_id"/>
			<result property="name" column="t_name"/>
		</association>
		<collection property="students" ofType="com.hous.day5.Student">
			<id property="id" column="s_id"/>
			<result property="name" column="s_name"/>
		</collection>
	</resultMap>
	
	<!--
	方式二:嵌套查询:通过执行另外一个 SQL 映射语句来返回预期的复杂类型
	SELECT * FROM class WHERE c_id=1;
	SELECT * FROM teacher WHERE t_id=1 //1 是上一个查询得到的 teacher_id 的值
	SELECT * FROM student WHERE class_id=1 //1 是第一个查询得到的 c_id 字段的值
	-->
	<select id="getClass2" parameterType="int" resultMap="classResultMap2">
		SELECT * FROM class WHERE c_id=#{id}
	</select>
	<select id="getTeacher" parameterType="int" resultType="com.hous.day5.Teacher">
		SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id}
	</select>
	<select id="getStudents" parameterType="int" resultType="com.hous.day5.Student">
		SELECT s_id id, s_name name FROM student WHERE class_id=1
	</select>
	<resultMap type="com.hous.day5.Classes" id="classResultMap2">
		<id property="id" column="c_id"/>
		<result property="name" column="c_name"/>
		<association property="teacher" column="teacher_id" select="getTeacher">
			<id property="id" column="t_id"/>
			<result property="name" column="t_name"/>
		</association>
		<collection property="students" column="c_id" select="getStudents">
			<id property="id" column="s_id"/>
			<result property="name" column="s_name"/>
		</collection>
	</resultMap>
	
</mapper>

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
		<mapper resource="com/hous/day5/classMapper.xml" />
	</mappers>
</configuration>

 

package com.hous.day5;

import static org.junit.Assert.*;

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

public class MyTest {
	
	private SqlSessionFactory factory = null;
	
	@Before
	public void setUp() throws Exception {
		String resource = "day5/config.xml";
		InputStream config = MyTest.class.getClassLoader().getResourceAsStream(resource);
		factory = new SqlSessionFactoryBuilder().build(config);
	}

	@Test
	public void testGetClass() {
		SqlSession session = factory.openSession();
		String statement = "com.hous.day5.classMapper.getClass2";
		Classes classes = session.selectOne(statement, 1);
		session.commit();
		session.close();
		System.out.println("查询结果:" + classes);
	}

}

 

package com.hous.day5;

import java.util.List;

public class Classes {
	private int id;
	private String name;
	private Teacher teacher;
	private List<Student> students;

	public Classes() {
		super();
	}

	public Classes(int id, String name, Teacher teacher) {
		super();
		this.id = id;
		this.name = name;
		this.teacher = teacher;
	}

	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 Teacher getTeacher() {
		return teacher;
	}

	public void setTeacher(Teacher teacher) {
		this.teacher = teacher;
	}
	
	public List<Student> getStudents() {
		return students;
	}

	public void setStudents(List<Student> students) {
		this.students = students;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Classes [id=" + id + ", name=" + name + ", teacher=" + teacher + ", students=" + students + "]";
	}

}

 

package com.hous.day5;

public class Student {
	private int id;
	private String name;

	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;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + "]";
	}

}

 

package com.hous.day5;

public class Teacher {
	private int id;
	private String name;

	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;
	}

	@Override
	public String toString() {
		return "Teacher [id=" + id + ", name=" + name + "]";
	}

}

 

create table student(
	s_id int primary key auto_increment,
	s_name varchar(20),
	class_id int
);
insert into student(s_name, class_id) values('xs_A',1),('xs_B',1),('xs_C',1),('xs_D',2),('xs_E',2),('xs_F',2);

 

分享到:
评论

相关推荐

    Hibernate映射一对多关联关系

    ### Hibernate映射一对多关联关系 #### 知识点概览 - **概念解析**:一对多(One-to-Many)关联关系的概念及其在Hibernate中的实现方式。 - **域模型设计**:创建具有一个实体与多个实体关联的域模型。 - **关系...

    Hibernate一对多关联关系小demo

    本篇文章将深入探讨“Hibernate一对多关联关系”这一主题,并结合提供的"hibernateOneToMany"压缩包文件,展示如何实现一个简单的一对多关联关系的小型示例。 首先,我们需要理解Hibernate中的一对多关联关系。在...

    Hibernate part 8:一对多关联关系映射

    本篇文章主要探讨的是Hibernate中的一对多关联关系映射,这是在实际项目开发中非常常见的一种关系映射类型。通过理解并掌握一对多关联,开发者可以更高效地处理数据库中的复杂数据结构。 在数据库理论中,一对多...

    Mybatis一对多关联关系映射实现过程解析

    Mybatis的一对多关联关系映射实现过程解析 Mybatis是一款基于Java的持久层框架,它提供了对数据库的操作接口,包括数据的增删改查等操作。在实际开发中,我们经常会遇到一对多关联关系映射的问题,例如用户和订单...

    JPA_2_一对多双向关联关系

    在JPA中,一对多关联关系是常见的实体间关系类型,它表示一个实体可以与多个其他实体相关联。例如,一个学生可以有多个课程,一个部门可以有多名员工。在这个场景中,我们将深入探讨如何在JPA 2中实现一对多双向关联...

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

    在实际开发中,我们经常会遇到一对多关联关系的问题,例如,一个班级有多个学生,同时一个学生也只对应一个班级。在 MyBatis 中,我们可以使用 `&lt;collection&gt;` 元素来处理一对多关联关系。 在 `&lt;collection&gt;` 元素...

    hibernate外键实现一对一双向关联关系源码

    本主题将深入探讨如何使用Hibernate实现一对一双向关联关系,并通过源码解析这一过程。 一对一双向关联关系指的是两个实体类之间存在一对一的关系,且在各自的类中都可以直接访问对方。这种关联可以通过注解或XML...

    hibernate关联关系实例

    2. **一对多关联关系**: 一个实体可以与多个其他实体相关联,这通常在用户和订单、员工和项目等场景下出现。通过`@OneToMany`注解实现,可以设置fetch策略(EAGER/LAZY),排序方式(@OrderBy)和级联操作...

    hibernate关联关系2

    在这个项目中,我们将重点探讨Hibernate中的一对多关联关系,并结合MySQL数据库进行实践。 一、Hibernate一对多关联关系 在关系型数据库中,一对多关联是指一个表中的记录可以与另一个表中的多个记录相关联。例如,...

    能实现一对多关联的通用EXCEL导入功能

    在IT行业中,开发一个能实现一对多关联的通用EXCEL导入功能是一项常见的需求,尤其是在数据管理、数据分析或者系统集成的场景下。这个功能允许用户通过上传Excel文件来批量导入包含复杂关系的数据,例如一个学生可以...

    Hibernate ORM - 一对多双向关联关系

    **一对多关联** 在数据库设计中,一对多关系意味着一个表的记录可以与另一个表的多个记录相关联。在Hibernate中,这种关系可以通过`@OneToMany`注解实现。例如,User类可能会有如下注解: ```java @Entity public ...

    hibernate一对一关联关系

    在实体类之间,Hibernate支持多种关联关系,包括一对一(One-to-One)、一对多(One-to-Many)和多对多(Many-to-Many)。本资源主要探讨的是“hibernate一对一关联关系”。 一对一关联关系在现实世界中很常见,...

    hibernate多对一单向关联关系实现源码

    在Java的持久化框架Hibernate中,多对一(ManyToOne)关联关系是一种常见的对象关系映射(ORM)场景。这种关系通常出现在一个实体类拥有多条与另一个实体类相关的记录,而另一个实体类可能只有一条对应的记录。例如...

    JPA-4 映射关联关系

    2. **单向一对多关联关系(SingleOneToMany)** 相反,"一"端实体不知道"多"端实体的存在。"一"端实体使用`@OneToMany`注解,并且可以通过`mappedBy`属性指定"多"端实体上的关联字段。在"多"端实体上,不需要额外的...

    hibernate关联关系

    2. **一对多关联关系** 一对多关联表示一个实体可以对应多个其他实体,如一个用户可以有多个订单。使用`@OneToMany`注解在多方,而`@ManyToOne`注解在一方。在多方添加`mappedBy`属性,指明一方的导航属性。示例...

    一对多单向关联关系实现元源码

    在Java编程语言中,特别是在开发基于JPA(Java Persistence API)和ORM(对象关系映射)框架如Hibernate的应用时,一对多单向关联关系是一种常见的数据模型设计。这种关系表示一个实体可以与多个其他实体相关联,而...

    实现Mybatis框架中一对多关联映射的查询操作。

    本篇将详细讲解如何在Mybatis中实现一对多关联映射的查询操作。 首先,我们要明确一对多关联映射的基本概念。在这个例子中,User表(用户表)和Order_form表(订单表)之间存在1-N的关系,意味着一个用户可以有多个...

    hibernate实例(一对多,多对一)

    以上就是关于Hibernate中一对一和一对多关联关系的基本知识及其配置示例。理解和熟练应用这些关联关系是提高Java应用程序数据库操作效率的关键。在使用Hibernate时,要灵活运用各种特性,以适应不同场景的需求,同时...

    Mybatis实现一对一、一对多关联查询

    Mybatis实现一对一、一对多关联查询,关联查询:多个表联合查询,只查询一次,通过resultMap里面的、标签配置一对一、一对多;涉及到的一对一、一对多关系: - 班级classes、班主任teacher是一对一的关系 - 班级...

Global site tag (gtag.js) - Google Analytics