级联操作、一对多、多对多、代码demo

一,代码地址

方法一: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 mapper
        PUBLIC "-//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 mapper
        PUBLIC "-//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 mapper
        PUBLIC "-//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 mapper
        PUBLIC "-//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(多个用集合)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

希境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值