`
zhchx0827
  • 浏览: 194052 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mybatis学习笔记(三) 高级映射

 
阅读更多

在返回结果集时,一对一 一对多有嵌套查询,嵌套结果集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学习笔记1" 涉及的知识点主要集中在MyBatis这一流行的持久层框架上。MyBatis是一个优秀的Java ORM(对象关系映射)框架,它允许开发者将SQL查询与Java代码分离,使得数据库操作更加灵活且易于维护。...

    mybatis学习笔记

    MyBatis 的精髓在于 SQL 映射文件(例如:iBatis学习笔记中的映射文件),其中定义了 SQL 语句、参数和结果集映射。这些映射可以包含动态 SQL,使得 SQL 语句更加灵活,可以根据传入的参数动态生成不同的 SQL。 4....

    MyBatis学习笔记.zip

    在"MyBatis学习笔记.zip"这个压缩包中,包含了四天的学习内容,分别以"MyBatis_day1"、"MyBatis_day2"、"MyBatis_day3"和"MyBatis_day4"命名,这些笔记可能详细阐述了MyBatis的核心概念和使用方法。让我们逐一解析...

    Mybatis学习笔记整合架构

    Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql...,最后由mybatis框架执行sql并将结果映射成java对象并返回...

    MyBatis学习笔记

    MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...

    Mybatis学习笔记

    本学习笔记是作者在大学期间深入学习Mybatis后的整理,旨在帮助初学者快速入门并掌握其核心概念与功能。 笔记共分为11个章节,涵盖Mybatis的基础到高级应用,以下是主要知识点的详细讲解: 1. **Mybatis简介**:...

    Mybatis学习笔记+学习源码.zip

    在本学习资源中,你将找到一份详尽的Mybatis学习笔记和源码,这将极大地助力你的学习过程,尤其是对自学者而言。这份笔记被认为是非常有价值且深入的,作者在其中倾注了大量的精力,确保了内容的全面性和实用性。 ...

    马士兵 mybatis学习笔记

    马士兵老师的MyBatis学习笔记主要涵盖了以下几个核心知识点: 1. **MyBatis安装与环境搭建**:首先,你需要配置Java开发环境,并了解Maven或Gradle构建工具,因为MyBatis通常与这些工具结合使用来管理依赖。然后,...

    《MyBatis 基础笔记》源代码

    以上内容只是MyBatis基础部分的概述,实际使用中,MyBatis还有更多高级特性和最佳实践,如结果映射的复杂性、延迟加载、插件机制等,都需要深入学习和理解。通过阅读《MyBatis 基础笔记》的源代码,你可以更深入地...

    mybatis学习笔记代码

    在“mybatis学习笔记代码”中,我们可以深入探讨以下几个关键知识点: 1. **MyBatis架构**:MyBatis由SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession三个核心组件构成。SqlSessionFactoryBuilder用于...

    mybatis学习笔记和相关帮助文档jar包

    标题中的“mybatis学习笔记”指的是对MyBatis框架的学习记录,通常包括基础概念、核心组件、配置文件解析、SQL映射文件的编写、动态SQL、事务管理、缓存机制等内容。学习笔记可能还会涵盖如何集成Spring框架实现依赖...

    mybatis学习笔记LBY.pdf

    ### Mybatis学习笔记知识点 #### 1. Mybatis 相关概念 ##### 1.1 什么是 Mybatis Mybatis 是一款优秀的持久层框架,它支持普通的 SQL 查询、存储过程以及高级映射等功能。该框架简化了 JDBC 的使用,允许开发者以...

    mybatis完整学习笔记

    本学习笔记基于MyBatis的最新版本,全面覆盖了MyBatis的核心概念、配置、使用方法以及最佳实践。 首先,MyBatis的核心是SQL映射文件,它允许开发者在XML或注解中编写定制化的SQL语句,避免了JDBC中的大量模板代码。...

Global site tag (gtag.js) - Google Analytics