- 浏览: 761507 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
飞出四季做的茧:
z赞
JAVA日期格式化字符串的24小时制 -
daniaowansui:
亲测,可行!
JS 在open打开的窗口中调用父页面JS方法 -
zh_123:
ie9测试过吗貌似列不能冻结啊!
Css 实现的表头, 表列冻结, 可以超大数据量 -
Jxdwuao:
IXR 写道少年,在哪里混呢?在虹桥机场这边阿, 兄弟你在何方 ...
修改JS文件FF刷新不生效 -
IXR:
少年,在哪里混呢?
修改JS文件FF刷新不生效
目前公司的查询结果是关联的数据结构,
酒店列表的酒店对象 有个字段是 价格计划列表 .
对于这种关联的一对多数据结构, 我们可以在SQLMAP中完成, 而不必对查询结果进行遍历, 还可以配置延迟加载, 提高性能
SQLMAP:
<resultMap class="com.woyo.travel.hotel.dto.HotelSRVDto" id="hotelSearchDto"> <result property="hotelId" column="hotel_id" /> <result property="code" column="code" /> <result property="pricePlanList" column="{hotelId=hotel_id,beginDate=begin_date,endDate=end_date}" select="com.woyo.travel.hotel.dto.SearchSRVDto.searchPlanList" /> </resultMap> <!--对象com.woyo.travel.hotel.dto.HotelSRVDto中必须存在 hotelId , beginDate , endDate 属性, 否则会报SQLMAP属性错误--> <select id="searchPlanList" resultMap="pricePlanSearchDto"> SELECT pp.id id, hr.id room_id, hr.broadband broad_band, pp.pay_way pay_way_name, "cu xiao" promotion_info FROM t_htl_price_plan pp LEFT JOIN t_htl_hotel_room hr ON pp.room_id = hr.id LEFT JOIN t_htl_add_value_strategy avs ON pp.id = avs.price_plan_id WHERE hr.hotel_id=#hotelId# AND pp.begin_date >= #beginDate# AND pp.end_date <= #endDate# </select>
最近 , 公司的数据结构也要使用这种的关联加载 。 结构 :
使用以上的方式加载, 属于 N+1 的加载方式, 比较消耗查询效率 。 。
这里碰到使用 SQLMAp 必须要注意的几个 地方:
内部类不能被 SQLMAP 识别到:
比如 : TheoryDesView 是 类 SuitAdminView 的内部类, 以下的写法, Ibatis 就不能识别。
如果有看到文章的牛人找到可以识别的方法请指教。 我就另外开了一个单独的类。
<resultMap class="com.cares.flyingnet.crs.simulator.dto.SuitAdminView.TheoryDesView" id="TheoryDesView" > <result property="id" column="TRAINING_THEORY_ID" /> <result property="t_date" column="t_date" /> <result property="t_content" column="t_content" /> <result property="ORDER_NUM" column="ORDER_NUM" /> </resultMap>
于是采用了 另外的一种 Result Map 的加载方式 。
这种方式用 Left Join 一次关联查询出所有的数据。在SQLMAP里面使用 GROUPBY 属性分组。
<typeAlias alias="SuitAdminView" type="com.cares.flyingnet.crs.simulator.dto.SuitAdminView." /> <resultMap class="com.cares.flyingnet.crs.simulator.dto.SuitAdminView" id="SuitAdminViewRstMap" groupBy="suiteId"> <result property="isScheduled" column="isScheduled" /> <!-- <result property="changed" column="changed" /> --> <result property="suiteId" column="suiteId" /> <result property="sign_property" column="sign_property" /> <result property="batch_no" column="batch_no" /> <result property="studentLock" column="studentLock" /> <result property="bench_Month" column="bench_Month" /> <result property="checkin_date" column="checkin_date" /> <result property="suite_no" column="suite_no" /> <result property="ac_type" column="ac_type" /> <result property="train_com" column="train_com" /> <result property="releaseStatus" column="releaseStatus" /> <result property="theoryDesViewListMap" resultMap="SuitAdminView.TheoryDesView" /> <result property="training_simDesViewListMap" resultMap="SuitAdminView.TrainingSimDesView" /> <result property="studentListMap" resultMap="SuitAdminView.PilotInfForVoteDto" /> <result property="simTeacherList" resultMap="SuitAdminView.SimTeacherView" /> </resultMap> <resultMap class="com.cares.flyingnet.crs.simulator.dto.TheoryDesViewMap" id="TheoryDesView" > <result property="id" column="TRAINING_THEORY_ID" /> <result property="t_date" column="t_date" /> <result property="t_content" column="t_content" /> <result property="ORDER_NUM" column="ORDER_NUM" /> </resultMap> <resultMap class="com.cares.flyingnet.crs.simulator.dto.Training_simDesViewMap" id="TrainingSimDesView" > <result property="id" column="TRAINING_SIM_ID" /> <result property="s_date" column="s_date" /> <result property="s_time" column="s_time" /> <result property="s_no" column="s_no" /> <result property="S_ORDER" column="S_ORDER" /> <result property="s_type" column="s_type" /> <result property="teacherName" column="simTeacherName" /> <result property="unitName" column="simUnitName" /> <result property="changed" column="simChanged" /> <result property="SIM_TEACHER_ID" column="SIM_TEACHER_ID" /> </resultMap> <resultMap class="com.cares.flyingnet.crs.simulator.dto.PilotInfForVoteDto" id="PilotInfForVoteDto" > <result property="pilotName" column="pilotName" /> <result property="unitName" column="unitName" /> <result property="unitCode" column="unitCode" /> <result property="month1" column="month1" /> <result property="month2" column="month2" /> <result property="valid_end_date" column="valid_end_date" /> <result property="technicalStandard" column="technicalStandard" /> <result property="changed" column="changed" /> <result property="position" column="position" /> </resultMap> <resultMap class="com.cares.flyingnet.crs.simulator.dto.SimTeacherDto" id="SimTeacherView" > <result property="simTeacherId" column="simTeacherId" /> <result property="teacherNo" column="teacherNo" /> <result property="TType" column="TType" /> <result property="TUnit" column="TUnit" /> <result property="bigSuiteNo" column="tBigSuiteNo" /> <result property="pilotId" column="tPilotId" /> <result property="pilotName" column="tPilotName" /> <result property="totalDay" column="tTotalDay" /> <result property="startDate" column="tStartDate" /> <result property="endDate" column="tEndDate" /> <result property="needType" column="tNeedType" /> <result property="changed" column="tChanged" /> <result property="teacherLock" column="teacherLock" /> <result property="TUnitName" column="TUnitName" /> </resultMap> <!-- 查询总排班表 wuao 2011-10-14 --> <select id="suitAdminViewList" parameterClass="java.util.Map" resultMap="SuitAdminViewRstMap"> SELECT s.IS_SCHEDULED isScheduled, <!-- 'true' changed, --> s.SUITE_ID suiteId, s.SIGN_PROPERTY sign_property, s.BATCH_NO batch_no, s.STUDENT_LOCK studentLock, s.BENCH_MONTH bench_Month, s.CHECKIN_DATE checkin_date, s.SUITE_NO suite_no, s.AC_TYPE_CODE ac_type, s.TRAIN_COM train_com, s.RELEASE_STATUS releaseStatus, h.TRAINING_THEORY_ID, h.T_DATE t_date, h.T_CONTENT t_content, h.ORDER_NUM ORDER_NUM, m.TRAINING_SIM_ID, m.S_DATE s_date, m.S_TIME s_time, m.S_NO s_no, m.S_ORDER S_ORDER, m.S_TYPE s_type, m.SIM_TEACHER_ID, '' simTeacherName, '' simUnitName, '' simChanged, stubasicinfo.pilotName, stubasicinfo.unitName, stubasicinfo.unitCode, stubasicinfo.month1, stubasicinfo.month2, stubasicinfo.valid_end_date, stubasicinfo.technicalStandard, stubasicinfo.changed, stubasicinfo.position, teabasicinfo.simTeacherId as simTeacherId, teabasicinfo.teacherNo as teacherNo, teabasicinfo.TType as TType, teabasicinfo.TUnit as TUnit, teabasicinfo.bigSuiteNo as tBigSuiteNo, teabasicinfo.pilotId as tPilotId, teabasicinfo.pilotName as tPilotName, teabasicinfo.totalDay as tTotalDay, teabasicinfo.startDate as tStartDate, teabasicinfo.endDate as tEndDate, teabasicinfo.needType as tNeedType, teabasicinfo.changed as tChanged, teabasicinfo.teacherLock as teacherLock, teabasicinfo.TUnitName as TUnitName FROM SIM_SUITE s left join SIM_TRAINING_THEORY h on s.SUITE_ID = h.SUITE_ID left join SIM_TRAINING_SIM m on s.SUITE_ID = m.SUITE_ID left join ( SELECT distinct P.PILOT_NAME pilotName, simS.SUITE_ID SUITE_ID, U.UNIT_NAME unitName, U.UNIT_CODE unitCode, S.MONTH1 month1, S.MONTH2 month2, S.valid_end_date as valid_end_date, CASE WHEN SUBSTR(NVL(S.TECHNICAL_STANDARD, '21'), 0, 1) = '1' THEN '机长' ELSE '副驾驶' END technicalStandard, simS.CHANGED changed, simS.position position FROM flight.PILOT_BASIC_INFO P, flight.PILOT_TECHNICAL_STANDARD S, flight.BD_AERO_UNIT U,sim_student_assign simS WHERE P.BASIC_INFO_ID = S.PILOT_INFO_ID AND U.UNIT_CODE = SUBSTR(P.AERO_UNIT_CODE, 0, 4) AND (S.MAIN_AC_TYPE_CODE = '11' OR S.MAIN_AC_TYPE_CODE = '12' OR S.MAIN_AC_TYPE_CODE = '14') AND P.WORK_TYPE = '5201' AND S.MONTH1 IS NOT NULL AND S.MONTH2 IS NOT NULL AND P.VALIDITY='VALID' and p.basic_info_id=simS.Pilot_Id ) stubasicinfo on s.SUITE_ID = stubasicinfo.SUITE_ID left join ( select t.SIM_TEACHER_ID as simTeacherId, t.TEACHER_NO as teacherNo, t.T_TYPE as TType, t.T_UNIT as TUnit, t.BIG_SUITE_NO as bigSuiteNo, t.PILOT_ID as pilotId, p.pilot_name as pilotName, t.TOTAL_DAY as totalDay, t.START_DATE as startDate, t.END_DATE as endDate, t.NEED_TYPE as needType, t.CHANGED as changed, t.TEACHER_LOCK as teacherLock, d.unit_name as TUnitName from SIM_TEACHER t left join flight.bd_aero_unit d on substr(t.t_unit,1,4)=d.unit_code left join flight.pilot_basic_info p on p.basic_info_id = t.PILOT_ID ) teabasicinfo on m.SIM_TEACHER_ID = teabasicinfo.simTeacherId WHERE s.FIXED_YEAR=#fixedYear# AND s.AC_TYPE_CODE=#acType# AND s.TRAIN_COM=#trainCom# AND s.IS_SCHEDULED = 'Y' <dynamic> <isNotNull prepend="and" property="batchNo"> s.BATCH_NO=#batchNo# </isNotNull> <isNotNull prepend="and" property="suiteId"> s.SUITE_ID=#suiteId# </isNotNull> <isNotNull prepend="and" property="benchMonth"> s.BENCH_MONTH=#benchMonth# </isNotNull> <isNotNull prepend="and" property="isScheduled"> s.IS_SCHEDULED=#isScheduled# </isNotNull> <isNotNull prepend="and" property="startSuiteNo"> s.SUITE_NO between #startSuiteNo# and #endSuiteNo# </isNotNull> </dynamic> ORDER BY s.SUITE_NO </select>
这种方式, 查询出来子列表的数据仍然有很多是重复的。
就到 Java 里面处理 过滤。
发表评论
-
mysql 磁盘空间占用太高
2024-10-21 22:51 0MYSQL数据库虚拟机磁盘满,需要清理 先使用磁盘命令df ... -
MYSQL的JSON格式数据查询
2024-08-20 09:09 0Mysql中字段为varchar类型,但是储存的是JSON ... -
Oracle查询当前用户全部数据表和注释
2022-07-21 14:14 0select * from user_col_ ... -
数据表未设置索引导致链接数爆满
2021-01-11 09:32 0周六早上接到故障报告数据库无法链接,链接数爆满了 DBA分 ... -
SQL执行后表数据未更新为新表数据
2020-12-15 09:13 0SQL执行后表数据未更新为新表数据 经检查,是子查询中的查 ... -
Oracle误删数据恢复
2020-09-28 16:19 0找回2020-09-23 12:00:00之前的 ... -
Oracle申请创建用户后不能写入数据
2019-06-11 22:43 0公司生产数据库,申请创建后,使用用户名称登陆。 之后可以创 ... -
oracle sequences 不按顺序增加
2019-02-11 16:17 0Oracle数据库中建立LOG_DATE统计表,每天按照L ... -
Oracle按特定周统计数据
2019-01-14 16:41 0主要是将礼拜六-下个礼拜五的数据经过函数转化为一个日期 N ... -
64位WindowsOracle client配置
2016-02-16 16:07 872系统是64位的,但是以前的Oracle XE 是 32 位 ... -
Oracle Group By 分组后取最大/小字段值
2014-08-13 13:34 3288统计用户回复的信息, 要对其进行过滤, 每个手机号码只取回 ... -
Excel 中组织列数据
2014-08-05 15:32 0需要把上线航站列表的航站数据组织成JSON格式,如: ... -
JAVA中打印对象值和HQL日期比较
2014-07-11 09:44 895把对象的toString方法覆盖 @Over ... -
RedHat数据库配置Tomcat安装
2014-03-20 09:25 1044查看系统版本 #cat /etc/redhat-rele ... -
Oracle创建用户
2014-01-24 15:16 1017create user test identified by ... -
更新主表日期为关联表日期中最小的
2013-05-21 15:10 1125模拟机发现签到日期计算错误, 应该取场次日期和理论课日期中最 ... -
更新签到日期SQL
2013-01-07 10:32 1129签到日期出现错误, 工具类判断都是正数,总是理论课日期, 需要 ... -
Oacle 日期函数的应用
2012-12-19 15:00 1181Oracle 使用 months_between(ddd ... -
高级SQL优化
2012-12-12 09:44 948http://www.iteye.com/topic/1128 ... -
Oracle排序取第一条数据
2012-11-29 15:10 2362需要更新套组的大单位, 规则是取第一个学员(套组ID最小)的单 ...
相关推荐
在这个"Ibatis的简单例子"中,我们将探讨如何使用Ibatis进行数据库的增删改查(CRUD)操作以及联合查询。 1. **安装与配置**: 在开始之前,你需要在项目中添加Ibatis的依赖,通常是通过Maven或Gradle。在Maven的`...
在Ibatis中,复杂查询通常涉及到多个表的联接、条件动态拼接、子查询以及各种数据类型的处理。文档"Ibatis复杂查询语句.doc"所展示的查询语句就是一个很好的例子,展示了Ibatis如何处理复杂的数据库操作。接下来,...
在本资源中,"iBatis条件查询"着重展示了如何根据业务需求定制SQL语句进行数据检索,尤其在不涉及复杂关联查询的情况下,iBatis可以提供高效且简单的解决方案。 首先,iBatis的核心概念是SQL Map,它是一个XML配置...
【标题】:深入理解iBATIS的查询机制 【描述】:本文将详细解析iBATIS框架中的查询功能,包括处理复杂对象关系、XML映射和数据集操作,旨在帮助开发者充分利用iBATIS进行高效数据库操作。 【标签】:iBATIS、查询...
### ibatis and和or联合查询知识点 #### 一、ibatis简介 ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀开源数据访问框架。ibatis消除了几乎所有的JDBC对象操作,提供了一个简单的基本API,它通过XML或...
在多表查询中,Ibatis 提供了多种方式来处理复杂的关联查询,包括一对一、一对多、多对一和多对多等关系。在这个例子中,我们将探讨如何在 Ibatis 中实现一对多的关系查询。 首先,我们创建了两个表:`book` 和 `...
在Ibatis中,多表查询是一项重要的功能,它允许我们处理复杂的数据库操作,例如一对多、多对一或一对一的关系。在这个例子中,我们将探讨如何使用Ibatis进行一对多的多表查询,以`book`和`user`两个表为例。 首先,...
多表查询通常涉及到 JOIN 操作,例如内连接(INNER JOIN)、左连接(LEFT JOIN)等,这些操作可以帮助我们从多个相关联的表中获取所需的数据。 #### 三、多表查询示例分析 根据提供的部分代码,我们可以看到一个多...
本文将详细介绍如何使用iBatis进行连接查询。 首先,我们需要理解iBatis的工作原理。iBatis并不是像Hibernate那样完全自动管理数据库操作,而是将SQL语句的编写权交给开发者,这样可以更好地控制查询性能和复杂性。...
本文将深入探讨如何在iBATIS中进行主子表查询,以及涉及到的相关技术如一对多关系、日志管理库log4j等。 首先,主子表查询是数据库设计中常见的场景,通常涉及到一个“父”表(主表)和一个或多个“子”表(从表)...
当我们需要进行多表查询时,iBatis提供了一种高效且易于管理的方式。本文将深入探讨iBatis在处理多表查询时的具体步骤和技巧。 ### 1. iBatis简介 iBatis 是一个基于Java的持久层框架,它简化了数据库访问,并避免...
- 使用`EXISTS`子查询通常比直接关联查询更高效,尤其是在数据量大的情况下。 - 避免在`WHERE`子句中使用多个条件或`OR`操作符,而是应该使用`IN`操作符或者`UNION ALL`合并多个查询。 3. Struts、Spring与Ibatis...
本教程聚焦于如何使用Ibatis查询指定ID的单个对象,这对于日常的数据检索工作尤为重要。 首先,理解Ibatis的基本架构。Ibatis不是一个完整的ORM(对象关系映射)框架,而是介于SQL和Java之间的桥梁,允许开发者编写...
Ibatis提供了多种方式来实现映射,如自动类型匹配、自定义类型处理器、复杂关联映射等。 7. **缓存机制**:Ibatis内置了本地缓存和二级缓存,可以提高数据读取速度。本地缓存作用于单个SqlSession,而二级缓存则...
ibatis配置多表关联(一对一、一对多、多对多
本文将围绕“IBATIS开发使用实例”这一主题,深入解析复杂SQL查询的应用,尤其是如何利用SQL进行多表关联、条件筛选以及聚合函数的使用。 ### IBATIS简介 IBATIS,现被称为MyBatis,是一种优秀的持久层框架,它...
通过阅读文档,你可以了解如何配置Ibatis、创建Mapper接口和XML映射文件,以及如何处理复杂的查询和关联。 在说明文档中,通常会包含以下内容: 1. 安装和配置:介绍如何将Ibatis集成到项目中,包括Maven或Gradle...
本篇将详细讲解Ibatis在实现模糊查询、关联查询以及增删改查操作时的关键知识点。 首先,模糊查询是数据库操作中常见的功能,Ibatis通过`<if>`标签或`<where>`标签配合`#{}`占位符来实现。例如,如果你有一个用户...
ibatis支持多种ORM映射策略,包括一对多关联和一对一关联。这些关联可以使用嵌套查询或嵌套结果的方式实现,允许开发者在多个表之间建立复杂的关系。此外,ibatis还支持延迟加载,即只有在真正需要时才加载关联对象...