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>元素关联起来。

  • 相关阅读:
    <转> 解决异常:IllegalStateException: Fragment <ThisFragment> is not currently in the FragmentManager
    带你走进Android Afinal框架的世界
    Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现
    Myeclipse启动不了的解决方法
    select 禁止 选择
    jquery的clone方法应用于textarea和select的bug修复不能copy值,clone id重复的解决
    玩javaweb的web.xml编译路径
    程序员笔记之设计(一)
    Eclipse清除SVN密码
    Java 最简单的批处理
  • 原文地址:https://www.cnblogs.com/hujesse4/p/13965410.html
Copyright © 2011-2022 走看看