`
xiaoshao
  • 浏览: 52573 次
社区版块
存档分类
最新评论

Study Mybatis Step By Step 3

 
阅读更多

在这一篇文章中我们讲解Mybatis的一对多查询

在一对多的查询过程中有两种查询方式,

一种是单次查询,也就是一次查询出所有的结果,这种查询的优点就是速度比较快,但是SQL的可复用性就降低;

另一种是嵌套查询,这种查询就是根据主查询的结果进行多次查询,这种查询速度比较低。

 

下面我们先对第一种进行讲解,

首先创建javaBean

 

package com.mybatis.in;

public class Student {

	private String sId;
	private String name;
	
	public String getsId() {
		return sId;
	}
	public void setsId(String sId) {
		this.sId = sId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

 

package com.mybatis.in;

import java.util.List;

public class Course {

	private String courseId;
	private String courseName;
	private String courseType;
	
	private ClassRoom classRoom;
	private List<Student> students;
	
	public String getCourseId() {
		return courseId;
	}
	public void setCourseId(String courseId) {
		this.courseId = courseId;
	}
	public String getCourseName() {
		return courseName;
	}
	public void setCourseName(String courseName) {
		this.courseName = courseName;
	}
	public String getCourseType() {
		return courseType;
	}
	public void setCourseType(String courseType) {
		this.courseType = courseType;
	}
	public void setClassRoom(ClassRoom classRoom) {
		this.classRoom = classRoom;
	}
	public ClassRoom getClassRoom() {
		return classRoom;
	}
	public void setStudents(List<Student> students) {
		this.students = students;
	}
	public List<Student> getStudents() {
		return students;
	}
	
	
}


下面进行配置

 

<resultMap id="courseClassRoom" type="Course">
		<id property="courseId" column="courseId"/>
		<result property="courseType" column="courseType"/>
		<result property="courseName" column="courseName"/>
		<association property="classRoom" resultMap="classRoom"></association>
		<collection property="students" ofType="Student" javaType="java.util.ArrayList">
			<id property="sId" column="studentId"/>
			<result property="name" column="studentName"/>
		</collection>
	</resultMap>
<select id="getCoursesClassRoom" resultMap="courseClassRoom">
		<![CDATA[select c.courseId courseId,c.courseType courseType,c.courseName courseName,
		room.roomId roomId,room.roomName roomName,room.area area,student.id sId, student.name studentName
		from course c 
		inner join classroom room
			on c.roomId=room.roomId 
		left join student 
			on student.courseId = c.courseId]]>
	</select>


这样相信大家都看的明白,就不过多赘述。

 

下面看一下嵌套查询

这个只需要改一下配置文件即可

 

<!-- one to one and one to many nested query -->
	<resultMap id="courseStudentNested" type="Course">
		<id property="courseId" column="courseId"/>
		<result property="courseType" column="courseType"/>
		<result property="courseName" column="courseName"/>
		<association property="classRoom" resultMap="classRoom"></association>
		<collection property="students" ofType="Student" javaType="java.util.ArrayList" 
column="courseId" select="getStudents">
		</collection>
	</resultMap>

 <resultMap type="Student" id="student">
	 	<id property="sId" column="studentId"/>
		<result property="name" column="studentName"/>
	 </resultMap>

<select id="getStudents" parameterType="String" resultMap="student">
		<![CDATA[Select student.id sId, student.name studentName from student where courseId=#{id}]]>
	</select>
	
	<select id="getCoursesStudentNested" resultMap="courseStudentNested">
		<![CDATA[select c.courseId courseId,c.courseType courseType,c.courseName courseName,
		room.roomId roomId,room.roomName roomName,room.area area
		from course c 
		inner join classroom room
			on c.roomId=room.roomId]]>
	</select>


然后在接口中添加一个方法

 

package com.mybatis.in;

import java.util.List;

public interface CourseMapper {

	public List<Course> getCourses();
	
	public List<Course> getCoursesClassRoom();
	
	public List<Course> getCourseStudents();
	
	public List<Course> getCoursesStudentNested();
	
	public List<Student> getStudents(String courseId);
}


这样就可以进行嵌套查询了,这里有一个问题,如果一个对象里面有一个集合,而集合中包含的对象是他自己的时候该怎么样来查询呢??仅仅是吧 connection的select属性改成他自身吗??那么我们下一篇来揭开答案

分享到:
评论

相关推荐

    mybatis in practice 源代码

    3. **实体类**:这些类代表了数据库中的表或记录,它们包含了字段(属性)和getter/setter方法。MyBatis可以自动将SQL查询结果映射到这些对象上。 4. **Service层**:这部分代码展示了业务逻辑处理,通常包含...

    MyBatis3官方中文文档

    MyBatis是一款流行的Java持久层框架,它的设计理念是通过简单的XML或注解用于配置和映射原始类型、接口和Java POJOs(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。MyBatis可以与各种数据库交互,...

    mybatis练习3mybatis练习3mybatis练习3mybatis练习3

    mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis...

    mybatis-3-mybatis-3.2.6

    3. **SqlSessionFactory**:这是MyBatis的核心,用于创建SqlSession实例。SqlSessionFactory是线程安全的,可以长期保存,多次重复使用。 4. **SqlSession**:SqlSession代表数据库的一次会话,可以执行SQL命令和...

    mybatis-3-config.dtd mybatis-3-mapper.dtd

    在MyBatis中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 是两个至关重要的DTD(Document Type Definition)文件,它们定义了MyBatis配置文件和映射文件的结构和规则。 首先,让我们深入了解一下`mybatis-3...

    mybatis3 中文手册

    mybatis3 中文手册, 官方版本,mybatis入门必读

    Mybatis3_API Word版

    mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架...

    mybatis-3-mybatis-3.4.3

    标题“mybatis-3-mybatis-3.4.3”指的是MyBatis框架的3.4.3版本。这个版本是MyBatis的一个稳定版本,它包含了自3.4.2以来的一系列改进和修复,旨在提高性能、稳定性和用户体验。 描述中提到的“非源码包”,意味着...

    mybatis3 jar

    mybatis3 jar mybatis3 jar mybatis3 jar

    mybatis3.x源码深度解析与最佳实践.pdf

    MyBatis 3.x 源码深度解析与最佳实践 MyBatis 是当前最流行的 Java 持久层框架之一,其通过 XML 配置的方式消除了绝大部分 JDBC 重复代码以及参数的设置,结果集的映射。为了更好地学习和理解 MyBatis 背后的设计...

    mybatis-3-mapper

    mybatis-3-mapper

    mybatis-3-mybatis-3.3.0.rar

    在压缩包子文件的文件名称列表中,出现了"mybatis-3-mybatis-3.3.0.zip"和"mybatis-3-mybatis-3.3.0.tar.gz"两个文件,这通常是MyBatis源码的不同压缩格式,分别对应ZIP和GZ压缩。解压这些文件后,开发者可以查看...

    mybatis-3-config/mapper.dtd 解决mybatis头文件报错

    然后打开eclipse -&gt;Window-&gt;prefenrence-&gt;XML-&gt;XML Catalog-&gt;User Specifiled Entreis-&gt;Add-&gt;Location(此处是你放dtd文件的位置例如:‪D:\mybatis\mybatis-3-config.dtd)-&gt;Key(如果更改config,此处应该是:-//...

    mybatis-3-mapper.dtd文件下载

    在 Mybatis 中,`mybatis-3-mapper.dtd` 文件扮演着至关重要的角色,它是 Mybatis 映射器接口的定义文件,用于验证 XML 映射文件的语法正确性。 `mybatis-3-mapper.dtd` 文件是基于 DTD(Document Type Definition...

    Mybatis现学现用

    MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 字符串替换 默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,...

    Mybatis3Demo

    Mybatis3Demo是一个示例项目,它展示了Mybatis3框架的各种使用方式。Mybatis3是一个优秀的持久层框架,它简化了Java开发中的数据库操作,通过XML或注解方式配置,可以将SQL语句与Java代码紧密集成,提供更加灵活的...

    lijie_study-mybatis-3-master.zip

    在"lijie_study-mybatis-3-master.zip"这个压缩包中,包含了MyBatis 3项目的源码,这为我们深入理解MyBatis的工作原理提供了宝贵的资料。以下是关于MyBatis核心知识点的详细解析: 1. **配置文件**: - `mybatis-...

Global site tag (gtag.js) - Google Analytics