在返回结果集时,一对一 一对多有嵌套查询,嵌套结果集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通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql...,最后由mybatis框架执行sql并将结果映射成java对象并返回...
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 ...
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎 所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映 射原始类型、接口...
输出pojo对象list,方法返回值是List//根据用户名列查询用户列表生成的动态代理对象中是根据mapper方法的返回值类型确定是调用selectOne(返
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 ...
关于实体映射文件中namespace,以前的版本是可选的内容,现在被用来与接口绑定,也就是说把接口的实现转移到xml文件中来了,以后的维护会相当的方便。 第一篇的根据id查询学生的例子中,稍做修改: 建立StudentDAO...
MyBatis 是一款优秀的持久层框架:它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 ...
开发环境,mybatis架构,入门程序,sqlMapConfig.xml,映射,查询等
│ │ 第一章第1节: 08-mybatis基础应用之输入映射2.mp4 │ │ 第一章第1节: 09-mybatis基础应用之输出映射.mp4 │ │ 第一章第1节: 12-mybatis延迟加载.mp4 │ │ 第一章第1节: 13-mybatis缓存.mp4 │...
MyBatis-MD笔记是一种结合了MyBatis和Markdown技术的学习和记录方式,旨在帮助开发者更有效地学习和理解MyBatis框架,并将所学知识以文档形式记录下来。这种学习方法将技术和文档相结合,具有极大的灵活性和可读性,...
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。... 本文档包含了Mybatis的基础学习课件与笔记标注。
Mybatis 是一个优秀的...为了我们能够更好掌握框架运行的内部过程,并且有更好的体验,下面我们将从自定义Mybatis 框架开始来学习框架。此时我们将会体验框架从无到有的过程体验,也能够很好的综合前面阶段所学的基础.
学习笔记——mybatis的起步(1) 1.什么是框架? 他是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。 使用框架的好处: 框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高...
1 Mybatis第一天课堂笔记 学习过的持久层框架:DBUtils , Hibernate Mybatis就是类似于hibernate的orm持久层框架。 为什么学Mybatis? 1. 目前最主流的持久层框架为hibernate与mybatis,而且国内目前情况使用...
mybatis的学习 dao mybatis的入门案例 第一步:读取配置文件 第二步:创建SqlSessionFactory工厂 第三步:创建SqlSession 第四步:创建Dao接口的代理对象 第五步:执行dao中的方法 第六步:释放资源 注意...
MyBatis学习笔记 - - - - - 1.简介 MyBatis是什么 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis 可以使用简单...
包含教案、源码、课堂笔记等。... 目的:对前端控制器、处理器映射器、处理器适配器、视图解析器学习 非注解的处理器映射器、处理器适配器 注解的处理器映射器、处理器适配器(掌握) springmvc和mybatis整合(掌握)
mybatis配置数据源、别名,映射器,执行数据库的查询, 带一个参数及多个参数的查询,新增等 包含学习视频及项目源码, 包含授课笔记