• Mybatis中的collection和association一关系


    collection 一对多和association的多对一关系

    学生和班级的一对多的例子

    班级类:

    package com.glj.pojo;
    
    import java.io.Serializable;
    import java.util.List;
    
    public class Clazz implements Serializable{
        private Integer id;
        private String code;
        private String name;
            //班级与学生是一对多的关系
        private List<Student> students;
    //省略set/get方法
    }

    学生类:

    package com.glj.pojo;
    
    import java.io.Serializable;
    
    public class Student implements Serializable {
        private Integer id;
        private String name;
        private String sex;
        private Integer age;
            //学生与班级是多对一的关系
        private Clazz clazz;
    //省略set/get方法
    }

    ClazzMapper使用到了集合-collection 即为一对多,一个班级面对多个学生

    package com.glj.mapper;
    
    import com.glj.pojo.Clazz;
    
    public interface ClazzMapper {
        Clazz selectClazzById(Integer id);
    }
    <?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.glj.mapper.ClazzMapper">
        <select id="selectClazzById" parameterType="int" resultMap="clazzResultMap">
            select * from tb_clazz where id = #{id}
        </select>
        <resultMap type="com.glj.pojo.Clazz" id="clazzResultMap">
            <id property="id" column="id"/>
            <result property="code" column="code"/>
            <result property="name" column="name"/>
            <!-- property: 指的是集合属性的值, ofType:指的是集合中元素的类型 -->
            <collection property="students" ofType="com.glj.pojo.Student"
            column="id" javaType="ArrayList"
            fetchType="lazy" select="com.glj.mapper.StudentMapper.selectStudentByClazzId">
                <id property="id" column="id"/>
                <result property="name" column="name"/>
                <result property="sex" column="sex"/>
                <result property="age" column="age"/>
            </collection>
        </resultMap>
    </mapper>

    StudentMapper则是与班级为多对一关系,所以使用了关联-association

    package com.glj.mapper;
    
    import com.glj.pojo.Student;
    
    public interface StudentMapper {
        Student selectStudentById(Integer id); 
    }
    <?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.glj.mapper.StudentMapper">
        <select id="selectStudentById" parameterType="int" resultMap="studentResultMap">
            select * from tb_clazz c,tb_student s where c.id = s.id and s.id = #{id}
        </select>
        <select id="selectStudentByClazzId" parameterType="int" resultMap="studentResultMap">
            select * from tb_student where clazz_id = #{id}
        </select>
        <resultMap type="com.glj.pojo.Student" id="studentResultMap">
            <id property="id" column="id"/>
            <result property="name" column="name"/>
            <result property="sex" column="sex"/>
            <result property="age" column="age"/>
            <association property="clazz" javaType="com.glj.pojo.Clazz">
                <id property="id" column="id"/>
                <result property="code" column="code"/>
                <result property="name" column="name"/>
            </association>
        </resultMap>
    </mapper>




  • 相关阅读:
    物质的物理属性·基础整理
    点分治
    洛谷 P3806 【模板】点分治1
    因式分解
    小石潭记
    反演原理及二项式反演
    《庄子》二则
    FFT快速傅里叶变换
    mysql 密码相关
    django基础
  • 原文地址:https://www.cnblogs.com/leccoo/p/11105417.html
Copyright © 2020-2023  润新知