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高级关系映射进行学习.
随机推荐
- 用友GRP-u8 SQL注入
POST /Proxy HTTP/1.1 Accept: Accept: */* Content-Type: application/x-www-form-urlencoded User-Agent: ...
- 获取java栈异常
package com.loan.modules.extbiz.in.rabbitmq.util; import java.io.PrintWriter; import java.io.StringW ...
- Pytest(8)parametrize参数化
前言 当某个接口中的一个字段,里面规定的范围为1-5,你5个数字都要单独写一条测试用例,就太麻烦了,这个时候可以使用pytest.mark.parametrize装饰器可以实现测试用例参数化. 官方示 ...
- hdu 1541 (cdq分治)
Problem Description Astronomers often examine star maps where stars are represented by points on a p ...
- LightOJ - 1151 Snakes and Ladders(概率dp+高斯消元)
有100个格子,从1开始走,每次抛骰子走1~6,若抛出的点数导致走出了100以外,则重新抛一次.有n个格子会单向传送到其他格子,G[i]表示从i传送到G[i].1和100不会有传送,一个格子也不会有两 ...
- Hiho1422 Harmonic Matrix Counter (高斯消元)
16年北京站A题 真的难啊.. 题意: 定义和谐矩阵 就是每个元素和上下左右的xor值=0 输出一个超大数 然后最多800个询问 求字典序第k小的和谐矩阵 x y位置上的数 题解: 首先这个超大数的范 ...
- BSGS及其扩展
目录 定义 原理 朴素算法 数论分块 例题 Luogu2485 [SDOI2011]计算器 题解 代码 扩展 例题 Luogu4195 [模板]exBSGS/Spoj3105 Mod 代码 之前写了一 ...
- Codeforces Global Round 9 B. Neighbor Grid
题目链接:https://codeforces.com/contest/1375/problem/B 题意 给出一个 $n \times m$ 的方阵,每个方格中有一个非负整数,一个好方格定义如下: ...
- 2019HDU多校 Round4
08 K-th Closest Distance 题意:询问区间l,r中与数p的距离为第k大的数 求这个距离 题解:很裸的主席树 二分答案 然后可以用主席数判断在这个区间内 一段值域内出现的数 之前没 ...
- JavaScript——四
引用案例:事件只能执行一次 array里面都是事件对象 点击box3区域时,则会有事件冒泡现象,即:box3响应后,box2(比他大一节)的区域,box1(比box2大一级)相应出现响应事件现象 捕获 ...