mybatis 一对多和多对一 简单案例笔记
以案例说明(以下案例代码都敲过验证过)
多对一(多个学生对一个老师 即学生集合中都存一个老师对象)
Mybatis多对一实现方式1:
//定义Student 和 Teacher 实体
@Data
public class Student {
private int id;
private String name;
//tid对应teacher的id
private int tid;
private Teacher teacher;
} @Data
public class Teacher {
private int id;
private String name;
}
<mapper namespace="mapper.StudentMapper">
<resultMap id="stuAboutTea" type="bean.Student">
<result property="id" column="ic"></result>
<result property="name" column="name"></result>
//普通查询只需查询selectstudent就好了
//多对一查询多了association标签 我认为这个标签作用就是嵌套查询
//其中javaType是property中teacher对象的类 select嵌套查询的id
<association property="teacher" column="tid" javaType="bean.Teacher" select="selectstubyid"/>
</resultMap> <select id="selectstudent" resultMap="stuAboutTea">
select * from student
</select> <select id="selectstubyid" resultType="bean.Teacher">
select * from teacher where id=#{id}
</select>
</mapper>
这种方式调selectid为selectstudent的sql selectstudent中就嵌套了selectstubyid的查询 嵌套的结果集存在private Teacher teacher;
Mybatis多对一实现方式2:
<resultMap id="StudentTeacher2" type="bean.Student">
<id property="id" column="sid"/>
<result property="name" column="sname"/>
<!--关联对象property 关联对象在Student实体类中的属性-->
<association property="teacher" javaType="bean.Teacher">
<result property="name" column="tname"/>
</association>
</resultMap> <select id="getStudents2" resultMap="StudentTeacher2" >
select s.id sid, s.name sname , t.name tname
from student s,teacher t
where s.tid = t.id
</select>
这种方式是直接用sql将多对一的结果查询出来 需存到teacher对象中的参数映射在association标签中定义
我个人认为第二种更好一点 因为遇到复杂的sql更直观
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一对多(一个老师对一个学生 即teacher实体类中存了student集合对象)
Mybatis一对多实现方式1:
@Data
public class Teacher {
private int id;
private String name;
//一个老师多个学生
private List<Student> students;
} @Data
public class Student {
private int id;
private String name;
//tid对应teacher的id
private int tid;
}
<resultMap id="TeacherStudent" type="bean.Teacher">
<result property="name" column="tname"/>
//collection标签同上例类似 但它是存student集合的 collection就是集合很好记
<collection property="students" ofType="bean.Student">
<result property="id" column="sid" />
<result property="name" column="sname" />
<result property="tid" column="tid" />
</collection>
</resultMap> <select id="getTeacher" resultMap="TeacherStudent">
select s.id sid, s.name sname , t.name tname, t.id tid
from student s,teacher t
where s.tid = t.id and t.id=#{id}
</select>
一对多例子同上类似 只不过将查询多对一中存单个对象变为存集合 标签collection就是集合
mybatis 一对多和多对一 简单案例笔记的更多相关文章
- Java基础-SSM之mybatis一对多和多对一关系映射
Java基础-SSM之mybatis一对多和多对一关系映射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建customers表: ...
- MyBatis一对多和多对多xml配置
MyBatis一对多和多对多xml配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ma ...
- mybatis 一对多,多对一配置
一. 简介: 本实例使用顾客和订单的例子做说明: 一个顾客可以有多个订单, 一个订单只对应一个顾客 二. 例子: 1. 代码结构图: 2. 建表语句: CREATE DATABASE test; US ...
- mybatis 一对多和多对一关联查询
首先 数据库量表之间字段关系(没有主外键) studentmajor表的id字段对应student表里major字段 两个实体类 package com.model; import java.uti ...
- mybatis 一对多和多对一
在学习MyBatis3的过程中,文档上面一直在强调一个id的东西!在做这个实验的时候,也因为没有理解清楚id含义而导致一对多的“多”中也只有一条数据.id和result的唯一不同是id表示的结果将 ...
- mybatis一对多,多对一
假设两张表 person对order为一对多 实体类 person package com.kerwin.mybatis.pojo; import java.util.List; public cla ...
- Mybatis之关联关系(一对多、多对多)
目的: Mybatis关系映射之一对多 Mybatis关系映射之多对多 Mybatis关系映射之一对多 一对多 (订单对应多个订单项) 多对一 (订单项对应一个订单) 其是映射关系的基层思维是一样的 ...
- Hbase篇--HBase中一对多和多对多的表设计
一.前述 今天分享一篇关于HBase的一对多和多对多的案例的分析. 二.具体案例 案例一.多对多 人员-角色 人员有多个角色 角色优先级 角色有多个人员 人员 删除添加角色 角 ...
- 六 mybatis高级映射(一对一,一对多,多对多)
1 订单商品数据模型 以订单商品数据为模型,来对mybaits高级关系映射进行学习.
随机推荐
- java+js正则表达式获取URL(带端口)域名
function isPassUrl(remoteLoginUrl){ var flag = false; var passUrlStr = document.getElementById(" ...
- Angular写一个Form组件-TagInput
前端开发少不了和表单打交道; Angular中, 提供了强大的表单的支持, 响应式表单(Reactive Form) 和 模板驱动的表单(Template-driven Form) 的双向数据流给我们 ...
- sql语句定义和执行顺序
sql语句定义的顺序 (1) SELECT (2)DISTINCT<select_list> (3) FROM <left_table> (4) <join_type&g ...
- [HDU4734] F(x)(数位dp+优化)
>传送门<题意:对于一个有n位(这n位从高位到低位分别是An,An-1,An-2 ... A2,A1)的十进制数,我们定义它的权值F(x)=An*2n-1 + An-1*2n-2 + .. ...
- Codeforces Round #659 (Div. 2) A. Common Prefixes
题目链接:https://codeforces.com/contest/1384/problem/A 题意 构造 $n+1$ 个字符串,使得 $n$ 对相邻字符串的相同前缀长度对应于数组 $a$ . ...
- Codeforces Round #630 (Div. 2)
题目链接:https://codeforces.com/contest/1332 A. Exercising Walk 可走的最远距离:左:x-x1,右:x2-x,下:y-y1,上:y2-y 如果可以 ...
- hdu5531 Rebuild
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submissi ...
- Codeforces Round #481 (Div. 3) C. Letters (模拟,二分)
题意:有个\(n\)个公寓,每个公寓\(a_{i}\)代表着编号为\(1-a_{i}\)个房间,给你房间号,问它在第几栋公寓的第几个房间. 题解:对每个公寓的房间号记一个前缀和,二分查找属于第几个公寓 ...
- JavaScript基本包装类介绍
为了便于操作基本类型值,ECMAScript 提供了 3 个特殊的引用类型:Boolean.Number和 String.这些类型与其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为.实际上 ...
- mimikatz+procdump 提取 Windows 明文密码
0x00 原理 获取到内存文件 lsass.exe 进程 (它用于本地安全和登陆策略) 中存储的明文登录密码. 0x01 操作 Windows10/2012 以下的版本:1.上传 procdump 执 ...