- 浏览: 932947 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (251)
- WebService (17)
- IBatis (22)
- Hibernate (1)
- SpringMVC - 基础篇 (32)
- Spring (15)
- Java (11)
- JVM及调优 - 基础篇 (4)
- 集群 (14)
- 数据库 (17)
- WebSphere (5)
- 多线程 (4)
- 集合、容器 (2)
- DB Pool (1)
- Power Designer (5)
- Maven基础 (5)
- JS (14)
- WEB 前端 (5)
- 实用小工具 (17)
- 社会、人 (2)
- 乱七八糟 (18)
- ASM&CGLIB - 基础篇 (12)
- 缓存 (1)
- 性能 (1)
- 设计之殇 (1)
- 分布式事务 (1)
- 单点登录 (11)
- 分布式 Session (4)
- Memcached - 基础篇 (6)
最新评论
-
一笑_奈何:
楼主写的还真行不错。
扫盲贴 - J2EE集群之JNDI集群实现 -
xuezhongyu01:
博主写的很详细,但最后还是没明白,最后调用BasicDataS ...
Spring中的destroy-method方法 -
Mr梁:
commons-fileupload.jar commons- ...
SpringMVC 中文件上传 MultipartResolver -
Eywa:
总结的很不错
ORACLE CASE WHEN 及 SELECT CASE WHEN的用法 -
TryRelax:
fastjson 比 jackson 好用吧?
Spring MVC Jackson DateFormat
ibatis高级特性,处理表与表之间的关联。ibatis中,提供了Statement嵌套支持,通过Statement嵌套,我们可以实现关联数据的操作。
用表lock和key为例,一个lock可以配多个key,一个key只能对应一个lock.
1、数据库表
create table lock( id int, lockName varchar ); create table key( id int, lockId int, keyName varchar );
2、定义映射类:
在进行表关联的时候一定要注意:关联的2个pojo之间的联系,还有就是配置文件之间的关联。
public class Key { private int id; private int lockId; private String keyName; private Lock lock; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getLockId() { return lockId; } public void setLockId(int lockId) { this.lockId = lockId; } public String getKeyName() { return keyName; } public void setKeyName(String keyName) { this.keyName = keyName; } public Lock getLock() { return lock; } public void setLock(Lock lock) { this.lock = lock; } } public class Lock { private int id; private String lockName; private List<Key> keys; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getLockName() { return lockName; } public void setLockName(String lockName) { this.lockName = lockName; } public List<Key> getKeys() { return keys; } public void setKeys(List<Key> keys) { this.keys = keys; } }
3、 配置ibatis的 SqlMapping 文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="lock"> <typeAlias alias="Key" type="com.longsky.ibatis.lock.model.Key"/> <typeAlias alias="Lock" type="com.longsky.ibatis.lock.model.Lock"/> <resultMap id="KeyResult" class="Key"> <result property="id" column="id"/> <result property="keyName" column="keyName"/> <result property="lock" column="lockId" select="getLockById"/> </resultMap> <!-- 通过key表中保存的lock的id实现的一对一关联,ibatis会使用getLockById(lockId)的结果填充lock属性 --> <resultMap id="LockResult" class="Lock"> <result property="id" column="id"/> <result property="lockName" column="lockName"/> <result property="keys" column="id" select="getKeysByLockId"/> </resultMap> <!-- 通过lock表中的id实现的一对多关联,ibatis会使用getKeysByLockId(id)得到的List填充keys属性 --> <select id="selectAllkeys" resultMap="KeyResult"> <![CDATA[ select id,lockId,keyName from lock_key_table ]]> </select> <select id="getLockById" parameterClass="int" resultClass="Lock"> <![CDATA[ select id,lockName from lock where id = #value# ]]> </select> <select id="selectAllLocks" resultMap="LockResult"> <![CDATA[ select id,lockName from lock ]]> </select> <select id="getKeysByLockId" parameterClass="int" resultClass="key"> <![CDATA[ select id,lockId,keyName from lock_key_table where lockId = #value# ]]> </select> </sqlMap>
4、测试类:
import java.io.IOException; import java.io.Reader; import java.sql.SQLException; import java.util.List; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; import com.longsky.ibatis.lock.model.Key; import com.longsky.ibatis.lock.model.Lock; public class Test { @SuppressWarnings("unchecked") public static void main(String[] args) throws SQLException { SqlMapClient sqlMapper=null ; try{ Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml"); sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader); reader.close(); } catch(IOException e){ throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e); } List<Lock> locks=(List<Lock>)sqlMapper.queryForList("selectAllLocks"); //取Lock对象。 for(int i=0;i<locks.size();i++){ Lock lock=(Lock)locks.get(i); System.out.println("lock name = ["+lock.getLockName()+"] has keys as follows:"); //从Lock对象取List<Key>。 List<Key> keys=lock.getKeys(); for(int j=0;j<keys.size();j++){ System.out.println("key"+j+":"+keys.get(i).getKeyName()); } } } }
多表关联查询大量数据时建议采用存储过程来处理。
评论
2 楼
温柔的羊
2011-09-06
key
和key表作用类似
java_ganbin 写道
写得不够详细,lock_key_table哪来的?没看到你创建
和key表作用类似
1 楼
java_ganbin
2011-09-01
写得不够详细,lock_key_table哪来的?没看到你创建
发表评论
-
iBATIS缓存
2011-12-12 21:33 1166为了提高应用程序性 ... -
iBatis批处理(batch)
2011-09-05 23:47 6959spring集成了ibatis的批量提交的功能,我们只要调用A ... -
一个Spring+iBatis框架进行batch处理的问题
2011-09-05 23:23 1623在使用org.springframework.jdbc.dat ... -
ibatis 注意点
2011-08-08 19:28 1385insert,update,delete 返回值 inser ... -
ibatis 之 动态SQL查询(dynamic )
2011-06-12 12:13 2290映射文件: <select id=" ... -
ibatis 之 复杂类型集合的属性
2011-06-12 12:10 2150Result Map还可以装入代表复杂类型对象集合(List) ... -
ibatis 之 复杂类型属性(即自定义类型的属性)
2011-06-12 11:54 3453复杂类型用以表示在数 ... -
ibatis 之 java.util.Map作为parameterClass和resultClass
2011-06-12 11:21 51651.Map作为parameterClass 映射 ... -
ibatis Tips 之 resultMap
2011-05-29 21:04 1213转载:http://xulongfa.iteye.com/bl ... -
ibatis Tips之parameterMap
2011-05-29 21:03 1344转载:http://xulongfa.iteye.com/bl ... -
iBatis查询API
2011-05-29 12:34 1857转载:http://sarin.iteye.com/blog/ ... -
iBatis查询select详解
2011-05-29 12:20 2221转载:http://sarin.iteye.com/blog/ ... -
ibatis 动态映射机制
2011-05-22 14:15 1460对于这个组合查询页 ... -
sqlMapConfig.xml配置文件详解
2011-05-22 13:04 3557sqlMapConfig.xml配置文件详解: X ... -
ibatis缓存
2011-05-22 12:52 1368iBatis的缓存配置比较简单易懂,以我使用的iBati ... -
ibatis resultclass "java.util.hashmap" 缓存问题
2011-05-22 12:13 1526在做ibatis项目过程中遇到如下样式动态查询 <se ... -
ibatis # $区别
2011-05-22 11:55 14411、#可以进行预编译,进行类型匹配,#变量名# 会转化为 j ... -
iBATIS入门示例及注释
2011-05-08 18:20 1801工程的结构: 一、SqlMapConf ... -
iBATIS 三个版本小细节对比
2011-05-08 16:12 1205iBATIS 三个版本小细节对比 sqlMapConfig ... -
深入分析 iBATIS 框架之系统架构与映射原理
2011-05-07 12:48 1223原文:http://www.ibm.com/developer ...
相关推荐
本文将深入探讨如何在iBATIS中进行主子表查询,以及涉及到的相关技术如一对多关系、日志管理库log4j等。 首先,主子表查询是数据库设计中常见的场景,通常涉及到一个“父”表(主表)和一个或多个“子”表(从表)...
`user`表存储用户信息,包括`id`(主键),`name`,以及`book_oid`字段,这是一个外键,引用`book`表的`oid`,表示一个用户可以与多本书关联。 对应的Pojo类是Java对象,用于封装数据库中的数据。`User`类包含`id`,`...
为了演示Ibatis的多表查询功能,本文档采用了一个简单的例子:一个图书 (`book`) 表和一个用户 (`user`) 表,其中图书表与用户表之间存在一对多的关系。这意味着每本书可以有多个作者。 **图书表 (`book`) 结构:** ...
多表查询通常涉及到 JOIN 操作,例如内连接(INNER JOIN)、左连接(LEFT JOIN)等,这些操作可以帮助我们从多个相关联的表中获取所需的数据。 #### 三、多表查询示例分析 根据提供的部分代码,我们可以看到一个多...
当我们需要进行多表查询时,iBatis提供了一种高效且易于管理的方式。本文将深入探讨iBatis在处理多表查询时的具体步骤和技巧。 ### 1. iBatis简介 iBatis 是一个基于Java的持久层框架,它简化了数据库访问,并避免...
ibatis配置多表关联(一对一、一对多、多对多
在XML映射文件中,你可以使用标签或在标签内直接编写JOIN语句,以实现多个表的数据联合查询。记得在Mapper接口中定义对应的方法。 6. **Service层和DAO层**: 在实际项目中,我们通常会创建Service层来封装业务...
根据提供的部分代码,我们可以详细分析如何在ibatis中实现and与or联合查询。 ```xml <![CDATA[starttime>=#starttime#]]> <![CDATA[starttime]]> <![CDATA[rentcompany like '%$rentcompany%']]> ...
在Ibatis中,复杂查询通常涉及到多个表的联接、条件动态拼接、子查询以及各种数据类型的处理。文档"Ibatis复杂查询语句.doc"所展示的查询语句就是一个很好的例子,展示了Ibatis如何处理复杂的数据库操作。接下来,...
在Ibatis中,我们可以通过`<resultMap>`标签定义映射关系,然后在SQL查询中使用`<association>`标签来获取关联的数据。 2. **一对多映射**:如果一个表的数据对应另一个表的多条记录,例如订单表和订单详情表,一个...
iBATIS允许开发者通过XML配置文件来定义SQL语句和结果映射,这使得SQL与Java代码解耦,提高了代码的可维护性。虽然Java版本的iBATIS对XML数据的操作可能不再那么重要,但在某些场景下仍然有价值。iBATIS.NET则保留...
- 使用`EXISTS`子查询通常比直接关联查询更高效,尤其是在数据量大的情况下。 - 避免在`WHERE`子句中使用多个条件或`OR`操作符,而是应该使用`IN`操作符或者`UNION ALL`合并多个查询。 3. Struts、Spring与Ibatis...
在Java开发中,iBatis是一个流行的数据访问框架,它允许开发者将SQL语句与Java代码分离,提供了一种更灵活的方式来处理数据库操作。本文将详细介绍如何使用iBatis进行连接查询。 首先,我们需要理解iBatis的工作...
在本资源中,"iBatis条件查询"着重展示了如何根据业务需求定制SQL语句进行数据检索,尤其在不涉及复杂关联查询的情况下,iBatis可以提供高效且简单的解决方案。 首先,iBatis的核心概念是SQL Map,它是一个XML配置...
1. 易于使用:通过简单的XML或注解配置,可以轻松地将SQL语句与Java代码关联起来。 2. 动态SQL:支持条件判断、循环等动态构建SQL,使得SQL更具灵活性。 3. 缓存机制:内置了本地缓存和二级缓存,提高数据访问效率。...
本文将围绕“IBATIS开发使用实例”这一主题,深入解析复杂SQL查询的应用,尤其是如何利用SQL进行多表关联、条件筛选以及聚合函数的使用。 ### IBATIS简介 IBATIS,现被称为MyBatis,是一种优秀的持久层框架,它...
Ibatis提供了多种方式来实现映射,如自动类型匹配、自定义类型处理器、复杂关联映射等。 7. **缓存机制**:Ibatis内置了本地缓存和二级缓存,可以提高数据读取速度。本地缓存作用于单个SqlSession,而二级缓存则...
综上所述,"spring+ibatis 多表"项目涉及了后端的Spring和iBatis框架,它们共同处理数据库交互,特别是涉及到多表关联查询的复杂操作。前端则利用jQuery进行交互设计,包括分页查询的实现。这样的组合提供了一种高效...
在上述代码中,`sqlSessionFactory`是通过读取SqlMapConfig.xml创建的,`getMapper()`方法将Mapper接口与XML配置关联,然后就可以调用接口中的方法执行SQL并获取结果。 此外,Ibatis支持动态SQL,如`<if>`、`...