级联查询
一对多
正向
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>