一,代码地址

方法一:git下载
方法二:项目地址下载

二,demo目录

三,代码解释

1),一对多

多个学生对一个班级。多对一
但每个班级可以对多个学生。一对多

数据库表
students


classes

Students

package com.shuang.entity;import lombok.Data;@Data
public class Students {private long id;private String name;private Classes classes;
}

Classes

package com.shuang.entity;import lombok.Data;import java.util.List;@Data
public class Classes {private long id;private String name;private List<Students> students;
}

StduentsRepository

package com.shuang.repository;import com.shuang.entity.Students;public interface StudentsRepository {public Students findById(long id);
}

StudentsRepository.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace:该mapper.xml映射文件的唯一标识 -->
<mapper namespace="com.shuang.repository.StudentsRepository"><resultMap id="studentsMap" type="com.shuang.entity.Students"><id column="id" property="id"></id><result column="name" property="name"></result><association property="classes" javaType="com.shuang.entity.Classes"><id column="cid" property="id"></id><result column="cname" property="name"></result></association></resultMap><select id="findById" parameterType="java.lang.Long"  resultMap="studentsMap">select s.id,s.name,c.id as cid,c.name as cname from students s,classes c where s.id=#{id} and s.cid=c.id;</select></mapper>

配注:

  1. select标签返回的是:id、name、cid、cname,返回类型为studentsMap。
  2. studentsMap不是最终返回结果,它需要在resultMap标签中处理一下。最终返回的是Students实体类型。
  3. id对应Students实体里面的id,name对应Students实体里面的name;cid对应Students实体类里面classes属性的id,cname对应Students实体类里面classes属性的name。
  4. 由于多个学生对应一个班级,多对一(用association)

classesRepository

package com.shuang.repository;import com.shuang.entity.Classes;import java.util.List;public interface ClassesRepository {public Classes findById(long id);
}

ClassesRepository.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace:该mapper.xml映射文件的唯一标识 -->
<mapper namespace="com.shuang.repository.ClassesRepository"><resultMap id="classesMap" type="com.shuang.entity.Classes"><id column="cid" property="id"></id><result column="cname" property="name"></result><collection property="studentss" ofType="com.shuang.entity.Students"><id column="id" property="id"></id><result column="name" property="name"></result></collection></resultMap><select id="findById" parameterType="java.lang.Long"  resultMap="classesMap">select s.id,s.name,c.id as cid,c.name as cname from students s,classes c where c.id=#{id} and s.cid=c.id;</select></mapper>

配注:

  1. select标签返回的是:id、name、cid、cname,返回类型为ClassesMap。
  2. ClassesMap不是最终返回结果,它需要在resultMap标签中处理一下。最终返回的是Classes实体类型。
  3. cid对应Classes实体里面的id,cname对应Classes实体里面的name;id对应Classes实体类里面student属性的id,name对应Classes实体类里面student属性的name。
  4. 由于一个班级对应多个学生,一对多(用collection):记忆方法(多个用集合)

2),多对多

一个顾客可以买多个商品,
一个商品也可以被多位顾客购买,
顾客与商品是多对多关系。

数据库表
customer

goods

customer_goods

Customer

package com.shuang.entity;import lombok.Data;import java.util.List;@Data
public class Customer {private long id;private String name;private List<Goods> goods;
}

Goods

package com.shuang.entity;import lombok.Data;import java.util.List;@Data
public class Goods {private long id;private String name;private List<Customer> customers;
}

CustomerRepository

package com.shuang.repository;import com.shuang.entity.Customer;public interface CustomerRepository {public Customer findById(long id);
}

GoodsRepository

package com.shuang.repository;import com.shuang.entity.Goods;public interface GoodsRepository {public Goods findById(long id);
}

CustomerRepository.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace:该mapper.xml映射文件的唯一标识 -->
<mapper namespace="com.shuang.repository.CustomerRepository"><resultMap id="customerMap" type="com.shuang.entity.Customer"><id column="cid" property="id"></id><result column="cname" property="name"></result><collection property="goods" ofType="com.shuang.entity.Goods"><id column="gid" property="id"></id><result column="gname" property="name"></result></collection></resultMap><select id="findById" parameterType="java.lang.Long"  resultMap="customerMap">select c.id cid, c.name cname ,g.id gid,g.name gname  from customer c,goods g ,customer_goods cg where c.id=#{id} and cg.cid=c.id and cg.gid=g.id;</select></mapper>

配注:

  1. select标签返回的是:cid、cname、gid、gname,返回类型为customerMap。
  2. customerMap不是最终返回结果,它需要在resultMap标签中处理一下。最终返回的是Customer实体类型。
  3. cid对应Customer实体里面的id,cname对应Customer实体里面的name;gid对应Customer实体类里面goods属性的id,gname对应Customer实体类里面goods属性的name。
  4. collection(多个用集合)
    GoodsRepository.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace:该mapper.xml映射文件的唯一标识 -->
