`
y806839048
  • 浏览: 1119570 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

mybatis关联查询有两种

 
阅读更多

http://blog.csdn.net/rain097790/article/details/13615291

 

 

 关联查询有两种

  1,元素标签中传入关联条件值,此种方法一般和sql语句的子查询配套(即关联实体的列是用sql结果集表示)

 

   一对一,多对一都是如此用

  <resultMap id="BaseResultMapVo" type="com.esteel.account.beanVo.TbCusFirmChgVo" >

    <!--

      WARNING - @mbggenerated

    -->

    <id column="CUSTOMER_KEY" property="customerKey" jdbcType="DECIMAL" />

    <result column="MARKET_KEY" property="marketKey" jdbcType="DECIMAL" />

    <result column="IS_REC_SMS" property="isRecSms" jdbcType="CHAR" />

    <result column="KF_CUSTOMER_KEY" property="kfCustomerKey" jdbcType="DECIMAL" />

    <result column="SET_USER_NUM" property="setUserNum" jdbcType="DECIMAL" />

    <association property="tbCusFirmChg" column="KF_CUSTOMER_KEY" javaType="com.esteel.account.bean.TbCusFirmChg" select="getCue">

    </association>

  </resultMap>

 

 

 

  <select id="getCue" resultMap="BaseResultMap">

    select KF.*  from TB_CUS_FIRM_CHG  KF where  KF.CUSTOMER_KEY=#{KF_CUSTOMER_KEY}

  </select>//子查询的参数不要指定,直接通过关联压入

 

 

<select id="getTbCusFirmChgAry" parameterType="map" resultMap="BaseResultMapVo">

  select C.* from TB_CUS_FIRM_CHG C 

  where 1=1

  </select>

  1. <collection property="htAuthorityDTO"  ofType="com.sailod.shiro.dto.HtAuthorityDTO"  
  2.          select="selectAuthority" column="{htAuthorityId2 = htAuthorityId ,currentUserId2 = currentUserId}"   >  
  3.          </collection>

这部分就相当于用一个大sql写的关联

  2,直接在大的sql中就把关联体现出来(例如where o.pid=p.p_id)(不用子查询)这种往往和用标签直接写出结果(也可用不带条件的子查询表示结果集(便于懒加载))

  注意用这种方式的时候要把主实体和关联的实体一起查出 select p.*,o.*

  http://blog.csdn.net/rain097790/article/details/13615291

  一对多,多对多都如此

  <?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.kerwin.mybatis.pojo.Person">  

    <resultMap type="com.kerwin.mybatis.pojo.Person" id="personreSultMap">  

        <id column="p_id" property="id"/>  

        <result column="name" property="name"/>  

        <collection property="orderList" ofType="com.kerwin.mybatis.pojo.Orders" column="pid">  

            <id column="o_id" property="id"/>  

            <result column="price" property="price"/>  

        </collection>  

          

    </resultMap>  

      

    <select id="selectPersonFetchOrder" parameterType="int" resultMap="personreSultMap" >  

        select p.*,o.* from person p,orders o where o.pid=p.p_id and p.p_id=#{id}  

    </select>  

      

      

</mapper>  

 

注意:两张表中的主键id字段名要唯一,例如不能都写id,不然的话,在一对多查询的时候就会出现:级联出来的订单项只有一条记录。我之前就是将两张表的主键id字段名都写为id,

导致测试结果级联出来的多一直只有一条数据,具体如下:

id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性。

这帮助来改进整体表现,特别是缓存和嵌入结果映射。所以不同数据的id应该唯一区别,不然导致数据结果集只有一条数据。

 

分享到:
评论

相关推荐

    mybatis关联查询案例

    该资源主要通过举例讲述mybatis中的一对一关联查询,并用两种不同的方法进行操作。

    Spring整合MyBatis关联查询示例

    关联查询的执行通常有两种方式: 1. **嵌套结果映射**(Nested Result Maps):在同一个ResultMap中定义一对一或一对多的子ResultMap,MyBatis会自动处理关联对象的填充。 2. **关联查询**(Association Queries):...

    Mybatis 一对多关联查询(两种方法)

    本文将详细解析两种实现Mybatis一对多关联查询的方法,并结合提供的文件来阐述其实现过程。 首先,我们来看一下标题中的两种方法: 1. 映射器XML配置文件方式 在Mybatis中,可以通过在Mapper XML文件中定义一对一...

    Mybatis关联映射Demo

    Mybatis关联映射是数据库操作中的一个重要概念,它允许我们在SQL查询中处理一对多、多对一、多对多等复杂关系。在这个"Mybatis关联映射Demo"中,我们将深入探讨如何在Mybatis框架中实现这些关系映射,以便更好地理解...

    mybatis关联查询多对多查询案例

    本案例聚焦于MyBatis中的多对多关联查询,这是一种常见的关系型数据库设计模式,用于处理两个表之间的复杂关联。 在数据库设计中,多对多关系指的是一个实体可以与多个其他实体相关联,反之亦然。例如,学生和课程...

    MyBatis的关联映射

    **MyBatis关联映射详解** 在Java开发中,MyBatis作为一个优秀的持久层框架,提供了灵活的数据映射功能,使得数据库操作变得简单而高效。其中,关联映射是MyBatis中的一个重要特性,用于处理数据库中复杂的关系,如...

    解决mybatis使用char类型字段查询oracle数据库时结果返回null问题

    "解决mybatis使用char类型字段查询oracle数据库时结果返回null问题" 在使用mybatis框架对Oracle数据库进行查询操作时,如果使用char类型字段作为查询条件,可能会出现结果返回null的问题。这种情况下,需要对char...

    mybatis关联映射源码

    MyBatis会根据配置自动执行JOIN查询,将两个表的数据合并到一个对象中。在`chapter10_oneToOne`文件中,你可以找到相关的示例代码和解释,了解如何配置和使用这种映射。 接着,我们讨论**一对多**(OneToMany)关联...

    MyBatis关联映射代码

    关联映射分为嵌套查询(Nested Select)和嵌套结果(Nested ResultMap)两种方式。 1. 嵌套查询:在查询主表数据时,通过子查询来获取关联的子表数据。这种方式通常用于一对多关系,例如一个用户有多个订单。在XML...

    Mybatis高级映射查询

    3. 参数映射:Mybatis 支持两种参数映射方式,分别是传入 Java 对象和 Map。使用 `@Param` 注解可以为传入的参数命名,便于在 SQL 中引用。对于 Map 参数,键作为参数名,值作为参数值。 4. resultMap:`...

    Mybatis基于注解实现多表查询功能

    使用Mybatis基于注解实现多表查询功能有以下优点: 1. 简化配置:使用注解可以简化XML配置,使得开发更加快速高效。 2. 提高开发效率:使用注解可以减少开发时间,提高开发效率。 3. 灵活性强:使用注解可以灵活地...

    springmybatis

    mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...

    完整版 Java开发实训课程系列-MyBatis框架技术 03.MyBatis关联映射查询与缓存配置(共25页).pptx

    【MyBatis框架关联映射查询与缓存配置】 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在Java开发中,MyBatis简化了DAO(Data Access Object)层的开发工作,使得开发者能够更专注于...

    基于java的企业级应用开发:MyBatis的关联映射.ppt

    MyBatis提供了两种处理关联对象的方法:嵌套查询和嵌套结果。嵌套查询会在主查询的基础上执行额外的SQL,而嵌套结果则是通过一次复杂的多表查询获取所有需要的数据。嵌套查询虽然简单,但可能导致大量额外的SQL语句...

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

    需要注意的是,一对一查询有懒加载和立即加载两种模式。默认情况下,MyBatis使用的是立即加载,即在查询主对象时一起查询关联对象。如果希望延迟加载关联对象,可以设置`fetchType="lazy"`。但请注意,MyBatis默认不...

    Mybatis简单关系查询案例

    总结来说,Mybatis的关联查询处理有嵌套查询和嵌套结果两种策略,后者在性能上更优。同时,针对多对一的关系,我们可以利用`&lt;association&gt;`标签进行映射,并通过懒加载来优化数据加载时机。在实际开发中,合理运用...

    MyBatis3.2.4完全自学手册

    在使用MyBatis进行开发时,有两种主要方式: 1. **基于XML映射文件**:这是传统的使用方式,适合于复杂查询场景。在该方式下,SQL语句写在XML映射文件中,并通过Java接口调用这些SQL语句。 2. **基于注解**:这是一...

    springboot mybatis 集成多数据源 两种实现方式

    至此,我们已经详细介绍了Spring Boot与MyBatis集成实现多数据源的两种方式:静态添加和动态添加。静态添加适合数据源固定不变的场景,而动态添加则为需要灵活切换数据源的系统提供了可能。通过这两种方式,开发者...

    MyBatis思维导图.docx

    在参数绑定方面,MyBatis支持两种方式:一种是基于注解的参数绑定,直接在Mapper接口的方法上使用注解@Param来指定参数;另一种是基于XML的参数绑定,在SQL查询语句中使用#{paramName}引用传入的参数。 MyBatis还...

    Mybatis基于注解和XML两种方式的单(多)表操作 源码。(使用MySQL数据库)

    本项目涵盖了 Mybatis 基于注解和 XML 的两种方式,来实现对单表和多表的操作,特别适合初学者进行学习和实践。 首先,我们来探讨基于注解的单表操作。在 Mybatis 中,我们可以使用 @Mapper 和 @Select、@Insert、@...

Global site tag (gtag.js) - Google Analytics