以案例说明(以下案例代码都敲过验证过)

多对一(多个学生对一个老师  即学生集合中都存一个老师对象)

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 一对多和多对一 简单案例笔记的更多相关文章

  1. Java基础-SSM之mybatis一对多和多对一关系映射

    Java基础-SSM之mybatis一对多和多对一关系映射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表)  1>.创建customers表: ...

  2. MyBatis一对多和多对多xml配置

    MyBatis一对多和多对多xml配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ma ...

  3. mybatis 一对多,多对一配置

    一. 简介: 本实例使用顾客和订单的例子做说明: 一个顾客可以有多个订单, 一个订单只对应一个顾客 二. 例子: 1. 代码结构图: 2. 建表语句: CREATE DATABASE test; US ...

  4. mybatis 一对多和多对一关联查询

    首先  数据库量表之间字段关系(没有主外键) studentmajor表的id字段对应student表里major字段 两个实体类 package com.model; import java.uti ...

  5. mybatis 一对多和多对一

      在学习MyBatis3的过程中,文档上面一直在强调一个id的东西!在做这个实验的时候,也因为没有理解清楚id含义而导致一对多的“多”中也只有一条数据.id和result的唯一不同是id表示的结果将 ...

  6. mybatis一对多,多对一

    假设两张表 person对order为一对多 实体类 person package com.kerwin.mybatis.pojo; import java.util.List; public cla ...

  7. Mybatis之关联关系(一对多、多对多)

    目的: Mybatis关系映射之一对多 Mybatis关系映射之多对多 Mybatis关系映射之一对多 一对多 (订单对应多个订单项) 多对一  (订单项对应一个订单) 其是映射关系的基层思维是一样的 ...

  8. Hbase篇--HBase中一对多和多对多的表设计

    一.前述 今天分享一篇关于HBase的一对多和多对多的案例的分析. 二.具体案例 案例一.多对多    人员-角色   人员有多个角色  角色优先级   角色有多个人员   人员 删除添加角色   角 ...

  9. 六 mybatis高级映射(一对一,一对多,多对多)

    1  订单商品数据模型 以订单商品数据为模型,来对mybaits高级关系映射进行学习.

随机推荐

  1. java切割~~百万 十万 万 千 百 十 个 角 分

    /** * @param value * @return */ @SuppressWarnings("unused") public static void convertLoan ...

  2. 39.NFS(网络文件系统)

    要共享文件的主机都是Linux系统时推荐在客户端部署NFS 服务来共享文件. NFS(网络文件系统)服务可以将远程Linux 系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机(Linux ...

  3. AQS简单理解入门---1

    这篇文章,我们来聊聊面试时一个比较有杀伤力的问题:聊聊你对AQS的理解? 之前有同学反馈,去互联网公司面试,面试官聊到并发时就问到了这个问题.当时那位同学内心估计受到了一万点伤害... 因为首先,很多 ...

  4. WPF 之 MultiBinding(多路 Binding)(四)

    一.前言 ​ 有时候 UI 需要显示的信息由不止一个数据来源决定,这时候就需要使用 MultiBinding ,即多路 Binding. ​ MultiBinding 与 Binding 一样均以 B ...

  5. 2019牛客暑期多校训练营(第四场)D-triples I

    >传送门< 题意:求最少需要多少个3的倍数按位或后可以得到数字a 思路:利用3的倍数对应的二进制数的性质来先选出一个x,然后根据数字a再配一个y出来 首先,我们都知道十进制中,任意一个数只 ...

  6. Educational Codeforces Round 88 (Rated for Div. 2) D、Yet Another Yet Another Task

    题意: 给你一个含n个数a1,a2...an的数组,你要找到一个区间[l,r],使得al+a(l+1)+...+a(r-1)+ar减去max(al,a(l+1),...,a(r-1),ar)的值尽可能 ...

  7. 洛谷 P1429 平面最近点对(加强版) (分治模板题)

    题意:有\(n\)个点对,找到它们之间的最短距离. 题解:我们先对所有点对以\(x\)的大小进行排序,然后分治,每次左右二等分递归下去,当\(l+1=r\)的时候,我们计算一下距离直接返回给上一层,若 ...

  8. JavaScript——二

    样式: 实验二. querySelectorAll()里面如果填id名称就直接写,如果要确定某个属性的值,就要用到[ ]来具体选择,其中写多个以空格隔开就表达第一个声明下的第二个标签内部的某个属性 这 ...

  9. Educational DP Contest G - Longest Path (dp,拓扑排序)

    题意:给你一张DAG,求图中的最长路径. 题解:用拓扑排序一个点一个点的拿掉,然后dp记录步数即可. 代码: int n,m; int a,b; vector<int> v[N]; int ...

  10. Linux 搭建网站

    wget http://dl.wdlinux.cn/lanmp_laster.tar.gz tar zxvf lanmp_laster.tar.gz sh lanmp.sh https://www.w ...