MyBatis:一对多关联查询
MyBatis从入门到放弃四:一对多关联查询
前言
上篇学习了一对一关联查询,这篇我们学习一对多关联查询。一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性。
搭建开发环境
创建表author、表blog,构建一对多的查询场景。
创建author、blog model。author类中主要是添加属性List<Blog> blogs属性。
- public class Author {
- private int id;
- private String name;
- private List<Blog> blogs;
- public List<Blog> getBlogs() {
- return blogs;
- }
- public void setBlogs(List<Blog> blogs) {
- this.blogs = blogs;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
- public class Blog {
- private int id;
- private String title;
- private String category;
- private int author_id;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getTitle() {
- return title;
- }
- public void setTitle(String title) {
- this.title = title;
- }
- public String getCategory() {
- return category;
- }
- public void setCategory(String category) {
- this.category = category;
- }
- public int getAuthor_id() {
- return author_id;
- }
- public void setAuthor_id(int author_id) {
- this.author_id = author_id;
- }
- }
在mybatis.xml创建alias、引用resource mapper.xml

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

创建Mapper.xml(Author.xml)

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

单元测试
- @Test
- public void getAuthorBlog(){
- SqlSession sqlSession=null;
- try{
- sqlSession=sqlSessionFactory.openSession();
- Author author = sqlSession.selectOne("com.autohome.mapper.Author.getAuthorBlogsById",1);
- System.out.println("作者信息 id:"+author.getId()+",name:"+author.getName());
- System.out.println("作者博客:");
- for(Blog blog:author.getBlogs()){
- System.out.println("id:"+blog.getId()+",title:"+blog.getTitle()+",category:"+blog.getCategory());
- }
- }catch(Exception e){
- e.printStackTrace();
- }finally {
- sqlSession.close();
- }
- }
MyBatis:一对多关联查询的更多相关文章
- mybatis一对多关联查询+pagehelper->分页错误
mybatis一对多关联查询+pagehelper->分页错误. 现象: 网上其他人遇到的类似问题:https://segmentfault.com/q/1010000009692585 解决: ...
- 7.mybatis一对多关联查询
和第5节一对一查询类似,但是不同的是,一对一使用的是association,而一对多使用collection. 实例: 1个班级Class,对应1个老师Teacher,对应多个学生Student 1. ...
- mybatis一对多关联查询——(九)
1.需求: 查询所有订单信息及订单下的订单明细信息. 订单信息与订单明细为一对多关系. 2. sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关 ...
- MyBatis 一对多关联查询
sqlxml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC ...
- Mybatis 一对多 关联查询查询
一对多 与 一对一 查询有许多相似之处. 最主要的区别是 查询结果是list,与之对应的标签为collection. 班级和学生,一个班有多个学生,而每个学生只能属于一个班. 此时班级编号作为学生表的 ...
- MyBatis从入门到放弃四:一对多关联查询
前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发 ...
- MyBatis关联查询,一对多关联查询
实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...
- mybatis collection 一对多关联查询,单边分页的问题总结!
若想直接通过sql实现多级关联查询表结构得有2 个必不可少的字段:id ,parentId,levelId id:主键id, parentId:父id levelId:表示第几级(表本身关联查询的时候 ...
- MyBatis初级实战之六:一对多关联查询
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- mysql基础讲解
- centos7搭建elasticsearch
Elasticsearch:负责日志检索和分析,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等 Logstash:对日志进行收集.过 ...
- Android对接微信支付体验
在写正文之前我不得不吐槽一下:微信支付所提供的参考文档以及技术支持真心太烂了. 微信的坑: 1.在生成prepay_id向微信服务器传递参数时<body>不支持中文.需要对其进行转码,否则 ...
- YOU AND ME 不见不散(转载)
(看到一篇挺不错的文章,看了挺有感触的,与大家共勉.) 泰戈尔说: 有一个夜晚,我烧毁了所有的记忆, 从此我的梦就透明了: 有个早晨我扔掉了所有的昨天, 从此我的脚步就轻盈了! 越过山丘,才发现无人等 ...
- linux 资料
吾爱linux 摘自传智播客
- Luogu4199 万径人踪灭 FFT、Manacher
传送门 先不考虑”不是连续的一段“这一个约束条件.可以知道:第$i$位与第$j$位相同,可以对第$\frac{i+j}{2}$位置上产生$1$的贡献(如果$i+j$为奇数表明它会对一条缝产生$1$的贡 ...
- ES6 Promise 异步操作
最近越来越喜欢与大家进行资源分享了,并且及时的同步到自己的园子内,为什么呢? 一.小插曲(气氛搞起) 在上个月末,由于领导的高度重视(haha,这个高度是有多高呢,185就好了),走进了公司骨干员工的 ...
- sqli-labs less 1-4
sqli-labs less 1-4 数字型注入 当输入的参数为整形时,如果存在注入漏洞,可以认为是数字型注入. 测试步骤: (1) 加单引号,URL:www.text.com/text.php?id ...
- Beta版本发布报告
项目名称 学霸系统写手机客户端 项目版本 Beta版本 负责人 北京航空航天大学计算机学院 hots团队 联系方式 http://www.cnblogs.com/hotsbuaa/ 要求发布日期 20 ...
- 剑指offer:树的子结构
题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路: 同样考虑用递归来做. 利用两个递归函数,一个用于判断两棵树树否相等,另一个递归取A的 ...