11.一对多处理
测试环境搭建
-
导入lombok
<dependencies> <!--Lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> </dependency> </dependencies>
-
新建实体类teacher和student
package com.believe.pojo; import lombok.Data; import java.util.List; @Data public class Teacher { private int id; private String name; private List<Student> students; }
package com.believe.pojo; import lombok.Data; @Data public class Student { private int id; private String name; private int tid; }
-
新建Mapper接口
package com.believe.mapper; public interface TeacherMapper { }
package com.believe.mapper; public interface StudentMapper { }
-
新建Mapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.believe.mapper.TeacherMapper"> </mapper>
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.believe.mapper.StudentMapper"> </mapper>
-
在mybatis-config绑定Mapper.xml
<!--绑定接口--> <mappers> <mapper resource="com/believe/mapper/StudentMapper.xml"/> <mapper resource="com/believe/mapper/TeacherMapper.xml"/> </mappers>
-
测试
SQL语句
select t.id tid,t.name tname,s.id sid,s.name sname from teacher t,student s where t.id = s.tid and t.id = #{tid}
按照查询嵌套处理
<select id="getTeacher01" resultMap="getTeacher01" >
select * from teacher where id = #{tid}
</select>
<resultMap id="getTeacher01" type="Teacher" >
<result property="id" column="id"/>
<collection property="students" column="id" javaType="ArrayList" ofType="Student" select="getStudent01" />
</resultMap>
<select id="getStudent01" resultType="Student" >
select * from student where tid = #{id}
</select>
按照结果嵌套处理
<select id="getTeacher02" resultMap="getTeacher02" >
select t.id tid,t.name tname,s.id sid,s.name sname
from teacher t,student s
where t.id = s.tid and t.id = #{tid}
</select>
<resultMap id="getTeacher02" type="Teacher" >
<result property="id" column="tid" />
<result property="name" column="tname" />
<collection property="students" ofType="Student" >
<result property="id" column="sid" />
<result property="name" column="sname" />
<result property="tid" column="tid" />
</collection>
</resultMap>
总结
- 关联—association(多对一)
- 集合—collection(一对多)
- javaType&ofType
- javaTypre用来指定实体类中属性的类型
- ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束类型
注意
- 保证sql的可读性,尽量保证通俗易懂
- 注意一对多和多对一中,属性名和字段名的问题
- 如果问题不好排查错误,可以使用日志工厂排错