MyBatis从入门到放弃四:一对多关联查询

前言

上篇学习了一对一关联查询,这篇我们学习一对多关联查询。一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性。

搭建开发环境

创建表author、表blog,构建一对多的查询场景。

创建author、blog model。author类中主要是添加属性List<Blog> blogs属性。

  1. public class Author {
  2. private int id;
  3. private String name;
  4. private List<Blog> blogs;
  5.  
  6. public List<Blog> getBlogs() {
  7. return blogs;
  8. }
  9.  
  10. public void setBlogs(List<Blog> blogs) {
  11. this.blogs = blogs;
  12. }
  13. public int getId() {
  14. return id;
  15. }
  16.  
  17. public void setId(int id) {
  18. this.id = id;
  19. }
  20.  
  21. public String getName() {
  22. return name;
  23. }
  24.  
  25. public void setName(String name) {
  26. this.name = name;
  27. }
  28. }

 

  1. public class Blog {
  2. private int id;
  3. private String title;
  4. private String category;
  5. private int author_id;
  6.  
  7. public int getId() {
  8. return id;
  9. }
  10.  
  11. public void setId(int id) {
  12. this.id = id;
  13. }
  14.  
  15. public String getTitle() {
  16. return title;
  17. }
  18.  
  19. public void setTitle(String title) {
  20. this.title = title;
  21. }
  22.  
  23. public String getCategory() {
  24. return category;
  25. }
  26.  
  27. public void setCategory(String category) {
  28. this.category = category;
  29. }
  30.  
  31. public int getAuthor_id() {
  32. return author_id;
  33. }
  34.  
  35. public void setAuthor_id(int author_id) {
  36. this.author_id = author_id;
  37. }
  38. }

  在mybatis.xml创建alias、引用resource mapper.xml

  1. 1 <?xml version="1.0" encoding="UTF-8"?>
  2. 2 <!DOCTYPE configuration
  3. 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. 4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. 5 <configuration>
  6. 6
  7. 7 <!-- MyBatis针对SqlServer进行的配置 -->
  8. 8 <typeAliases>
  9. 9 <typeAlias alias="User" type="com.autohome.model.User"/>
  10. 10 <typeAlias alias="Teacher" type="com.autohome.model.Teacher" />
  11. 11 <typeAlias alias="Student" type="com.autohome.model.Student" />
  12. 12 <typeAlias alias="Author" type="com.autohome.model.Author" />
  13. 13 <typeAlias alias="Blog" type="com.autohome.model.Blog" />
  14. 14 </typeAliases>
  15. 15 <environments default="development">
  16. 16 <environment id="development">
  17. 17 <transactionManager type="JDBC"/>
  18. 18 <dataSource type="POOLED">
  19. 19 <property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
  20. 20 <property name="url" value="jdbc:sqlserver://localhost:1433;DatabaseName=test"/>
  21. 21 <property name="username" value="sa"/>
  22. 22 <property name="password" value="0"/>
  23. 23 </dataSource>
  24. 24 </environment>
  25. 25 </environments>
  26. 26
  27. 27
  28. 28 <mappers>
  29. 29 <mapper resource="mapper/Author.xml"/>
  30. 30 <mapper resource="mapper/User.xml"/>
  31. 31 <mapper resource="mapper/Student.xml"/>
  32. 32 </mappers>
  33. 33 </configuration>

创建Mapper.xml(Author.xml)

  1. 1 <?xml version="1.0" encoding="UTF-8"?>
  2. 2 <!DOCTYPE mapper
  3. 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. 5 <mapper namespace="com.autohome.mapper.Author">
  6. 6 <resultMap id="authorResultMap" type="Author">
  7. 7 <id property="id" column="id"/>
  8. 8 <result property="name" column="name"/>
  9. 9 <collection property="blogs" ofType="Blog">
  10. 10 <id column="bid" property="id"/>
  11. 11 <result column="title" property="title"/>
  12. 12 <result column="category" property="category"/>
  13. 13 </collection>
  14. 14 </resultMap>
  15. 15
  16. 16 <select id="getAuthorBlogsById" parameterType="int" resultMap="authorResultMap">
  17. 17 SELECT a.id,name,b.id bid,title,category FROM t_author a
  18. 18 LEFT JOIN t_blog b on a.id=b.author_id
  19. 19 WHERE a.id=#{id}
  20. 20
  21. 21 </select>
  22. 22 </mapper>

