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>




  • 相关阅读:
    【Java】String和Date、Timestamp之间的转换
    pl/sql改为汉语窗口的办法
    MySql生成随机数
    ETL概念
    oracle数据库中序列使用讲解
    oracle中的merge into用法解析
    mysql实现自动更新时间戳
    3.6:Linux touch命令:修改文件的时间戳
    3.5:Linux rmdir命令:删除空目录
    3.4:Linux mkdir命令:创建目录(文件夹)
  • 原文地址:https://www.cnblogs.com/leccoo/p/11105417.html
Copyright © 2011-2022 走看看