【MyBatis】4、级联操作

级联查询

一对多
正向

Student.java

@Data
public class Student {
    private long id;
    private String name;
    private Classes classes;
}

Classes.java

@Data
public class Classes {
    private long id;
    private String name;
    private List<Student> students;
}

StudentRepository.java

public interface StudentRepository {
    public Student findById(long id);
}

StudentRepository.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">
<mapper namespace="com.mybatistest.repository.StudentRepository">
    <select id="findById" parameterType="long" resultMap="studentMap">
        SELECT s.id as sid,s.name as sname,c.id as cid,c.name as cname FROM student s,classes c where s.id = #{id} and s.cid = c.id
    </select>

    <resultMap id="studentMap" type="com.mybatistest.entity.Student">
        <id column="sid" property="id"></id>
        <result column="sname" property="name"></result>
        <association property="classes" javaType="com.mybatistest.entity.Classes">
            <id column="cid" property="id"></id>
            <result column="cname" property="name"></result>
        </association>
    </resultMap>

</mapper>
反向

ClassesRepository.java

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">
<mapper namespace="com.mybatistest.repository.ClassesRepository">
    <select id="findById" parameterType="long" resultMap="classesMap">
        SELECT s.id as sid,s.name as sname,c.id as cid,c.name as cname FROM student s,classes c where c.id = #{id} and s.cid = c.id
    </select>

    <resultMap id="classesMap" type="com.mybatistest.entity.Classes">
        <id column="cid" property="id"></id>
        <result column="cname" property="name"></result>
        <collection property="students" ofType="com.mybatistest.entity.Student">
            <id column="sid" property="id"></id>
            <result column="sname" property="name"></result>
        </collection>
    </resultMap>

</mapper>
多对多

Customer.java

@Data
public class Customer {
    private long id;
    private String name;
    private List<Goods> goods;
}

Goods.java

@Data
public class Goods {
    private long id;
    private String name;
    private List<Customer> customers;
}

CustomerRepository.java

public interface CustomerRepository {
    public Customer 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">
<mapper namespace="com.mybatistest.repository.CustomerRepository">
    <select id="findById" parameterType="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>

    <resultMap id="CustomerMap" type="com.mybatistest.entity.Customer">
        <id column="cid" property="id"></id>
        <result column="cname" property="name"></result>
        <collection property="goods" ofType="com.mybatistest.entity.Goods">
            <id column="gid" property="id"></id>
            <result column="gname" property="name"></result>
        </collection>
    </resultMap>

</mapper>

GoodsRepository.java

public interface GoodsRepository {
    public Goods findById(long id);
}

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">
<mapper namespace="com.mybatistest.repository.GoodsRepository">
    <select id="findById" parameterType="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>

    <resultMap id="GoodsMap" type="com.mybatistest.entity.Goods">
        <id column="gid" property="id"></id>
        <result column="gname" property="name"></result>
        <collection property="customers" ofType="com.mybatistest.entity.Customer">
            <id column="cid" property="id"></id>
            <result column="cname" property="name"></result>
        </collection>
    </resultMap>

</mapper>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值