zoukankan      html  css  js  c++  java
  • 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>




  • 相关阅读:
    点滴线程(笔记)
    解决问题的思维方式之Problem->Desgin->Solution(笔记)
    阿朱分享:中国互联网十五年的22个创新模式(转)
    .NET JSON对象序列化和反序列化
    Centos防火墙设置
    跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题
    Mysql 多行转一行
    redis中的缓存穿透 缓存击穿 缓存雪崩
    redis持久化
    redis事物
  • 原文地址:https://www.cnblogs.com/leccoo/p/11105417.html
Copyright © 2011-2022 走看看