Mybatis学习----一对一和一对多

来源:互联网 发布:犀牛软件安装教程 编辑:程序博客网 时间:2024/06/05 04:57

数据库表:class:c_id,c_name ,t_id(老师的id)

  teacher:t_id,t_name

  student: s_id,s_name,c_id

实体类就不写了 直接写上mapper文件吧

classMapper.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--mapper文件的唯一标识--><mapper namespace="cn.limbo.pojo.classMapper">    <!--根据班级查询老师信息,老师和班级的关系是一对一的关系-->    <!--方法一-->    <select id="getClass" resultMap="getClassMap" parameterType="Integer">        SELECT * FROM class c,teacher t WHERE c.t_id = t.t_id AND c_id = #{id};    </select>    <resultMap id="getClassMap" type="Classes">        <id property="id" column="c_id"/>        <result property="name" column="c_name"/>        <association property="teacher" javaType="teacher">            <id property="id" column="t_id"/>            <result property="name" column="t_name"/>        </association>    </resultMap>    <!--方法二-->    <select id="getClass2" resultMap="getClass2Map" parameterType="Integer">        SELECT * FROM class WHERE c_id = #{id}    </select>    <select id="getTeacher" resultType="Teacher" parameterType="Integer">        SELECT t_id id,t_name name FROM teacher WHERE t_id = #{id}    </select>    <resultMap id="getClass2Map" type="Classes">        <id property="id" column="c_id"/>        <result property="name" column="c_name"/>        <!--其中association中的column表示为select属性中的sql语句传递什么参数-->        <association property="teacher" column="t_id" select="getTeacher"/>    </resultMap>    <!--        association:用于一对一的关联查询        property:对象属性的名称        javaType:对象属性的类型        column:所对应的外键名称        select使用另一个查询封装的结果    -->    <!--根据班级查询老师和学生的信息 班级和老师关系是一对一,和学生关系是一对多-->    <!--方法一-->    <select id="getStudent" parameterType="Integer" resultMap="getStudentMap">        SELECT * FROM class c , student s, teacher t WHERE c.c_id = s.class_id AND c.t_id = t.t_id AND c.c_id = #{id};    </select>    <resultMap id="getStudentMap" type="Classes">        <id property="id" column="c_id" />        <result property="name" column="c_name" />        <association property="teacher" javaType="Teacher">            <id property="id" column="t_id"/>            <result property="name" column="t_name" />        </association>        <collection property="students" ofType="Student">            <id property="id" column="s_id" />            <result property="name" column="s_name" />        </collection>    </resultMap>    <!--方法二-->    <select id="getClass3" resultMap="getClass3Map">        SELECT * FROM class WHERE c_id=#{id}    </select>    <select id="getStudent2" resultType="Student">        SELECT s_id id,s_name name FROM student WHERE class_id = #{id}    </select>    <resultMap id="getClass3Map" type="Classes">        <id property="id" column="c_id" />        <result property="name" column="c_name" />        <association property="teacher" column="t_id" select="getTeacher" />        <collection property="students" column="c_id" select="getStudent" />    </resultMap></mapper>
上面就包含了一对一和一对多的情况,我测试过两种方法的效率,感觉差不多,没有什么区别,但是从写法上更加推荐第一种,因为简单

0 0