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>
- <collection property="htAuthorityDTO" ofType="com.sailod.shiro.dto.HtAuthorityDTO"
- select="selectAuthority" column="{htAuthorityId2 = htAuthorityId ,currentUserId2 = currentUserId}" >
- </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中的一对一关联查询,并用两种不同的方法进行操作。
关联查询的执行通常有两种方式: 1. **嵌套结果映射**(Nested Result Maps):在同一个ResultMap中定义一对一或一对多的子ResultMap,MyBatis会自动处理关联对象的填充。 2. **关联查询**(Association Queries):...
本文将详细解析两种实现Mybatis一对多关联查询的方法,并结合提供的文件来阐述其实现过程。 首先,我们来看一下标题中的两种方法: 1. 映射器XML配置文件方式 在Mybatis中,可以通过在Mapper XML文件中定义一对一...
Mybatis关联映射是数据库操作中的一个重要概念,它允许我们在SQL查询中处理一对多、多对一、多对多等复杂关系。在这个"Mybatis关联映射Demo"中,我们将深入探讨如何在Mybatis框架中实现这些关系映射,以便更好地理解...
本案例聚焦于MyBatis中的多对多关联查询,这是一种常见的关系型数据库设计模式,用于处理两个表之间的复杂关联。 在数据库设计中,多对多关系指的是一个实体可以与多个其他实体相关联,反之亦然。例如,学生和课程...
**MyBatis关联映射详解** 在Java开发中,MyBatis作为一个优秀的持久层框架,提供了灵活的数据映射功能,使得数据库操作变得简单而高效。其中,关联映射是MyBatis中的一个重要特性,用于处理数据库中复杂的关系,如...
"解决mybatis使用char类型字段查询oracle数据库时结果返回null问题" 在使用mybatis框架对Oracle数据库进行查询操作时,如果使用char类型字段作为查询条件,可能会出现结果返回null的问题。这种情况下,需要对char...
MyBatis会根据配置自动执行JOIN查询,将两个表的数据合并到一个对象中。在`chapter10_oneToOne`文件中,你可以找到相关的示例代码和解释,了解如何配置和使用这种映射。 接着,我们讨论**一对多**(OneToMany)关联...
关联映射分为嵌套查询(Nested Select)和嵌套结果(Nested ResultMap)两种方式。 1. 嵌套查询:在查询主表数据时,通过子查询来获取关联的子表数据。这种方式通常用于一对多关系,例如一个用户有多个订单。在XML...
3. 参数映射:Mybatis 支持两种参数映射方式,分别是传入 Java 对象和 Map。使用 `@Param` 注解可以为传入的参数命名,便于在 SQL 中引用。对于 Map 参数,键作为参数名,值作为参数值。 4. resultMap:`...
使用Mybatis基于注解实现多表查询功能有以下优点: 1. 简化配置:使用注解可以简化XML配置,使得开发更加快速高效。 2. 提高开发效率:使用注解可以减少开发时间,提高开发效率。 3. 灵活性强:使用注解可以灵活地...
mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...
【MyBatis框架关联映射查询与缓存配置】 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在Java开发中,MyBatis简化了DAO(Data Access Object)层的开发工作,使得开发者能够更专注于...
MyBatis提供了两种处理关联对象的方法:嵌套查询和嵌套结果。嵌套查询会在主查询的基础上执行额外的SQL,而嵌套结果则是通过一次复杂的多表查询获取所有需要的数据。嵌套查询虽然简单,但可能导致大量额外的SQL语句...
需要注意的是,一对一查询有懒加载和立即加载两种模式。默认情况下,MyBatis使用的是立即加载,即在查询主对象时一起查询关联对象。如果希望延迟加载关联对象,可以设置`fetchType="lazy"`。但请注意,MyBatis默认不...
总结来说,Mybatis的关联查询处理有嵌套查询和嵌套结果两种策略,后者在性能上更优。同时,针对多对一的关系,我们可以利用`<association>`标签进行映射,并通过懒加载来优化数据加载时机。在实际开发中,合理运用...
在使用MyBatis进行开发时,有两种主要方式: 1. **基于XML映射文件**:这是传统的使用方式,适合于复杂查询场景。在该方式下,SQL语句写在XML映射文件中,并通过Java接口调用这些SQL语句。 2. **基于注解**:这是一...
至此,我们已经详细介绍了Spring Boot与MyBatis集成实现多数据源的两种方式:静态添加和动态添加。静态添加适合数据源固定不变的场景,而动态添加则为需要灵活切换数据源的系统提供了可能。通过这两种方式,开发者...
在参数绑定方面,MyBatis支持两种方式:一种是基于注解的参数绑定,直接在Mapper接口的方法上使用注解@Param来指定参数;另一种是基于XML的参数绑定,在SQL查询语句中使用#{paramName}引用传入的参数。 MyBatis还...
本项目涵盖了 Mybatis 基于注解和 XML 的两种方式,来实现对单表和多表的操作,特别适合初学者进行学习和实践。 首先,我们来探讨基于注解的单表操作。在 Mybatis 中,我们可以使用 @Mapper 和 @Select、@Insert、@...