MyBatis中多表查询(N+1方式)
N+1查询方式
[1]什么是N+1的查询方式
如果没有N+1的方式我们想要实现多表的查询,自己书写查询的业务逻辑代码(java)
mybatis希望通过自己标签配置的方式来解决这个问题
[2]执行的操作
查询学生所在班级的信息(一对一)
查询班级中所有学生的信息(一对多)
使用的时候书写标签需要注意:
查询出来返回的是一个对象:association
查询出来返回的是一个集合:collection
总结: 业务装配方式和N+1查询方式共同点:执行SQL语句的条数上都是N+1条语句不同点:业务装配方式:是我们自己书写java代码的方式进行配置的N+1方式:通过MyBatis标签配置的方式实现的
接口
StudentMapper.java
public interface StudentMapper {//查询所有学生的操作List<Student> selectAll();List<Student> selectMore(int clazzno);
}
ClazzMapper.java
public interface ClazzMapper {//查询指定学生所在班级的信息Clazz selectOne(int clazzno);//查询所有班级信息List<Clazz> selectAll();
}
XML
StudentMapper.xml
<select id="selectAll" resultMap="rm1">SELECT * from student</select><resultMap id="rm1" type="student"><!--column:数据库的列名 property:实体的属性名--><!--如果数据库的列明和实体类中的属性名一致,就可以省去该标签但是公共字段不建议省去--><id column="sid" property="sid"></id><result column="sname" property="sname"></result><result column="clazzno" property="clazzno"></result><!--select * from clazz where clazzno=?select:执行哪一个方法column:希望查询的哪一列作为参数进行传递javaType:返回值类型property:把返回的结果赋值给对象中哪一个属性--><association select="com.bjsxt.mapper.ClazzMapper.selectOne"column="clazzno" javaType="clazz" property="cla"></association></resultMap>
ClazzMapper.xml
<select id="selectAll" resultMap="rm1">SELECT * from clazz</select><resultMap id="rm1" type="clazz"><id column="clazzno" property="clazzno"></id><result column="cname" property="cname"></result><!--select:调用哪一个xml中方法column:希望那一列作为参数进行传递ofType:集合的泛型property:把返回的数据整体赋值给哪一个属性--><collection select="com.bjsxt.mapper.StudentMapper.selectMore"column="clazzno" ofType="student" property="li"></collection></resultMap>
测试
//[4]执行方法StudentMapper stuMapper = sqlSession.getMapper(StudentMapper.class);ClazzMapper claMapper = sqlSession.getMapper(ClazzMapper.class);//查询所有学生所在的班级的信息/*List<Student> list = stuMapper.selectAll();for(Student stu:list){System.out.println(stu);}*///查询所有班级中学生的信息List<Clazz> list = claMapper.selectAll();for(Clazz clazz:list){System.out.println(clazz);}
MyBatis中多表查询(N+1方式)相关推荐
- MyBatis中多表查询(多表查询语句实现)重点
–查询所有学生所在班级的信息(一对一) –班级查询学生的操作(一对多) –遇到的问题: 查询的SQL语句非常的简单,但是如何把查询的数据接受这个就是一个问题 [1]把每一个实体中的字段拿出来组建成一个 ...
- MyBatis中多表查询(业务代码方式)
业务代码的方式 (实现的方式,书写业务逻辑的java代码实现) ------查询学生所在班级的信息 (一对一查询) 1.先把所有学生查询出来(clazzno) select* from student ...
- 【Mybatis】MyBatis 实现多表查询
大纲 Auto Mapping 单表实现(别名方式) <resultMap>实现单表配置 单个对象关联查询(N+1,外连接) 集合对象关联查询 注解开发 MyBatis 运行原理 准备:创 ...
- MyBatis 实现多表查询、resultMap 标签、MyBatis 注解、mybatis运行原理
内容 Auto Mapping 单表实现(别名方式) 实现单表配置 单个对象关联查询(N+1,外连接) 集合对象关联查询 注解开发 MyBatis 运行原理 一.MyBatis 实现多表查询 Myba ...
- 【MyBatis】多表查询
MyBatis的多表查询 表之间的关系:一对多,多对一,一对一,多对多. 一对多:一个班级对应多个学生 多对一:多个学生对应一个班级 一对一:一个人对应一个身份证号码 多对多:一个订单可以有多个商品, ...
- MyBaties中多表查询及数据库左连接、右连接、内连接、全连接笔记
本文最终目的是介绍MyBaties中多表查询方法,最难的就是多对多的查询方式,在此之前咱们先一起复习一下数据库的两表间的连接方式. 数据库表连接方式 数据库两个表之间有四种连接方式,其中包括左连接.右 ...
- mybatis一对多关联查询两种方式
mybatis一对多关联查询两种方式 前提: 方式一: 方式二: 前提: 现在有两张表,学生表跟教师表,一个教师对应多个学生 教师表: CREATE TABLE `teacher` (`id` int ...
- Mybatis连3表查询数据resultMap结果映射
Mybatis连结3表查询数据resultMap结果映射 一.前言 Mybatis实现了sql与java代码的分离,达到了解耦合的目的,配置sql语句时有个resultType="" ...
- php多表数据排除,thinkphp中多表查询中防止数据重复的sql语句(必看)
thinkphp中多表查询中防止数据重复的sql语句(必看) 这里有新鲜出炉的精品教程,程序狗速度看过来! ThinkPHP 开源 PHP 框架 ThinkPHP 是一个开源的 PHP 框架,是为了简 ...
最新文章
- ubuntu系统安装FTP
- 一个供应商只允许一个报价单
- mysql 写 性能,MySQL在大型,只写表上的性能
- C# 监控统计 程序执行 时间
- 解决webpack打包后-webkit-box-orient: vertical ;消失问题
- oracle 数字类型行转列,oracle行转列
- 接口测试--自定义断言设置
- 我是个老爸--当局者迷,旁观者清
- 回调函数的原理及PHP实例
- laravel 5 : Class 'input' not found
- 天锐绿盾屏幕水印追溯设置,精准追踪文档流转
- wm java 载入jad错误_jad文件的错误代码,分享
- 税控数据接口之XML接口导入
- Ubuntu 16.04 安装iNode客户端
- 2021kali系列 -- 破解无线密码
- 大明湖畔的正则表达式,你还记得么?
- md格式的文档转化成pdf格式
- 2021年遥感类SCI期刊中科院分区排名与影响因子汇总
- 喜欢听音乐CD的请进:[技术贴]介绍APE+CUE格式的音乐文件
- 2020北大信科计算机考研公示,2020年北京大学信息科学技术学院硕士研究生拟录取名单.pdf...
热门文章
- JVM(3)——JVM类加载器
- P1020 [NOIP1999 普及组] 导弹拦截 Dilworth定理 + dp
- bzoj4025-二分图【线段树分治,并查集】
- jzoj3738-[NOI2014模拟7.11]理想城市(city)【树,模型转换】
- P1445-[Violet]樱花【数学】
- USACO2.4のP1519-穿越栅栏(Overfencing)【bfs】
- L. Mod(预处理+分块)
- 【bfs】神殿(jzoj 2296)
- 【拓扑排序】【DP】旅行计划(luogu 1137)
- [POI2015] Pustynia(差分约数,线段树优化建图,拓扑)