11.一对多处理

时间:2020-05-26
本文章向大家介绍11.一对多处理,主要包括11.一对多处理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
11.一对多处理
测试环境搭建
  1. 导入lombok

    <dependencies>
    	<!--Lombok-->
    	<dependency>
    		<groupId>org.projectlombok</groupId>
    		<artifactId>lombok</artifactId>
    		<version>1.18.10</version>
    	</dependency>
    </dependencies>
    
  2. 新建实体类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;
    }
    
  3. 新建Mapper接口

    package com.believe.mapper;
    
    public interface TeacherMapper {
    }
    
    package com.believe.mapper;
    
    public interface StudentMapper {
    }
    
  4. 新建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>
    
  5. 在mybatis-config绑定Mapper.xml

    <!--绑定接口-->
    <mappers>
        <mapper resource="com/believe/mapper/StudentMapper.xml"/>
        <mapper resource="com/believe/mapper/TeacherMapper.xml"/>
    </mappers>
    
  6. 测试

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>
总结
  1. 关联—association(多对一)
  2. 集合—collection(一对多)
  3. javaType&ofType
    1. javaTypre用来指定实体类中属性的类型
    2. ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束类型

注意

  1. 保证sql的可读性,尽量保证通俗易懂
  2. 注意一对多和多对一中,属性名和字段名的问题
  3. 如果问题不好排查错误,可以使用日志工厂排错

原文地址:https://www.cnblogs.com/thetree/p/11_mybatis.html