MyBatis中的association的使用
文章目录
- 通过association对两表进行联表查询
- 按照查询嵌套处理
- 按照结果嵌套处理
通过association对两表进行联表查询
student表属性如下
teacher表属性如下
按照查询嵌套处理
- 关于需求的SQL稍微有点复杂时,可以打开右侧查询框进行语句的编写执行。
当使用以下时,查询出来存在问题
<select id="getStudentTeacher" resultType="Student" >select s.id,s.name,t.id, t.name from student s, teacher t where s.tid = t.id
</select>
思路:
- 查询所有的学生信息
- 根据查询出来的学生tid,寻找对应的老师
利用结果集映射,联系起来
- 编写接口
// 查询所有的学生信息以及对应的老师信息
List<Student> getStudent();
- 编写mapper配置文件
<select id="getStudent" resultMap = "StudentTeacher" >select * from student
</select><resultMap id="StudentTeacher" type="Student"><result property="id" column="id" /><result property="name" column="name" /><!-- 复杂的属性需要单独处理对象:association集合:collection
--><association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/></resultMap><select id="getTeacher" resultType="Teacher">select * from teacher where id = #{nid}
</select>
- 测试得到结果
结果中嵌套了结果
一些注意问题:
teacher中的id的传递是根据student中得到的tid,将tid传给id,因此#{}中取什么名字都可以。
association将实体类的teacher属性对应上一个结果,这个结果是将tid作为参数参与下一条sql语句产生的。
按照结果嵌套处理
- 个人认为这种方法更直观
- 正确的查询
<!--按照结果嵌套处理-->
<select id="getStudent2" resultMap="StudentTeacher2" >select s.id sid,s.name sname,t.id tid, t.name tnamefrom student s, teacher twhere s.tid = t.id
</select><resultMap id="StudentTeacher2" type="Student"><result property="id" column="sid" /><result property="name" column="sname" /><association property="teacher" javaType="Teacher" ><result property="id" column="tid" /><result property="name" column="tname" /></association>
</resultMap>
- 查询出来的需要展现的结果都应该在resultMap中进行定义,否则会以默认值进行展示
- 如下,在resultMap中注释掉tid和sname后,执行的结果
MyBatis中的association的使用相关推荐
- Mybatis中的association用法
这篇文章我们将来学习一些 association 用法 表结构 DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(11 ...
- Mybatis中的collection、association来处理结果映射
前不久的项目时间紧张,为了尽快完成原型开发,写了一段效率相当低的代码. 最近几天闲下来,主动把之前的代码优化了一下:) 标签:Java.Mybatis.MySQL 概况:本地系统从另外一个系统得到实体 ...
- mybatis中association 和collection 的区别
mybatis中association 和collection 的区别:https://zhidao.baidu.com/question/1240407172484106299.html 两个实体类 ...
- 解决MyBatis中 Could not set property ~ o f ~异常
解决MyBatis中 Could not set property ~ of ~ public class Role {private Integer id; //idprivate String r ...
- MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO(二)
(本文示例工程源代码下载地址:http://down.51cto.com/data/1975295) 在上一篇博文的最后,介绍了使用@PostConstruct注解标注StudentDao的init方 ...
- mybatis collection标签_一对多的关系,在MyBatis中如何映射?
# 使用collection标签 需求:根据用户id查询用户信息的同时获取用户拥有的角色,一个用户可以拥有1个或多个角色. 一般情况下,不建议直接修改数据库表对应的实体类. 所以这里我们延用之前博客中 ...
- Mybatis中强大的功能元素:resultMap
转载自 Mybatis中强大的功能元素:resultMap 前言 在Mybatis中,有一个强大的功能元素resultMap.当我们希望将JDBC ResultSets中的数据,转化为合理的Java ...
- main方法 如何去掉http debug日志_在MyBatis中如何使用collection标签实现嵌套查询?...
# 需求升级 在上篇博客<一对多的关系,在MyBatis中如何映射?>中,我们实现了需求:根据用户id查询用户信息的同时获取用户拥有的角色. 因为角色可以拥有多个权限,所以本篇博客我们升级 ...
- Mybatis中resultMap
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接 表示返回类型的,而resultMap则是对外部Result ...
最新文章
- jQuery如何得到tagName?
- LL-verilog语法多位宽全加器
- JSP XML数据处理
- Java基础学习总结(27)——7 款开源 Java 反编译工具
- 做图软件matlab,Matlab 生物节律作图软件
- librtmp usage
- LIMS实验室系统无纸化管理给实验室带来的帮助
- 2021阿里巴巴国际站产品关键词来源(一)
- 关于JavaScript中万恶的this
- C-NCAP主动安全 ADAS 系统试验方法——相关术语与定义
- 2020年9月指数定期审核与调整 | TokenInsight
- c语言全部题目及答案,C语言全部题目及答案
- 第六篇,STM32脉冲宽度调制(PWM)编程
- 如何使用pr的超级键效果-达到蒙版的效果
- 停邀请返佣成交量骤减,创业板上线即崩,FCoin的神话还能延续吗?
- 简单的排版技巧让你的曲谱更加美观
- Unity学习——音效系统+音频过滤器+音频混响区+音频管理器
- 破解百度网盘下载速度
- 初识嵌入式之WeMos D1超声波感应开盖垃圾桶
- 王世鹏3分绝杀!中国78:77斯诺文尼亚 晋级