zoukankan      html  css  js  c++  java
  • Mybatis之关联查询及动态SQL

    前言

      实际开发项目中,很少是针对单表操作,基本都会联查多表进行操作,尤其是出一些报表的内容。此时,就可以使用Mybatis的关联查询还有动态SQL。前几篇文章已经介绍过了怎么调用及相关内容,因此这里只说明核心内容SQL映射文件的配置。

    一对一关联

    <association /> JavaType是用来指定pojo中属性的类型
    此处采用两种方式进行关联查询,一种是嵌套结果,一种是嵌套查询。
    <!-- 根据班级id查询班级和教师信息 -->
        <select id="getClass" resultMap="ClassResultMap">
            select *
            from class as c
            left join
            teacher as t on c.teacher_id = t.t_id
            where c.c_id
            = #{id}
        </select>
    
        <!-- 嵌套结果 -->
        <resultMap type="Classes" id="ClassResultMap">
            <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" parameterType="int"
            resultMap="ClassResultMap2">
            select * from class where c_id=#{id}
        </select>
    
    
        <!-- 嵌套查询 -->
        <resultMap type="Classes" id="ClassResultMap2">
            <id property="id" column="c_id" />
            <result property="name" column="c_name" />
            <association property="teacher" column="teacher_id"
                select="getTeacher" />
        </resultMap>
    
        <select id="getTeacher" parameterType="int" resultType="Teacher">
            SELECT
            t_id id, t_name name from teacher where t_id=#{id}
        </select>

    一对多关联

    <collection /> ofType指定的是映射到list集合属性中pojo的类型
    <select id="getClass3" parameterType="int"
            resultMap="ClassResultMap3">
            select *
            from class c
            left join teacher t on c.teacher_id =
            t.t_id
            left join student
            s on c.c_id = s.class_id
            where c.c_id = #{id}
        </select>
    
        <resultMap type="Classes" id="ClassResultMap3">
            <id property="id" column="c_id" />
            <result property="name" column="c_name" />
            <association property="teacher" column="teacher_id"
                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>

    动态SQL

      使用Mybatis的动态SQL特性可以很容易的串联SQL。if choose(when otherwise) foreach trim>。更为细致的介绍不再赘述,Mybatis3官方参考文档中以详细介绍。

        <!-- 用户的条件查询 姓名模糊查询 -->
        <select id="selectUserByCondition" parameterType="UserCondition"
            resultType="User">
            select * from users
            where age &lt;= #{maxAge} and age &gt;= #{minAge}
            <if test='name!="%null%"'>
                and name like #{name}
            </if>
        </select>
  • 相关阅读:
    mallocbrk/mmap
    CMAKE相关
    cmake指定编译器版本及路径
    mmap 详解
    linux——tool 好好工具
    nm C /usr/lib/libstdc++.so.6 | grep runtime_error显示operator=存在
    程序可执行文件分析常用命令
    Linux中多种方法实时记录历史命令(转)
    HTML——CSS的基础语法1
    HTML的正确入门姿势——基本结构与基本标签
  • 原文地址:https://www.cnblogs.com/lyc-smile/p/9070957.html
Copyright © 2011-2022 走看看