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高级关系映射进行学习.
随机推荐
- mysql高级day4
Mysql高级-day04 1. MySql中常用工具 1.1 mysql 该mysql不是指mysql服务,而是指mysql的客户端工具. 语法 : mysql [options] [databas ...
- docker部署 springboot 多模块项目+vue
之前学习了docker,今天就来试试将这个项目打包成docker镜像并通过运行一个镜像来运行项目.这里使用的项目是el-admin.是一个开源的springboot后端管理框架(前端vue),有兴趣的 ...
- linux中在某个目录下多个文件中搜索关键字
有四种方法: find 文件目录 -name '*.*' -exec grep 'xxx' {} + -n 或是 find 文件目录 -name '*.*' | xargs grep 'xxx' -n ...
- 2019牛客暑期多校训练营(第八场)B-Beauty Values(期望线性性)
>传送门< 题意:思路:期望的线性性(可加性),比赛的时候写的代码超级无敌长,不过值得欣慰的是一发AC了,官方的题解写的还不错~ 我们可以把每种数字对答案的贡献分开来计算,即枚举每个数字, ...
- Atcoder ABC162 D - RGB Triplets
传送门:D - RGB Triplets 题意:给你一个只含'R','G','B'的字符串,求有多少个长度为3且每个字符都不相等,并且第一第二和第二第三的区间长度不同的子序列. 题解:统计每个字符各 ...
- 实战交付一套dubbo微服务到k8s集群(7)之交付dubbo服务的消费者集群到K8S
构建dubbo-demo-consumer,可以使用和dubbo-demo-service的流水线来构建 1.登录jenkins构建dubbo-demo-consumer 2.填写构建dubbo-de ...
- Java中new一个对象是一个怎样的过程?JVM中发生了什么?
Java中new一个对象的步骤: 1. 当虚拟机遇到一条new指令时候,首先去检查这个指令的参数是否能 在常量池中能否定位到一个类的符号引用 (即类的带路径全名),并且检查这个符号引用代表的类是否已被 ...
- codepen 上25个最受欢迎的HTML/CSS代码
Codepen是一个非常了不起的网站,优设哥在设计师网址导航上也大力推荐过,得到了很多同学的喜爱,也是全球web前端开发人员的圣地! 我搜索了一些时下最好最流行的codepen(仅限于HTML和CSS ...
- Android 开启 WebView 页面 Chrome debug
Android 开启 WebView 页面 Chrome debug WebView debug // 开启 WebView 页面 debug testWebView.setWebContentsDe ...
- virtual whiteboard
virtual whiteboard 虚拟白板 / canvas https://twitter.com/excalidraw https://excalidraw.com/ https://gith ...