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 ...
随机推荐
-
Theano: CNMeM is disabled, CuDNN not available
Problem Theano: CNMeM is disabled, CuDNN not available Solution cnmem package: https://github.com/NV ...
-
python矩阵运算 不断收集整理
python矩阵运算 转自:http://blog.sina.com.cn/s/blog_5f234d4701012p64.html Python使用NumPy包完成了对N-维数组的快速便捷操作.使用 ...
-
pyinstaller使用小结
安装pyinstaller pip install -U pyinstaller 生成控制台程序 pyinstaller ./example.py 在当前目录的dist文件夹内可以找到编译成功的程序 ...
-
计算机图形学学习方法和相关书籍,做游戏,GIS,虚拟现实,三维引擎的都能够看看.
本书參照<<图形学扫盲>> 整理的,原文内容引子: http://www.cppblog.com/lai3d/archive/2008/12/30/70796.html 前言: ...
-
(NO.00003)iOS游戏简单的机器人投射游戏成形记(九)
现在按住手臂可以非常自然和舒服的旋转了,丝般顺滑:移动停止,旋转立即停止,没有什么惯性影响了. 以上一共介绍了2中旋转方式,到底采用哪种方式呢?其实看实际游戏的需求和个人的喜好了.本猫在Level中添 ...
-
sh -c
在Linux使用 echo 并配合命令重定向是实现向文件中写入信息的快捷方式. 比如要向 test.asc 文件中随便写入点内容,可以: $ echo "信息" > test ...
-
关于iOS刷新UI需要在主线程执行
为什么一定要在主线程刷新UI? 安全+效率:因为UIKit框架不是线程安全的框架,当在多个线程进行UI操作,有可能出现资源抢夺,导致问题. 其实:在子线程是不能更新UI的, 看到能更新的结果只是个假象 ...
-
java中哪些数值不能被初始化
main方法中的变量不能被初始化 final修饰的变量不能被初始化·
-
【JAVA-JDT-AST】Java抽象语法树的构建、遍历及转成dot格式(附Github源码)
Background: 最近为了重现tree-based clone detection的论文:L. Jiang, G. Misherghi, Z. Su, and S. Glondu. Deckar ...
-
浅谈利用PLSQL的多线程处理机制,加快处理大数据表的效率
我们在处理大数据表的时候经常会感觉的处理速度不够快,效率不够高,那么今天下面我就来简单实现下PLSQL的多线程编程处理数据: 我模拟一个简单的场景,把某一张表中的数据(当然这张表的数据非常大)同步到目 ...