`
Phoenix_MVP
  • 浏览: 339655 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ibatis使用groupBy中返回一对多的对象

阅读更多

1. 场景

商品和活动见存在一对多关系,连表查询时,会返回多条记录,商品信息相同但是活动信息不同

 

FullMarketingProductDO商品对象中包含多个活动对象List<MarketingActivityDO> activityList

期望返回商品对象时,其中的活动对象也被想要的填充

 

 

 

2. 配置

 

 

	<resultMap id="fullMarketingProductResult" class="fullMarketingProductDO" extends="marketingProductResult" groupBy="id">
		<result property="activityList" resultMap="marketingProduct.marketingActivityResult" />				
	</resultMap>	

 

 

 

 	<resultMap id="marketingProduct.marketingActivityResult" class="marketingActivityDO" >
		<result property="id" column="marketing_activity_id" jdbcType="NUMBER"
			javaType="java.lang.Long" />
		<result property="name" column="name" jdbcType="VARCHAR"
			javaType="java.lang.String"/>
	</resultMap>
 

 

注意:

1) groupBy="id"表示按照商品ID进行分组;

2) marketingActivityDO的resultMap要加上sqlMap的namespace,否则会报错

<sqlMap namespace="marketingProduct">

 

3. 分页查询问题

   ibatis一对多查询不支持准确的分页。

 

      1) 商品和活动之间,一对多关系不确定,即一个商品可能参加2个活动,或者3个活动;

      2) 实际在数据查询时,返回的记录数实际是按sum(商品的活动数),如下图所示;

      3)分页的时候,都是按记录数来限定的。比如分页限定每页4个,那么就可能导致商品B的活动没有完整的包含。

id 商品 活动
1 A H1
1 A H2
2 B H2
2 B H3
2 B H4
分享到:
评论
2 楼 Phoenix_MVP 2012-08-12  
cevencheng 写道
对,我今天也发现了这个问题!! 连表查询解决了 N+1 问题,但是分页又出问题了。
貌似,真的不能select 一次实现分页。 有好解决办法么?

貌似没有
1 楼 cevencheng 2012-08-08  
对,我今天也发现了这个问题!! 连表查询解决了 N+1 问题,但是分页又出问题了。
貌似,真的不能select 一次实现分页。 有好解决办法么?

相关推荐

    ibatis 一对多 多对多完整映射

    本文将深入探讨如何在iBATIS中实现一对多和多对多的关系映射,并提供相关的源码分析和工具使用技巧。 **一对多关系映射** 在数据库设计中,一对多关系是指一个父记录可以与多个子记录关联,例如,一个用户可以有多...

    ibatis 一对多

    本文将深入探讨`iBatis` 中的一对多映射关系,以及如何通过源码理解和使用这个特性。 一对多映射是数据库关系模型中的常见概念,指的是一个父表(如部门表)可以对应多个子表(如员工表),每个部门可以有多个员工...

    ibatis配置多表关联(一对一、一对多、多对多

    ibatis配置多表关联(一对一、一对多、多对多

    ibatis 一对多关系映射

    首先,我们需要在映射文件中定义主表(一对一端)和从表(多对一端)的映射。假设我们有一个`User`类对应`users`表,一个`Order`类对应`orders`表,其中`orders`表有一个`user_id`字段作为外键关联到`users`表。 在...

    ibatis实战之一对多关联(源代码)

    在服务层或DAO层,通过SqlSessionFactory创建SqlSession,调用`selectList`方法,传入SQL查询ID,iBatis会自动处理一对多的关联,将数据填充到对应的Java对象中。 ```java SqlSession sqlSession = ...

    ibatis的的增删改查和一对一、一对多查询

    本篇文章将详细探讨iBatis在增删改查(CRUD)操作以及一对一和一对多关系映射中的应用。 首先,让我们了解一下iBatis的CRUD操作: 1. **创建(Create)**:在iBatis中,创建数据通常通过`&lt;insert&gt;`标签实现。你需要...

    Ibatis一对一映射提示

    一对一映射是iBATIS中处理关联关系的一种方式,它允许你在查询一个实体对象时,同时获取与其关联的另一个实体对象。这种映射通常涉及到主表和从表,主表中的一条记录对应从表中的唯一一条记录。 **配置一对一映射:...

    Mybatis/ibatiS多表映射 一对一 一对多 extjs前台取值 详细讲解

    总结来说,这个话题覆盖了Mybatis/iBatis中的多表映射,通过XML配置文件处理一对一和一对多关系,以及如何在ExtJS前端通过Model和Grid获取并展示这些数据。了解这些知识对于开发涉及多表交互的应用至关重要,能够...

    ibatis多对多关系(详细)

    iBatis多对多关系详解 iBatis是一种流行的持久层框架,用于简化Java应用程序...我们使用了三个数据库表来存储学生和教师之间的多对多关系,并使用iBatis来映射数据库表和Java对象。最后,我们实现了DAO来访问数据库。

    ibatis 使用手册

    开发指南会深入讲解如何初始化iBatis环境,包括设置配置文件、创建SqlMap文件、设计Mapper接口以及如何在Java代码中使用这些组件。此外,还会介绍如何处理结果集、执行批量操作、使用缓存机制等高级特性。 **iBatis...

    ibatis的使用教程

    Ibatis 是一个基于 Java 的持久层框架,源自于“internet”和“abatis”的组合,由 Clinton Begin 在 2001 年发起。起初,它专注于密码软件的开发,随着时间的发展,逐渐演变成一个轻量级的SQL映射框架,因其简单...

    ibatis一对一、多对一示例

    利用ibatis实现一对一、多对一的示例代码。每种关系用两种方式实现,具体的讲解可看我的博客http://blog.csdn.net/duwenchao1986/article/details/8565386

    ibatis教程_插入一个实体对象.rar

    在本教程中,我们将深入探讨如何使用iBATIS框架来插入一个实体对象。iBATIS是一个优秀的持久层框架,它允许开发人员将SQL语句直接嵌入Java代码中,简化了数据库操作。以下是对这个主题的详细讲解: 一、iBATIS简介 ...

    ibatis 相关使用文档及安装包ibatis 相关使用文档及安装包

    在iBATIS中,DAO可以通过接口实现,提供了一种面向对象的方式来操作数据库。 《iBATIS-SqlMaps-2-Tutorial.pdf》很可能是iBATIS SQL映射器的教程,对于初学者来说,这是快速上手的好资料。它可能涵盖了从安装iBATIS...

    ibatis2.0中文API

    在iBATIS 2.0中文API中,我们可以深入理解这个框架的核心功能和用法,包括一对多、多对一的关系映射、属性设置以及解决方案的详细解析。 首先,一对多和多对一的关系映射是ORM(对象关系映射)中的关键概念。在...

    ibatis 完美例子 一对多 批处理 事务 和 spring struts2集成

    在Java代码中,通过MyBatis的SqlSession对象加载或保存相关的对象,Ibatis会自动处理一对多的关联填充和删除规则。 接着,批处理操作是提高性能的关键。在Ibatis中,可以通过设置SqlSession的flushCache和useCache...

    Ibatis多表查询

    在多表查询中,Ibatis 提供了多种方式来处理复杂的关联查询,包括一对一、一对多、多对一和多对多等关系。在这个例子中,我们将探讨如何在 Ibatis 中实现一对多的关系查询。 首先,我们创建了两个表:`book` 和 `...

    ibatis官方中文文档

    对于那些想要了解或深入掌握iBATIS,特别是想在实际项目中使用iBATIS存储过程的开发者来说,这是一份非常宝贵的学习资料。 **iBATIS简介** iBATIS(现更名为MyBatis)是一个优秀的Java持久层框架,它简化了数据库...

    .net中使用iBATIS的小例子

    在.NET中使用iBATIS时,首先需要安装iBATIS.NET库。可以通过NuGet包管理器或者直接下载源码编译来获取。在VS2008项目中,添加对iBATIS.NET的引用,这样就可以开始配置和使用了。 接着,我们看压缩包内的"数据库.txt...

    ibatis多表查询

    在Ibatis中,多表查询是一项重要的功能,它允许我们处理复杂的数据库操作,例如一对多、多对一或一对一的关系。在这个例子中,我们将探讨如何使用Ibatis进行一对多的多表查询,以`book`和`user`两个表为例。 首先,...

Global site tag (gtag.js) - Google Analytics