zoukankan      html  css  js  c++  java
  • MyBatis的学习总结四:实现关联表查询【参考】

    一、一对一的表关联查询(edi_test_task  和  edi_task_detail) 例子:一条任务明细对一条任务记录

    对应的sql的映射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.cn.mybatis.mapper.taskDetailMapper">
        
          <!-- 
         方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
                 封装联表查询的数据(去除重复的数据)
         -->
        <select id="getTaskDetailById" parameterType="String" resultMap="taskDetail">
            select * from edi_task_detail where detail_id=#{detailId}
        </select>
        <resultMap type="EdiTaskDetail" id="taskDetail">
            <id property="detail_id" column="detail_id"/>
            <association property="editt" javaType="EdiTestTask">
                <id property="task_id" column="task_id"/>
            </association>
        </resultMap>
        
          <!-- 
           方式二:嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型
             select * from edi_task_detail where detail_id=‘a8681f896898417caaf934b9707b961e’;
             SELECT * FROM edi_test_task where task_id=‘5fd0998a07c84d9d924076f64fb726a7’    //5fd0998a07c84d9d924076f64fb726a7 是明细对应的task_id的值
         -->
        <select id="getTdById" parameterType="String" resultMap="editD">
            select * from edi_task_detail where detail_id=#{detailId}
        </select>
        <resultMap type="EdiTaskDetail" id="editD">
            <id property="detail_id" column="detail_id"/>
            <association property="editt" column="task_id" select="getTaskById"></association>
        </resultMap>
        
        <select id="getTaskById" parameterType="String" resultType="EdiTestTask">
            SELECT * FROM edi_test_task where task_id=#{task_id}
        </select>
    </mapper>

     总结——Mybatis一对一表查询:MyBatis中使用association标签来解决一对一的关联查询,association标签可用的属性如下:

    • property:对象属性的名称
    • javaType:对象属性的类型
    • column:所对应的外键字段名称
    • select:使用另一个查询封装的结果

    二、一对多的表查询 (edi_test_task  和  edi_task_detail) 例子:一个任务对应多个任务明细

    SQL对应的映射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.cn.mybatis.mapper.taskMapper">
    
         <!-- 方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集 -->
        <select id="getAllTask" parameterType="String" resultType="ettask">
            select * from edi_test_task where task_id=#{taskId}
        </select>
        <resultMap type="EdiTestTask" id="ettask">
            <id property="task_id" column="task_id"/>
            <collection property="etdlist" column="task_id" javaType="EdiTaskDetail">
               <id property="detail_id" column="detail_id"/>
            </collection>
        </resultMap>
        
        
        <!-- 方式二嵌套查询:通过执行另外一个SQL映射语句来返回与其的复杂类型-->
        <select id="getTaskById" parameterType="String" resultMap="task">
            SELECT * FROM edi_test_task where task_id=#{taskId}
        </select>
        <resultMap type="EdiTestTask" id="task">
            <id property="task_id" column="task_id"/>
            <collection property="etdlist" column="task_id" select="taskDetailById"></collection>
        </resultMap>
        
        <select id="taskDetailById" parameterType="String" resultType="EdiTaskDetail">
            select * from edi_task_detail where task_id=#{taskId}
        </select>
    </mapper>

    总结:MyBatis中使用collection标签来解决一对多的关联查询,ofType属性指定集合中元素的对象类型。

  • 相关阅读:
    类数组(伪数组)
    go面试题[2]
    go面试题[1]
    go编程第十五课时
    php实现堆排序
    go编程第十三课时
    go第十一课时
    关于循环队列 -> 击鼓传花
    网栅格布局
    《学习JAVASCRIPT数据结构与算法》 ES6 部分笔记
  • 原文地址:https://www.cnblogs.com/renxiaoren/p/5249798.html
Copyright © 2011-2022 走看看