- 浏览: 293783 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
wangweiying123:
import com.sse.monitor.bean.Mes ...
一个项目看java TCP/IP Socket编程(1.3版) -
daxiaoli123:
求源码 448485223@qq.com
一个项目看java TCP/IP Socket编程(1.3版) -
jeromexf:
楼主,求源码,万分感谢(jeromexf@gmail.com) ...
一个项目看java TCP/IP Socket编程(1.3版) -
cuishen:
注意: 网上有人说IE8以下不支持Max-Age, 上面的代码 ...
Response Header Set-Cookie difference in cross browser -
zhunengfei:
刚接触socket,不是太明白,楼主的例子里面工具给的不是很全 ...
一个项目看java TCP/IP Socket编程(1.3版)
对于iBATIS一对多/多对多的问题,传统的办法是在一对多/多对多关联的属性上再做一次子查询,这个解决办法很简单易懂,但是有个缺点,会导致N+1 selects,导致查询的性能瓶颈,更好的解决办法是sql做一个表连接,然后主表的resultMap配置上加“groupBy='...'”属性,这样一次查询就搞定,避免了N+1问题,下面请看代码:
com.cuishen.sqlmaptest.vo.Menu如下:
测试类如下:
是不是很简单,但是有三点需要注意:
1. 注意这个配置:<result property="subMenus" resultMap="sys.sub-menu-map" />,resultMap是sys.sub-menu-map,要加命名空间sys,而不是sub-menu-map,否则iBATIS可能会报错!
2. 一对多/多对多映射的集合属性subMenus必须用简单的getter/setter,不能在getter/setter里做其他处理,否则会导致iBATIS报错!!
3. 在iBATIS2.3.0.677上测试通过,更老旧的版本可能不支持该解决方案!!
从iBATIS3.0开始该解决方案的配置改为:
更详细的信息请参阅iBATIS-3-User-Guide
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> <sqlMap namespace="sys"> <typeAlias alias="menu" type="com.cuishen.sqlmaptest.vo.Menu" /> <resultMap id="sub-menu-map" class="menu"> <result property="id" column="subid" /> <result property="name" column="subname" /> <result property="url" column="suburl" /> <result property="layer" column="sublayer" /> <result property="grade" column="subgrade" /> <result property="position" column="subposition" /> <result property="parentId" column="subparentid" /> </resultMap> <resultMap id="menu-map" class="menu" groupBy="id"> <result property="id" column="id" /> <result property="name" column="name" /> <result property="url" column="url" /> <result property="layer" column="layer" /> <result property="grade" column="grade" /> <result property="position" column="position" /> <result property="parentId" column="parentid" /> <result property="subMenus" resultMap="sys.sub-menu-map" /> </resultMap> <select id="getTopMenu" parameterClass="java.util.HashMap" resultMap="sys.menu-map"> select t.id as id,t.name as name,t.url as url,t.layer as layer,t.grade as grade,t.position as position, t.parentid as parentid,s.id as subid,s.name as subname,s.url as suburl,s.layer as sublayer, s.grade as subgrade,s.position as subposition,s.parentid as subparentid from menu t left join menu s on t.id = s.parentid where t.layer=1 order by t.position, s.position </select> </sqlMap>
com.cuishen.sqlmaptest.vo.Menu如下:
package com.cuishen.sqlmaptest.vo; import java.util.List; /** * POJO - 菜单 * @author cuishen */ public class Menu implements java.io.Serializable { private static final long serialVersionUID = 7172793340860021199L; private Long id; private String name; private String url; private Short layer; private Short grade; private Short position; private Long parentId; private List subMenus; public Menu() { } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } //... //getter、setter方法 //... public List getSubMenus() { return subMenus; } public void setSubMenus(List subMenus) { this.subMenus = subMenus; } }
测试类如下:
package com.cuishen.sqlmaptest; import java.sql.SQLException; import java.util.List; import com.ibatis.sqlmap.client.SqlMapClient; import com.cuishen.sqlmaptest.vo.Menu; /** * iBATIS 1:N & M:N(N+1 selects)解决方案 * @author cuishen */ public class Test { public static void main(String args[]) throws SQLException { SqlMapClient sqlMapClient = SqlMapClientFactory.getSqlMapClient(); List topMenus = sqlMapClient.queryForList("getTopMenu", null); for(int i = 0; i < topMenus.size(); i++) { Menu menu = (Menu)topMenus.get(i); List subMenus = (List)menu.getSubMenus(); System.out.println("top menu name >> " + menu.getName()); for(int j = 0; j < subMenus.size(); j++) { Menu subMenu = (Menu)subMenus.get(j); System.out.println(">> sub menu name >> " + subMenu.getName()); } } } }
是不是很简单,但是有三点需要注意:
1. 注意这个配置:<result property="subMenus" resultMap="sys.sub-menu-map" />,resultMap是sys.sub-menu-map,要加命名空间sys,而不是sub-menu-map,否则iBATIS可能会报错!
2. 一对多/多对多映射的集合属性subMenus必须用简单的getter/setter,不能在getter/setter里做其他处理,否则会导致iBATIS报错!!
3. 在iBATIS2.3.0.677上测试通过,更老旧的版本可能不支持该解决方案!!
从iBATIS3.0开始该解决方案的配置改为:
<resultMap id="blogResult" type="Blog"> <id property=”id” column="blog_id" /> <result property="title" column="blog_title"/> <collection property="posts" ofType="Post"> <id property="id" column="post_id"/> <result property="subject" column="post_subject"/> <result property="body" column="post_body"/> </collection> </resultMap>
更详细的信息请参阅iBATIS-3-User-Guide
- testSqlMap.rar (2 MB)
- 下载次数: 407
评论
2 楼
PointOnLine
2010-03-12
还有groupBy的配置
1 楼
PointOnLine
2010-03-12
对于<result property="subMenus" resultMap="sys.sub-menu-map" /> 有没有更详细的说明文档? email: 454410723@qq.com
发表评论
-
Response Header Set-Cookie difference in cross browser
2014-07-02 21:26 8324如果你项目中需要在server端把cookie写回client ... -
struts1 redirect issue
2014-05-08 23:04 1282近日突然发现struts1 的redirect有很大的限制,它 ... -
Cookie 和 sessionStorage的区别
2014-03-18 23:21 1427expire设为null的cookie是session sco ... -
http https get post 的区别,定义/安全性/性能
2014-02-20 18:19 14575HTTP / HTTPS request 的 get / po ... -
struts1的tiles导致的response cache无法禁止的issue
2014-02-15 00:13 1449近日struts 1项目中遇到一个很怪异的问题,项目中的所有. ... -
XFS攻击一例
2013-08-13 17:50 5933XFS: Cross Frame Script (跨框架脚本) ... -
XSS攻击一例
2013-08-12 17:55 1735XSS 全称(Cross Site Scripting) 跨站 ... -
maven3 compile failed, class file not found issue
2013-07-16 18:31 1385今日maven3 build 老是失败,停在compile,报 ... -
maven plugin for eclipse 3.6+
2013-07-04 18:24 1095this for eclipse 3.6 down http: ... -
JQuery异步提交表单在Firefox button onclick事件下可能导致重复提交
2013-06-04 19:58 4815当我们处理button的onclick事件时,在onclick ... -
AJAX JQuery 提交表单乱码问题解决方案
2012-10-16 13:59 13612最近遇到AJAX/JQuery 提交form表单出现乱码的问题 ... -
hibernate多对多级联删除总结
2010-04-02 07:46 3523A. 应用场景: 一个简单的权限系统的例子: 有三张主表: ... -
最原始的O/R Mapping,比hibernate轻的多
2009-12-04 17:44 3454hibernate的O/R Mapping确实 ... -
Apache_WebLogic9.2.2安装及集群、SSL配置手册
2009-10-09 17:27 1493Apache_WebLogic9.2.2安装及集群、SSL配置 ... -
浅析Java web程序之客户端和服务器端交互原理
2009-09-16 21:18 47051. 协议 a. TCP/IP整体构 ... -
spring aop 事务配置总结
2009-08-06 13:47 5553以下配置基于spring 1x ... -
从源代码解读spring之DataSource实现和FactoryBean模式
2009-07-22 13:25 7929大家平日使用spring + hibernate做项目的时候大 ... -
从源代码解读hibernate之数据库连接
2009-07-17 15:59 3695大家都知道hibernate是在JDBC基础上的封装,那么它的 ... -
AIX环境下JDK1.5 + WebLogic9.2.2安装配置手册
2009-01-22 13:15 2316项目中用到: 服务器:IBM 64位 小型机 操作系统:AI ... -
从源代码解读spring IOC容器
2008-09-19 09:43 3948spring IOC容器(Inversion of Contr ...
相关推荐
6.2.3 避免N+1查询问题 105 6.3 继承 107 6.4 其他用途 109 6.4.1 使用语句类型和DDL 109 6.4.2 处理超大型数据集 109 6.5 小结 115 第7章 事务 116 7.1 事务是什么 116 7.1.1 一个简单的银行转账示例 116 7.1.2 ...
12、写Hibernate的一对多和多对一双向关联的orm配置? 9、hibernate的inverse属性的作用? 13、在DAO中如何体现DAO设计模式? 14、spring+Hibernate中委托方案怎么配置? 15、spring+Hibernate中委托方案怎么配置? ...
12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...
12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...
12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...
12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...
12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...
12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中...
12、写Hibernate的一对多和多对一双向关联的orm配置? 134 9、hibernate的inverse属性的作用? 134 13、在DAO中如何体现DAO设计模式? 134 14、spring+Hibernate中委托方案怎么配置? 134 15、spring+Hibernate中委托...
12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? ...... 7 2、Java 有没有 goto? .......................................................................................................