<mapper namespace="com.shuang.repository.GoodsRepository"><resultMap id="goodsMap" type="com.shuang.entity.Goods"><id column="gid" property="id"></id><result column="gname" property="name"></result><collection property="customers" ofType="com.shuang.entity.Customer"><id column="cid" property="id"></id><result column="cname" property="name"></result></collection></resultMap><select id="findById" parameterType="java.lang.Long"  resultMap="goodsMap">select c.id cid, c.name cname ,g.id gid,g.name gname  from customer c,goods g ,customer_goods cg where g.id=#{id} and cg.cid=c.id and cg.gid=g.id;</select>
</mapper>

配注:

  1. select标签返回的是:cid、cname、gid、gname,返回类型为customerMap。
  2. customerMap不是最终返回结果,它需要在resultMap标签中处理一下。最终返回的是Goods实体类型。
  3. gid对应Goods实体里面的id,gname对应Goods实体里面的name;cid对应Goods实体类里面customer属性的id,cname对应Goods实体类里面customer属性的name。
  4. collection(多个用集合)

级联操作、一对多、多对多、代码demo相关推荐

  1. 2019-7-27 [MySQL] DQL 简单查询[别名/去重/运算] 条件查询 排序查询 聚合查询 分组查询 导出与导入 多表操作[一对多/多对多][创外键 创联合主键 约束 添加 删除 测试]

    文章目录 5 SQL语句(DQL) 5.1DQL准备工作和语法 5.1.1准备工作 5.1.2 DQL语法: 5.2 简单查询 5.2.1 查询所有的商品 5.2.2 查询商品名和商品价格. 5.2. ...

  2. Hibernate一对多/多对一关系映射详解及相应的增删查改操作

    以客户与订单的关系为例 1.在实体模型类中绑定两者关系: 客户类: public class Customer {private Integer id;//客户idprivate String nam ...

  3. JPA规范:一对多、一对一、多对多的双向关联与级联操作以及JPA联合主键

    通常在企业开发中,开发Dao层有两种做法:  (1)先建表,后再根据表来编写配置文件和实体bean.使用这种方案的开发人员受到了传统数据库建模的影响.  (2)先编写配置文件和实体bean,然后再生成 ...

  4. Hibernate_2_Hibernate中对象状态及转化_一级缓存_Session详解_HQL/SQL/Criteria_一对多关系_级联操作

    Hibernate中的对象状态 在Hibernate中持久化对象具有三种状态: 瞬时态, 持久态, 游离态. 瞬时态: 对象没有与Hibernate产生关联(transient,session中没有缓 ...

  5. Hibernate一对多关联映射及cascade级联操作

    我们以客户(Customer)与订单(Order)为例 实体类创建 Order订单实体类 //订单-----多的一方 public class Order {private Integer id;pr ...

  6. jpa级联添加_JPA中的一对多双向关联与级联操作

    学习Spring有两周时间了 , 个人觉得服务端主要实现的是数据关系的维护和数据结构的制定 , 以及由业务需求产生的CRUD , 只要保证对前端提供的接口稳定高效响应 , 具体的前端实现完全不关心. ...

  7. Hibernate学习总结(5)——一对多的级联操作

    首先介绍一下一对多是什么,一对多关系是关系数据库中两个表之间的一种关系,该关系中第一个表中的单个行可以与第二个表中的一个或多个行相关,但第二个表中的一个行只可以与第一个表中的一个行相关. 例如:我有一 ...

  8. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

  9. Hibernate @OneToMany 及 @Cascade级联操作

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:团队开发中的 Git 实践个人原创+1博客:点击前往,查看更多 作者:潘佳琦 链接:https://segmen ...

  10. Java三大框架之——Hibernate关联映射与级联操作

    什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...

最新文章

  1. android Image zImage uImage boot.img分别是什么?个人笔记
  2. ProgressBar进度条颜色改变
  3. 小白重装系统教程_重装解决99%的电脑问题:小白U盘重装系统教程
  4. fifo算法模拟_[源码和文档分享]基于C++的请求分页虚拟页面替换算法
  5. 【MySQL数据库】一天学完MySQL笔记——纯SQL文档版
  6. vue-router的路由
  7. php系统维护,软件系统维护主要包含什么
  8. 用反汇编理解指向指针的指针
  9. svg的transform-matrix详解
  10. costmap代价地图学习
  11. Katana的高性能图形分析库
  12. 【教程】在word中如何替换文字,新手请绕道!
  13. Unity 5.3制作VR项目
  14. Java程序员月薪多少K才能在北上广买得起房?
  15. excel取末尾数字_Excel公式技巧11: 从字符串中提取数字——数字位于字符串末尾...
  16. excel如何提取图片中的文字?
  17. 活捉那只抢算力的谷歌员工!挤占计算资源?博弈论或可破解数据中心“囚徒困境”
  18. ESP8266 AT指令连接阿里云物联网平台
  19. 零拷贝之splice( )函数和tee( )函数
  20. 常用英语短语或者句子

热门文章

  1. Typora导出word操作指导
  2. 新射雕英雄传服务器维护,37《新射雕英雄传》12月31日停止运营公告
  3. python写一个智能AI的狼吃羊
  4. 全套java视频教程|300G海量资源等你来领
  5. 使用WinRAR来创建分卷压缩包
  6. Windows 11学习入门
  7. Altium Designer 18中的Schematic–General
  8. python qq音乐网易云音乐酷狗音乐
  9. phpwind database.php,phpwind中data目录隐藏功能设置
  10. oppoReno4se和oppoa72哪个好