`
zhchx0827
  • 浏览: 191551 次
  • 性别: 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学习笔记整合架构

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

    mybatis学习笔记资料

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

    MyBatis3学习笔记.pdf

    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎 所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映 射原始类型、接口...

    brianway#springmvc-mybatis-learning#mybatis学习笔记(7)-输出映射1

    输出pojo对象list,方法返回值是List//根据用户名列查询用户列表生成的动态代理对象中是根据mapper方法的返回值类型确定是调用selectOne(返

    mybatis学习笔记

    1 Mybatis入门 1 1.1 单独使用jdbc编程问题总结 1 1.1.1 jdbc程序 1 1.1.2 jdbc编程步骤: 2 1.1.3 jdbc问题总结如下: 3 1.2 MyBatis介绍 3 1.3 Mybatis架构 3 1.4 mybatis下载 4 1.5 创建mysql数据库 5 1.6 ...

    MyBatis学习笔记

    关于实体映射文件中namespace,以前的版本是可选的内容,现在被用来与接口绑定,也就是说把接口的实现转移到xml文件中来了,以后的维护会相当的方便。 第一篇的根据id查询学生的例子中,稍做修改: 建立StudentDAO...

    Mybatis(学习笔记):入门项目创建流程

    MyBatis 是一款优秀的持久层框架:它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 ...

    Mybatis 学习笔记

    开发环境,mybatis架构,入门程序,sqlMapConfig.xml,映射,查询等

    JavaEE企业级分布式高级架构师018期 94G

    │ │ 第一章第1节: 08-mybatis基础应用之输入映射2.mp4 │ │ 第一章第1节: 09-mybatis基础应用之输出映射.mp4 │ │ 第一章第1节: 12-mybatis延迟加载.mp4 │ │ 第一章第1节: 13-mybatis缓存.mp4 │...

    mybatis-md笔记.zip

    MyBatis-MD笔记是一种结合了MyBatis和Markdown技术的学习和记录方式,旨在帮助开发者更有效地学习和理解MyBatis框架,并将所学知识以文档形式记录下来。这种学习方法将技术和文档相结合,具有极大的灵活性和可读性,...

    Mybatis笔记.zip

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。... 本文档包含了Mybatis的基础学习课件与笔记标注。

    javaMybatis个人整理(印象笔记导入即可)

    Mybatis 是一个优秀的...为了我们能够更好掌握框架运行的内部过程,并且有更好的体验,下面我们将从自定义Mybatis 框架开始来学习框架。此时我们将会体验框架从无到有的过程体验,也能够很好的综合前面阶段所学的基础.

    day01_eesy_01mybatis.zip

    学习笔记——mybatis的起步(1) 1.什么是框架? 他是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。 使用框架的好处: 框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高...

    MyBatis第一天课堂笔记.docx

    1 Mybatis第一天课堂笔记 学习过的持久层框架:DBUtils , Hibernate Mybatis就是类似于hibernate的orm持久层框架。 为什么学Mybatis? 1. 目前最主流的持久层框架为hibernate与mybatis,而且国内目前情况使用...

    day01_eesy_03mybatis_dao.zip

    mybatis的学习 dao mybatis的入门案例 第一步:读取配置文件 第二步:创建SqlSessionFactory工厂 第三步:创建SqlSession 第四步:创建Dao接口的代理对象 第五步:执行dao中的方法 第六步:释放资源 注意...

    程序员面试刷题的书哪个好-LearnMybatis:学习Mybatis

    MyBatis学习笔记 - - - - - 1.简介 MyBatis是什么 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis 可以使用简单...

    springmvc+mybatis课程资料

    包含教案、源码、课堂笔记等。... 目的:对前端控制器、处理器映射器、处理器适配器、视图解析器学习 非注解的处理器映射器、处理器适配器 注解的处理器映射器、处理器适配器(掌握) springmvc和mybatis整合(掌握)

    mybatis配置数据源、别名,映射器,执行数据库的查询, 带一个参数及多个参数的查询,新增等

    mybatis配置数据源、别名,映射器,执行数据库的查询, 带一个参数及多个参数的查询,新增等 包含学习视频及项目源码, 包含授课笔记

Global site tag (gtag.js) - Google Analytics