在返回结果集时,一对一 一对多有嵌套查询,嵌套结果集2中查询方式
1:嵌套查询方式
由于会导致N+1次的查询,所以在返回数据较多时,会导致性能问题
<?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="org.mybatis.mapper.GameQuestionTypeMapper">
<!-- 1:嵌套查询的方式。这种方式会导致N+1次查询,所以查询列表时会导致性能问题。 -->
<select id="getGameQuestionTypes" parameterType="long" resultMap="gameQuestionTypeResult">
SELECT T.QT_ID,
T.GAME_ID,
T.QT_NAME,
T.STATUS
FROM T_GIM_QUESTION_TYPE T
WHERE T.QT_ID = #{typeId}
</select>
<resultMap type="org.mybatis.entity.GameQuestionType" id="gameQuestionTypeResult">
<!-- 指定使用的构造方法:使用时需要保证参数的顺序 -->
<!-- <constructor></constructor> -->
<!-- 映射一般的列,提供id可以用来改进性能(缓存) -->
<id property="qtId" column="QT_ID"/>
<result property="qtName" column="QT_NAME"/>
<result property="status" column="STATUS"/>
<association property="game" column="GAME_ID" javaType="org.mybatis.entity.GameServer"
select="selectGame"></association>
<!-- 关联一对多(多对多) -->
<!-- 1:column是T_GIM_QUESTION_TYPE表中的ID,不是DETAIL表中的主键。2:javaType可以省略不写 -->
<collection property="details" column="QT_ID" ofType="org.mybatis.entity.GameQuestionDetail" javaType="ArrayList"
select="selectQuestionDetail"></collection>
</resultMap>
<!-- #{}中的参数既可以是GameQuestionType中的外键gamedId,也可以是GameServer中的主键id -->
<select id="selectGame" parameterType="long" resultType="org.mybatis.entity.GameServer">
SELECT ID,NAME FROM GAME_SERVER WHERE ID=#{id}
</select>
<!-- #{}中的参数既可以是GameQuestionType中的主键qtId,也可以是GameQuestionDetail中的外键qtId -->
<select id="selectQuestionDetail" parameterType="long" resultType="org.mybatis.entity.GameQuestionDetail">
SELECT QD_ID AS QDID,QD_NAME AS QDNAME FROM T_GIM_QUESTION_DETAIL WHERE QT_ID=#{qtId}
</select>
</mapper>
2:嵌套结果集
由于是通过一条sql语句将需要的数据全部查询出来,所以只会执行一条sql
<?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="org.mybatis.mapper.GameQuestionTypeMapper">
<!-- 根据编号查询基础数据对象 -->
<select id="getGameQuestionTypes" parameterType="long" resultMap="gameQuestionTypeResult">
SELECT T.QT_ID,
T.GAME_ID,
T.QT_NAME,
T.STATUS,
D.QD_ID,
D.QD_NAME,
S.NAME
FROM T_GIM_QUESTION_TYPE T
JOIN GAME_SERVER S
ON T.GAME_ID = S.ID
JOIN T_GIM_QUESTION_DETAIL D
ON T.QT_ID = D.QT_ID
WHERE D.QT_ID = #{gameId}
</select>
<!-- mybatis高级映射 -->
<resultMap type="org.mybatis.entity.GameQuestionType" id="gameQuestionTypeResult">
<!-- 指定使用的构造方法:使用时需要保证参数的顺序 -->
<!-- <constructor></constructor> -->
<!-- 映射一般的列,提供id可以用来改进性能(缓存) -->
<id property="qtId" column="QT_ID"/>
<result property="qtName" column="QT_NAME"/>
<result property="status" column="STATUS"/>
<association property="game" column="GAME_ID" javaType="org.mybatis.entity.GameServer">
<id property="id" column="GAME_ID"/>
<result property="name" column="NAME"/>
</association>
<collection property="details" column="QD_ID" ofType="org.mybatis.entity.GameQuestionDetail">
<id property="qdId" column="QD_ID"/>
<result property="qdName" column="QD_NAME"/>
</collection>
</resultMap>
</mapper>
分享到:
相关推荐
【标题】"MyBatis学习笔记1" 涉及的知识点主要集中在MyBatis这一流行的持久层框架上。MyBatis是一个优秀的Java ORM(对象关系映射)框架,它允许开发者将SQL查询与Java代码分离,使得数据库操作更加灵活且易于维护。...
MyBatis 的精髓在于 SQL 映射文件(例如:iBatis学习笔记中的映射文件),其中定义了 SQL 语句、参数和结果集映射。这些映射可以包含动态 SQL,使得 SQL 语句更加灵活,可以根据传入的参数动态生成不同的 SQL。 4....
在"MyBatis学习笔记.zip"这个压缩包中,包含了四天的学习内容,分别以"MyBatis_day1"、"MyBatis_day2"、"MyBatis_day3"和"MyBatis_day4"命名,这些笔记可能详细阐述了MyBatis的核心概念和使用方法。让我们逐一解析...
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql...,最后由mybatis框架执行sql并将结果映射成java对象并返回...
MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...
本学习笔记是作者在大学期间深入学习Mybatis后的整理,旨在帮助初学者快速入门并掌握其核心概念与功能。 笔记共分为11个章节,涵盖Mybatis的基础到高级应用,以下是主要知识点的详细讲解: 1. **Mybatis简介**:...
在本学习资源中,你将找到一份详尽的Mybatis学习笔记和源码,这将极大地助力你的学习过程,尤其是对自学者而言。这份笔记被认为是非常有价值且深入的,作者在其中倾注了大量的精力,确保了内容的全面性和实用性。 ...
马士兵老师的MyBatis学习笔记主要涵盖了以下几个核心知识点: 1. **MyBatis安装与环境搭建**:首先,你需要配置Java开发环境,并了解Maven或Gradle构建工具,因为MyBatis通常与这些工具结合使用来管理依赖。然后,...
以上内容只是MyBatis基础部分的概述,实际使用中,MyBatis还有更多高级特性和最佳实践,如结果映射的复杂性、延迟加载、插件机制等,都需要深入学习和理解。通过阅读《MyBatis 基础笔记》的源代码,你可以更深入地...
在“mybatis学习笔记代码”中,我们可以深入探讨以下几个关键知识点: 1. **MyBatis架构**:MyBatis由SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession三个核心组件构成。SqlSessionFactoryBuilder用于...
标题中的“mybatis学习笔记”指的是对MyBatis框架的学习记录,通常包括基础概念、核心组件、配置文件解析、SQL映射文件的编写、动态SQL、事务管理、缓存机制等内容。学习笔记可能还会涵盖如何集成Spring框架实现依赖...
### Mybatis学习笔记知识点 #### 1. Mybatis 相关概念 ##### 1.1 什么是 Mybatis Mybatis 是一款优秀的持久层框架,它支持普通的 SQL 查询、存储过程以及高级映射等功能。该框架简化了 JDBC 的使用,允许开发者以...
本学习笔记基于MyBatis的最新版本,全面覆盖了MyBatis的核心概念、配置、使用方法以及最佳实践。 首先,MyBatis的核心是SQL映射文件,它允许开发者在XML或注解中编写定制化的SQL语句,避免了JDBC中的大量模板代码。...