zoukankan      html  css  js  c++  java
  • 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>元素关联起来。

  • 相关阅读:
    c#MD5珍藏
    html跳转倒计时
    微信支付.NET版开发总结(JS API),好多坑,适当精简
    zip文件jQuery工作地点选择城市代码
    百度地图Api进阶教程-点击生成和拖动标注4.html
    MySQL注入
    SQL语法:inner join on, left join on, right join on详细使用方法
    Mysql INNER,LEFT ,RIGHT join的使用
    让Sql语句区分大小写
    关于try和finaly 里面return的问题
  • 原文地址:https://www.cnblogs.com/hujesse4/p/13965410.html
Copyright © 2011-2022 走看看