单元测试

  1. @Test
  2. public void getAuthorBlog(){
  3. SqlSession sqlSession=null;
  4. try{
  5. sqlSession=sqlSessionFactory.openSession();
  6.  
  7. Author author = sqlSession.selectOne("com.autohome.mapper.Author.getAuthorBlogsById",1);
  8. System.out.println("作者信息 id:"+author.getId()+",name:"+author.getName());
  9. System.out.println("作者博客:");
  10. for(Blog blog:author.getBlogs()){
  11. System.out.println("id:"+blog.getId()+",title:"+blog.getTitle()+",category:"+blog.getCategory());
  12. }
  13. }catch(Exception e){
  14. e.printStackTrace();
  15. }finally {
  16. sqlSession.close();
  17. }
  18. }

MyBatis:一对多关联查询的更多相关文章

  1. mybatis一对多关联查询+pagehelper->分页错误

    mybatis一对多关联查询+pagehelper->分页错误. 现象: 网上其他人遇到的类似问题:https://segmentfault.com/q/1010000009692585 解决: ...

  2. 7.mybatis一对多关联查询

    和第5节一对一查询类似,但是不同的是,一对一使用的是association,而一对多使用collection. 实例: 1个班级Class,对应1个老师Teacher,对应多个学生Student 1. ...

  3. mybatis一对多关联查询——(九)

    1.需求: 查询所有订单信息及订单下的订单明细信息. 订单信息与订单明细为一对多关系. 2.      sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关 ...

  4. MyBatis 一对多关联查询

    sqlxml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC ...

  5. Mybatis 一对多 关联查询查询

    一对多 与 一对一 查询有许多相似之处. 最主要的区别是 查询结果是list,与之对应的标签为collection. 班级和学生,一个班有多个学生,而每个学生只能属于一个班. 此时班级编号作为学生表的 ...

  6. MyBatis从入门到放弃四:一对多关联查询

    前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发 ...

  7. MyBatis关联查询,一对多关联查询

    实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...

  8. mybatis collection 一对多关联查询,单边分页的问题总结!

    若想直接通过sql实现多级关联查询表结构得有2 个必不可少的字段:id ,parentId,levelId id:主键id, parentId:父id levelId:表示第几级(表本身关联查询的时候 ...

  9. MyBatis初级实战之六:一对多关联查询

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

随机推荐

  1. mysql基础讲解

  2. centos7搭建elasticsearch

    Elasticsearch:负责日志检索和分析,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等 Logstash:对日志进行收集.过 ...

  3. Android对接微信支付体验

    在写正文之前我不得不吐槽一下:微信支付所提供的参考文档以及技术支持真心太烂了. 微信的坑: 1.在生成prepay_id向微信服务器传递参数时<body>不支持中文.需要对其进行转码,否则 ...

  4. YOU AND ME 不见不散(转载)

    (看到一篇挺不错的文章,看了挺有感触的,与大家共勉.) 泰戈尔说: 有一个夜晚,我烧毁了所有的记忆, 从此我的梦就透明了: 有个早晨我扔掉了所有的昨天, 从此我的脚步就轻盈了! 越过山丘,才发现无人等 ...

  5. linux 资料

    吾爱linux 摘自传智播客

  6. Luogu4199 万径人踪灭 FFT、Manacher

    传送门 先不考虑”不是连续的一段“这一个约束条件.可以知道:第$i$位与第$j$位相同,可以对第$\frac{i+j}{2}$位置上产生$1$的贡献(如果$i+j$为奇数表明它会对一条缝产生$1$的贡 ...

  7. ES6 Promise 异步操作

    最近越来越喜欢与大家进行资源分享了,并且及时的同步到自己的园子内,为什么呢? 一.小插曲(气氛搞起) 在上个月末,由于领导的高度重视(haha,这个高度是有多高呢,185就好了),走进了公司骨干员工的 ...

  8. sqli-labs less 1-4

    sqli-labs less 1-4 数字型注入 当输入的参数为整形时,如果存在注入漏洞,可以认为是数字型注入. 测试步骤: (1) 加单引号,URL:www.text.com/text.php?id ...

  9. Beta版本发布报告

    项目名称 学霸系统写手机客户端 项目版本 Beta版本 负责人 北京航空航天大学计算机学院 hots团队 联系方式 http://www.cnblogs.com/hotsbuaa/ 要求发布日期 20 ...

  10. 剑指offer:树的子结构

    题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路: 同样考虑用递归来做. 利用两个递归函数,一个用于判断两棵树树否相等,另一个递归取A的 ...