文章目录

  • 通过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>

思路:

  1. 查询所有的学生信息
  2. 根据查询出来的学生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的使用相关推荐

  1. Mybatis中的association用法

    这篇文章我们将来学习一些 association 用法 表结构 DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(11 ...

  2. Mybatis中的collection、association来处理结果映射

    前不久的项目时间紧张,为了尽快完成原型开发,写了一段效率相当低的代码. 最近几天闲下来,主动把之前的代码优化了一下:) 标签:Java.Mybatis.MySQL 概况:本地系统从另外一个系统得到实体 ...

  3. mybatis中association 和collection 的区别

    mybatis中association 和collection 的区别:https://zhidao.baidu.com/question/1240407172484106299.html 两个实体类 ...

  4. 解决MyBatis中 Could not set property ~ o f ~异常

    解决MyBatis中 Could not set property ~ of ~ public class Role {private Integer id; //idprivate String r ...

  5. MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO(二)

    (本文示例工程源代码下载地址:http://down.51cto.com/data/1975295) 在上一篇博文的最后,介绍了使用@PostConstruct注解标注StudentDao的init方 ...

  6. mybatis collection标签_一对多的关系,在MyBatis中如何映射?

    # 使用collection标签 需求:根据用户id查询用户信息的同时获取用户拥有的角色,一个用户可以拥有1个或多个角色. 一般情况下,不建议直接修改数据库表对应的实体类. 所以这里我们延用之前博客中 ...

  7. Mybatis中强大的功能元素:resultMap

    转载自  Mybatis中强大的功能元素:resultMap 前言 在Mybatis中,有一个强大的功能元素resultMap.当我们希望将JDBC ResultSets中的数据,转化为合理的Java ...

  8. main方法 如何去掉http debug日志_在MyBatis中如何使用collection标签实现嵌套查询?...

    # 需求升级 在上篇博客<一对多的关系,在MyBatis中如何映射?>中,我们实现了需求:根据用户id查询用户信息的同时获取用户拥有的角色. 因为角色可以拥有多个权限,所以本篇博客我们升级 ...

  9. Mybatis中resultMap

    MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接 表示返回类型的,而resultMap则是对外部Result ...

最新文章

  1. jQuery如何得到tagName?
  2. LL-verilog语法多位宽全加器
  3. JSP XML数据处理
  4. Java基础学习总结(27)——7 款开源 Java 反编译工具
  5. 做图软件matlab,Matlab 生物节律作图软件
  6. librtmp usage
  7. LIMS实验室系统无纸化管理给实验室带来的帮助
  8. 2021阿里巴巴国际站产品关键词来源(一)
  9. 关于JavaScript中万恶的this
  10. C-NCAP主动安全 ADAS 系统试验方法——相关术语与定义
  11. 2020年9月指数定期审核与调整 | TokenInsight
  12. c语言全部题目及答案,C语言全部题目及答案
  13. 第六篇,STM32脉冲宽度调制(PWM)编程
  14. 如何使用pr的超级键效果-达到蒙版的效果
  15. 停邀请返佣成交量骤减,创业板上线即崩,FCoin的神话还能延续吗?
  16. 简单的排版技巧让你的曲谱更加美观
  17. Unity学习——音效系统+音频过滤器+音频混响区+音频管理器
  18. 破解百度网盘下载速度
  19. 初识嵌入式之WeMos D1超声波感应开盖垃圾桶
  20. 王世鹏3分绝杀!中国78:77斯诺文尼亚 晋级

热门文章

  1. Fiddler抓取安卓手机上网数据2-1
  2. 佛祖保佑,永不宕机! 永无BUG!
  3. 普华永道与BitFury合作在俄罗斯创建区块链加速器
  4. Java、JSP学生寝室管理系统的设计与实现
  5. 强化学习中Sarsa与Q-learning的区别
  6. CATIA软件如何在实体零件上提取面体?
  7. 新华书店推网售业务对抗当当卓越
  8. php 如何实现分页功能,php如何实现分页功能
  9. 【硬核摄影2.0】用线性CCD器件制作扫描相机
  10. 信息系统项目管理师教程(第3版)- 带书签目录