`

One2One关联表查询

 
阅读更多

One2One关联表查询

 

<?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,teacher WHERE class.teacher_id=teacher.t_id AND c_id=2
	-->
	
	<select id="getClass" resultMap="teacherResultMap">
		SELECT * FROM class,teacher WHERE class.teacher_id=teacher.t_id AND c_id=#{id}
	</select>
	
	<resultMap type="com.hous.day5.Classes" id="teacherResultMap">
		<id property="id" column="c_id"/>
		<result property="name" column="c_name"/>
		<association property="teacher" column="teacher_id" javaType="com.hous.day5.Teacher">
			<id property="id" column="t_id"/>
			<result property="name" column="t_name"/>
		</association>
	</resultMap>
	
	<!--
	方式二:嵌套查询:通过执行另外一个 SQL 映射语句来返回预期的复杂类型
	SELECT * FROM class WHERE c_id=1;
	SELECT * FROM teacher WHERE t_id=1 //1 是上一个查询得到的 teacher_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>
	
	<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>
	</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;

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

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

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

 

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 teacher(
	t_id int primary key auto_increment,
	t_name varchar(20)
);

create table class(
	c_id int primary key auto_increment,
	c_name varchar(20),
	teacher_id int
);

insert into teacher(t_name) values('ls1'),('ls2');
insert into class(c_name, teacher_id) values('bja', 1),('bjb', 2); 

 

分享到:
评论

相关推荐

    Spring boot2基于Mybatis实现多表关联查询

    Spring Boot 2 基于 MyBatis 实现多表关联查询 Spring Boot 2 是目前非常流行的 Java 框架,它提供了许多强大的功能,例如自动配置、 starters 机制等。MyBatis 是一个流行的持久层框架,提供了强大的数据库交互...

    Hibernate学习要点_one2one 一对一主键双线关联

    2. **数据库设计**:确保数据库表结构支持一对一的主键关联,即两个表具有相同的主键字段,且在其中一个表中该字段是外键。 3. **持久化操作**:在进行实体的保存、更新或删除操作时,需要注意维护一对一关系的完整...

    hibernate 多表关联 中间表

    首先,我们需要理解Hibernate中的两种主要关联类型:一对一(One-to-One)和一对多(One-to-Many)。而多对多关系是通过在两个参与实体之间创建一个额外的中间表来实现的,这个中间表通常包含两个外键,分别指向原表...

    Hibernate关联映射-one to one单向外键关联

    2. **懒加载与立即加载**:默认情况下,一对一关联采用懒加载,只有在真正访问关联对象时才会加载。若需要立即加载,可以使用`FetchType.EAGER`。 3. **唯一性约束**:由于是一对一关系,通常会在数据库层面为外键...

    One2One

    在IT行业中,"One2One"通常指的是数据库关系模型中的一种关联类型,即一对一关联。在数据库设计中,一对一关联是指两个表中的每个记录最多只能与另一个表中的一个记录相关联,反之亦然。这种关系相对较为特殊,因为...

    Yii2.0框架模型多表关联查询示例

    在Yii2.0框架中,多表关联查询是一种常见的数据库操作,用于实现多个数据表之间的关系映射。通过关联查询,可以高效地从多个相关联的表中检索数据。Yii2.0提供了非常强大的Active Record API来进行这种操作,本文将...

    详解YII关联查询

    本文将详细介绍Yii框架中如何进行关联查询,包括配置多表关联的方式以及具体的实现细节。 #### 二、多表关联的基本概念 在讨论关联查询之前,我们需要了解在数据库层面,表之间的关系类型。通常情况下,表之间的...

    表one2one素材(源码)

    本资源“表one2one素材(源码)”提供了一种特殊的关联方式——一对一(One-to-One)关系的实例和源代码,对于学习和理解这种关系类型非常有帮助。 一对一关系是数据库设计中的基本概念,指的是两个表之间存在一对一...

    hibernate中基于外键的one2one

    基于外键的One-to-One映射是其中的一种实现方式,它通过在一方或双方实体的表中添加外键来建立关联。接下来,我们将深入探讨这种映射策略及其配置。 **1. 一对一关系的概念** 一对一关系是指两个实体之间存在唯一的...

    Yii2中多表关联查询hasOne hasMany的方法

    Yii2提供了几种方法来执行多表关联查询,其中,hasOne和hasMany是最常用的方法。它们分别用于处理一对一和一对多的关系。 ### hasOne方法 hasOne方法用于在数据库表之间建立一对一关系。当我们想要从一个表中获取...

    Yii2中hasOne、hasMany及多对多关联查询的用法详解

    hasOne、hasMany是Yii2特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们。这篇文章主要介绍了Yii2中hasOne、hasMany及多对多关联查询的用法详解,需要的朋友可以参考下

    hibernate_One2One

    在处理数据库中的关联时,Hibernate提供了多种映射策略,其中“一对一(One2One)”关联是一种常见的映射方式。本文将深入探讨Hibernate中的One2One映射及其应用。 **一、一对一关联的概念** 一对一关联是指两个...

    Spring整合MyBatis关联查询示例

    2. **关联查询**(Association Queries):使用`&lt;association&gt;`和`&lt;collection&gt;`标签,配合`select`属性指定一个单独的查询语句来获取关联数据。 在实际开发中,为了提高性能,我们可能需要考虑懒加载(Lazy ...

    Mybatis基于注解实现多表查询功能

    3. 使用One和Many注解:在配置多表查询时,我们可以使用One和Many注解来配置一对一和一对多的关系。例如,在Account实体类中,我们可以使用@Result注解来配置用户查询的方式。 4. 实现多表查询:最后,我们可以使用...

    Yii2 ActiveRecord多表关联及多表关联搜索的实现

    在实际的开发过程中,我们经常需要处理多个表之间的关联以及根据关联表的字段进行搜索查询, Yii2通过ActiveRecord组件提供了强大的多表关联及搜索功能。 ### 多表关联 在Yii2中,多表关联可以通过定义模型之间的...

    hibernate中基于主键的one2one

    在"hibernate中基于主键的one2one",我们主要讨论的是通过主键来建立这种关联的方式。 首先,让我们来看看配置文件如何设置一对一的关联。在Hibernate的映射文件(.hbm.xml)中,我们通常会使用`&lt;one-to-one&gt;`标签...

Global site tag (gtag.js) - Google Analytics