- 浏览: 922262 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1126为了提高应用程序性 ... -
iBatis批处理(batch)
2011-09-05 23:47 6840spring集成了ibatis的批量提交的功能,我们只要调用A ... -
一个Spring+iBatis框架进行batch处理的问题
2011-09-05 23:23 1591在使用org.springframework.jdbc.dat ... -
ibatis 注意点
2011-08-08 19:28 1341insert,update,delete 返回值 inser ... -
ibatis 之 动态SQL查询(dynamic )
2011-06-12 12:13 2256映射文件: <select id=" ... -
ibatis 之 复杂类型集合的属性
2011-06-12 12:10 2116Result Map还可以装入代表复杂类型对象集合(List) ... -
ibatis 之 复杂类型属性(即自定义类型的属性)
2011-06-12 11:54 3422复杂类型用以表示在数 ... -
ibatis 之 java.util.Map作为parameterClass和resultClass
2011-06-12 11:21 51271.Map作为parameterClass 映射 ... -
ibatis Tips 之 resultMap
2011-05-29 21:04 1158转载:http://xulongfa.iteye.com/bl ... -
ibatis Tips之parameterMap
2011-05-29 21:03 1314转载:http://xulongfa.iteye.com/bl ... -
iBatis查询API
2011-05-29 12:34 1826转载:http://sarin.iteye.com/blog/ ... -
iBatis查询select详解
2011-05-29 12:20 2190转载:http://sarin.iteye.com/blog/ ... -
ibatis 动态映射机制
2011-05-22 14:15 1424对于这个组合查询页 ... -
sqlMapConfig.xml配置文件详解
2011-05-22 13:04 3525sqlMapConfig.xml配置文件详解: X ... -
ibatis缓存
2011-05-22 12:52 1327iBatis的缓存配置比较简单易懂,以我使用的iBati ... -
ibatis resultclass "java.util.hashmap" 缓存问题
2011-05-22 12:13 1488在做ibatis项目过程中遇到如下样式动态查询 <se ... -
ibatis # $区别
2011-05-22 11:55 14091、#可以进行预编译,进行类型匹配,#变量名# 会转化为 j ... -
iBATIS入门示例及注释
2011-05-08 18:20 1723工程的结构: 一、SqlMapConf ... -
iBATIS 三个版本小细节对比
2011-05-08 16:12 1179iBATIS 三个版本小细节对比 sqlMapConfig ... -
深入分析 iBATIS 框架之系统架构与映射原理
2011-05-07 12:48 1188原文:http://www.ibm.com/developer ...
相关推荐
使用ibatis配置的主子表关联查询的实例,一对多关系,在控制台打印,有log4j的使用,打印结果详细,(码云同步)
Ibatis查询语句里,可以使用多表查询,返回多个表的值.doc
ibatis配置多表关联(一对一、一对多、多对多
ibatis and和or联合查询 .doc
ibatis 的小例子,主要是通过ibatis来处理2个数据表,其中数据表直接是有关系的
一个Ibatis+Mysql的简单例子,有数据库文件。希望对初学者有所帮助!
iBatis做的按条件查询,没关联其他表,内带Mysql,适用于小型项目,hibernate是全自动化,如有朋友想学习下半自动化持久层框架,那就来下载这个看看吧。。
框架:spring ibatis jquery 数据库: mysql 2个关联关系的表 有分页查询
ibatis的实现(包含模糊查询、关联查询、增删改查) 数据库sql server 2005
iBATIS是以SQL为中心的持久化层框架。能支持懒加载、关联查询、继承等特性
内容包里面是源代码,运行该例子的方式就是,使用里面的sql文件还原数据库。...使用cmd进入该解压包,运行 java -jar *.jar ibatis2spring....欲了解代码的详细,请访问作者博客,搜索《ibatis + Spring 多表查询》文章。
延迟加载 VS 联合查询(1:1) 复杂类型集合的属性 避免N+1 Select(1:M和M:N) 组合键值或多个复杂参数属性 支持Parameter Map和Result Map的数据类型 缓存Mapped Statement结果集 只读 VS 可读写 Serializable可...
一个映射层,在对象和数据库间传递数据,并保持两者与映射层本身相独立 iBATIS则与之不同,它不是直接在类与数据表或字段与列之间进行关联,而是把SQL语句的参数(parameter)和返回结果(result)映射至类。...
9.3.4 联合使用readOnly属性和serialize属性 159 9.4 如何使用高速缓存模型中的标签 160 9.4.1 高速缓存的清除 160 9.4.2 设置高速缓存模型实现的特性 163 9.5 高速缓存模型的类型 163 9.5.1 MEMORY 163 9.5.2 LRU ...
一个映射层,在对象和数据库间传递数据,并保持两者与映射层本身相独立 iBATIS则与之不同,它不是直接在类与数据表或字段与列之间进行关联,而是把SQL语句的参数(parameter)和返回结果(result)映射至类。...
ibatis实战之一对多关联源代码 文章地址:http://blog.csdn.net/itmyhome1990/article/details/30050183
iBatisMyBatis 主子表关联查询 .doc
iBATIS[2]是一个可以设计和实现更好的 Java/.NET 应用程序持久化层的框架。iBATIS 把对象和存储过程或者使用 XML 描述符的 SQL 语句进行了关联。简单是 iBATIS 最大的优势
MEMORY 类型Cache 与WeakReference ........................................ 40 LRU 型Cache ....................................................................................... 42 FIFO 型Cache ........
IBatis完成学员的增删改查,无关联关系。