Mybatis关联映射(一对一)

数据库中表与表之间的关系或者说是实体与实体之间的关系,例如学生与班级,从学生的角度看。

数据表二张:

班级

tb_clazz(
    id,        // 班级号
    cname) // 班级名称

  学生

tb_student(
    id,
    loginname,
    password,
    username,
    clazz_id)    // clazz_id 引用班级表中的id,是一个外键

  实体类二个:

  班级

Clazz{
    id,
    cname;
}

  学生

student{
    id;
    loginname;
    password;
    username;
    Clazz clazz;  //班级类作为成员变量
}

  ClazzMapper.xml

?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.mapper.ClazzMapper">
    <select id = "selectClazzById" parameterType="int" resultType="clazz">
            select * from tb_clazz where id=#{id}
    </select>
</mapper>

<select>元素实现了根据id对tb_clazz表的查询,返回的是clazz对象,即为一条记录。
这一段代码实现了tb_class与Clazz类之间的映射。

  StudentMapper.xml

?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.mapper.StudentMapper">
<select id="selectStudentById" resultMap="studentMap">
        select * from tb_student where id = #{id}
</select>
<resultMap type="student" id="studentMap">
    <id property = "id" column="id"/>
    <result property = "loginname" column="loginname"/>
    <result property = "password" column="password"/>
    <result property = "username" column="username"/>
    <association property="clazz" column="clazz_id"
        select="com.mapper.Clazzmapper.seleceClazzById"
        javaType="clazz"/>
</resultmap>
</mapper>

 <select>实现了id对学生表的查询,返回值为resultMap,下面是定义,其类型又为一个student,实现了student类与tb_student的映射(因为类中的clazz是个类,而表中的clazz_id为intger,所以用resultMap表达复杂的查询结果)

是这样实现的:

当查询学生id时,会查询所有的信息,loginname三个简单的数据能直接得到,后面的clazz类是这样得到的:把clazz_id传给了clazzy映射文件的查询语句。

总之:

要用mybatis操作一对一关联的表,需要数据库二个表通过外键关联。二,有外键的表对应的类中要有宁外一个类的实体类作为成员变量(属性)。分别为2个表创建映射文件,在有外键的表对应的映射文件,将<resultmap>元素中的<association>与宁外一个表的映射文件中有关的<select>元素关联起来。

原文地址:https://www.cnblogs.com/hujesse4/p/13965410.html