`

mybatis级联(关联)查询

 
阅读更多

级联(关联)查询,mybatis已经有了很好的支持,配置也相当简单,示例:

一种是一对一的,一种是一结多的,  association用于前者,collection用于后者。下面都有相应配置。

 

当然一对一的,可以直接配置在一起,就不用两次查询了。


    <resultMap id="usersResult" type="com.zlwh.member.model.Users">
        <result property="id" column="id"/>
        <result property="loginName" column="login_name"/>
        <result property="userName" column="user_name"/>
        <result property="password" column="password"/>
        <result property="email" column="email"/>
        <result property="status" column="status"/>
        <result property="userType" column="user_type"/>
        <result property="memberType" column="member_type"/>
        <result property="imgPath" column="img_path"/>
        <result property="imgStatus" column="img_status"/>
        <result property="identification" column="identification"/>
        <result property="certificateCode" column="certificate_code"/>
        <result property="countyCode" column="county_code"/>
        <result property="schoolId" column="school_id"/>
        <result property="classId" column="class_id"/>
        <result property="grade" column="grade"/>
        <result property="sex" column="sex"/>
        <result property="birthday" column="birthday"/>
        <result property="mobile" column="mobile"/>
        <result property="inviteCode" column="invite_code"/>
        <result property="subjectId" column="subject_id"/>
        <result property="certificationStatus" column="Certification_status"/>
        <result property="createTime" column="create_time"/>
        <result property="validTime" column="valid_time"/>
        <result property="institutionId" column="institution_id"/>
        <result property="depName" column="dep_name"/>
        <result property="jobName" column="job_name"/>
        <association column="school_id" property="school"
        javaType="com.zlwh.member.model.School" select="getSchoolById" />
    </resultMap>
   
         <resultMap id="schoolResult" type="com.zlwh.member.model.School">
        <result property="id" column="id"/>
        <result property="schoolName" column="school_name"/>
        <result property="schoolCode" column="school_code"/>
        <result property="county" column="county"/>
        <result property="address" column="address"/>
        <result property="phase" column="phase"/>
    </resultMap>
       
    <select id="getSchoolById" resultMap="schoolResult">
        SELECT * FROM school WHERE id = #{id}
    </select>
   
    <resultMap id="usersResultForT" type="com.zlwh.member.model.Users">
        <result property="id" column="id"/>
        <result property="loginName" column="login_name"/>
        <result property="userName" column="user_name"/>
        <result property="inviteCode" column="invite_code"/>
        <collection property="userSubscriptions" column="id" select="getUserSubscriptionsByUserId" ></collection>
    </resultMap>
   
 
   
    <resultMap id="userSubscriptionResult" type="com.zlwh.member.model.UserSubscription">
        <result property="id" column="id"/>
        <result property="userId" column="user_id"/>
        <result property="subscriptionId" column="subscription_id"/>
        <result property="beginDate" column="begin_date"/>
        <result property="endDate" column="end_date"/>
        <result property="status" column="status"/>
        <result property="createTime" column="create_time"/>
        <result property="orderId" column="order_id"/>
        <result property="orderPrice" column="order_price"/>
        <result property="payTime" column="pay_time"/>    
    </resultMap>
   
    <select id="getStudentsByInviteCode" resultMap="usersResultForT">
        <![CDATA[SELECT id,login_name,user_name,invite_code FROM users    WHERE invite_code = #{inviteCode} and member_type=1]]>
    </select>

 

<select id="getById" resultMap="usersResult">
        SELECT <include refid="commonColumns" />
        <![CDATA[
            FROM users
            WHERE
                id = #{id}
        ]]>
    </select>

   
    <!-- 查所有已支付的订阅 -->
     <select id="getUserSubscriptionsByUserId" resultMap="userSubscriptionResult">
        SELECT * FROM user_subscription WHERE (status=1 or status=3) and user_id = #{userId} order by subscription_id asc
    </select>
   

 


    <!-- 用于select查询公用抽取的列 -->
    <sql id="commonColumns">
        <![CDATA[
            id ,
            login_name ,
            user_name ,
            password ,
            email ,
            status ,
            user_type ,
            member_type ,
            img_path ,
            img_status ,
            identification ,
            certificate_code ,
            county_code ,
            school_id ,
            class_id ,
            grade ,
            sex ,
            birthday ,
            mobile ,
            invite_code ,
            subject_id ,
            Certification_status ,
            create_time ,
            valid_time ,
            institution_id ,
            dep_name ,
            job_name
        ]]>
    </sql>
   
  

分享到:
评论

相关推荐

    mybatis关联/级联以及动态sql

    在关联和级联查询以及动态SQL方面,MyBatis提供了强大的功能,使得开发人员能够更加灵活地处理数据库交互。 首先,我们来探讨MyBatis中的关联(Association)和级联(Cascading)。关联通常用于描述一个实体对象与...

    Spring boot整合Mybatis实现级联一对多CRUD操作的完整步骤

    在本文中,我们将深入探讨如何使用Spring Boot整合Mybatis实现级联一对多的CRUD(创建、读取、更新、删除)操作。首先,我们需要理解什么是级联操作和一对多的关系。在关系型数据库中,级联操作涉及到一个表中的记录...

    Mybtis级联映射(一对一,一对多)例子

    在这个"Mybatis级联映射(一对一,一对多)例子"中,我们将深入探讨Mybatis如何处理一对一和一对多的关系映射。 在数据库设计中,一对一和一对多关系是很常见的。一对一关系指的是两个表中的一条记录最多只能与另一...

    Spring整合MyBatis关联查询示例

    本示例将探讨如何在Spring环境中实现MyBatis的关联查询,包括一对多、一对一和多对多关系的处理。理解这些关联关系对于构建复杂的业务逻辑至关重要。 首先,我们需要配置Spring与MyBatis的整合。这通常涉及以下几个...

    java级联查询、分页查询

    级联查询允许我们在一次数据库访问中获取关联对象的数据,而无需多次单独查询。例如,假设我们有一个`User`类和一个`Address`类,用户可以有多个地址,那么在查询用户时,如果希望同时获取用户的地址信息,就可以...

    mybatis 的高级关联查询源码

    这次我们将深入探讨 MyBatis 如何实现这种高级关联查询,并通过源码分析来理解其工作原理。 “一对多”关联通常指的是一个实体(如用户)可以拥有多个关联实体(如订单)。在 MyBatis 中,我们可以使用 `...

    MyBatis的关联映射-资料.rar

    3. **嵌套查询与嵌套结果**:MyBatis支持在关联映射中使用嵌套查询,通过`select`属性指定一个单独的SQL查询来获取关联数据。这有助于减少数据库交互次数,提高性能。 4. **延迟加载**:MyBatis提供了延迟加载功能...

    MyBatis自定义映射 级联属性操作.zip

    - **nested selects**:在查询时,可以使用嵌套的SQL查询来获取关联数据。 - **nested results**:在结果映射中,可以嵌套结果集来处理复杂的数据结构。 3. **动态SQL** MyBatis的动态SQL功能非常强大,可以在...

    mybatis利用association或collection传递多参数子查询

    "MyBatis多参数子查询使用association或collection" MyBatis是一款流行的Java持久层框架,提供了多种方式来实现复杂的数据库查询操作。其中,使用association或collection来传递多参数子查询是一种常用的方法。本文...

    Mybatis多对多关联查询

    在处理复杂的数据关系时,比如多对多关联查询,MyBatis提供了强大的支持。本文将深入探讨MyBatis如何实现多对多关联查询。 一、多对多关系的理解 在数据库设计中,多对多(Many-to-Many)关系表示两个实体之间存在...

    mybatis入门之级联1对1(无延迟加载)

    总结,MyBatis的级联1对1关联通过`&lt;association&gt;`标签实现,可以方便地在一个查询中获取关联对象的信息。自定义TypeHandler则解决了枚举类型与数据库字段之间的映射问题,使得枚举类能够与数据库中的字段无缝对接。...

    全国省市区数据sql (mysql)三级联动

    4. 关联表(province_city_district):这张表用于快速查找特定省市区的组合,可能包含了省份、城市、区县的唯一标识,以提高查询效率,尤其是在实现联动效果时。 在MySQL中,我们可以使用InnoDB引擎来支持外键约束...

    mybatis061 多表查询

    本专题将深入探讨MyBatis的一对多关联查询,以"mybatis061 多表查询"为例,旨在帮助你理解和掌握如何在实际项目中实现多表数据的联合检索。 首先,了解一对多关系:在数据库设计中,一对多关系是指一个表中的记录...

    MyBatis关联映射:一对一、一对多-代码.zip

    在开发过程中,要注意合理设计数据库表结构,避免过度依赖关联查询,因为这可能导致复杂的SQL语句和性能瓶颈。通过合理的缓存策略和优化的SQL语句,可以进一步提升MyBatis应用的性能。 总之,理解和掌握MyBatis的一...

    Mybatis多对多关联映射源码

    Mybatis支持级联插入、更新和删除,这意味着在操作主要实体时,可以同时处理关联的多对多关系。通过`cascade`属性,我们可以指定哪些操作需要级联。 7. **性能优化** 为了提高性能,可以考虑使用`&lt;resultMap&gt;`的`...

    Mybatis系列课程-Association

    4. **关联查询的配置**: 在XML映射文件中,可以通过`&lt;select&gt;`标签定义复杂的SQL查询,包括JOIN操作,以便在一次查询中获取关联数据。同时,Mybatis还支持延迟加载(Lazy Loading),在默认情况下,关联的对象只有在...

    MyBatis高级映射(多对多查询)

    在处理复杂的数据关系时,如多对多关联查询,MyBatis提供了高效且易用的解决方案。本篇文章将深入探讨MyBatis在处理多对多查询时的高级映射技巧。 首先,理解多对多关系。在数据库设计中,多对多关系意味着一个表中...

    ssm级联查询、上下架审核

    在SSM框架中,级联查询通常涉及到MyBatis的映射文件(Mapper XML)和实体类之间的关联关系。通过在实体类中定义一对多或多对一的关系,MyBatis可以在一次查询中获取到关联的数据,避免了多次数据库访问,提高了性能...

    MyBatis入门到精通

    MyBatis支持一对多、多对多的复杂关联映射,通过`association`和`collection`标签,可以实现级联查询和更新。 10. **缓存机制** MyBatis提供了本地缓存和二级缓存,可以提高数据访问效率。开发者可以通过配置开启...

Global site tag (gtag.js) - Google Analytics