在实际开发中,iBATIS框架已经很普遍的使用,然而我们常常遇到关联数据的情况,如User 对象拥有若干Address 对象,每个Address 对象描述了对应User 的一个联系地址,这种情况下,我们应该如何处理?通过单独的Statement操作固然可以实现(通过Statement 用于读取用户数据,再手工调用另外一个Statement 根据用户ID 返回对应的Address信息)。不过这样未免失之繁琐。下面我们就看看在ibatis 中,如何对关联数据进行操作。ibatis 中,提供了Statement 嵌套支持,通过Statement 嵌套,我们即可实现关联数据的操作。
一对多关联
下面的例子中,我们首选读取t_user 表中的所有用户记录,然后获取每个用户对应
的所有地址信息。
配置文件如下:
<sqlMap namespace="User">
<typeAlias alias="user" type="com.ibatis.sample.User"/>
<typeAlias alias="address" type="com.ibatis.sample.Address"/>
<resultMap id="get-user-result" class="user">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="addresses" column="id"
select="User.getAddressByUserId"/>
</resultMap>
<select id="getUsers"
parameterClass="java.lang.String"
resultMap="get-user-result">
<![CDATA[
select
id,
name,
sex
from t_user
where id = #id#
]]>
</select>
<select id="getAddressByUserId"
parameterClass="int"
resultClass="address">
<![CDATA[
select
address,
zipcode
from t_address
where user_id = #userid#
]]>
</select>
</sqlMap>
resource ="com/ibatis/sample/SqlMapConfig.xml";
Reader reader;
reader = Resources.getResourceAsReader(resource);
XmlSqlMapClientBuilder xmlBuilder = new XmlSqlMapClientBuilder();
sqlMap = xmlBuilder.buildSqlMap(reader);
//sqlMap系统初始化完毕
List userList = sqlMap.queryForList("User.getUsers", "");
for (int i = 0; i < userList.size(); i++) {
User user = (User)userList.get(i);
System.out.println("==>" + user.getName());
for (int k = 0; k < user.getAddresses().size(); k++) {
Address addr = (Address) user.getAddresses().get(k);
System.out.println(addr.getAddress());
}
}
这里通过在resultMap 中定义嵌套查询getAddressByUserId,我们实现了关联数据的读取。多表关联查询大量数据时建议采用存储过程来处理,来避免系统问题。
2、一对一表关联:
Xml代码
1. <resultMap id="get-user-result" class="user">
2. <result property="id" column="id"/>
3. <result property="name" column="name"/>
4. <result property="sex" column="sex"/>
5. <result property="address" column="t_address.address"/>
6. <result property="zipCode" column="t_address.zipcode"/>
7. </resultMap>
8. <select id="getUsers"
9. parameterClass="java.lang.String"
10. resultMap="get-user-result">
11. <![CDATA[
12. select*
13. from t_user,t_address
14. where t_user.id=t_address.user_id
15. ]]>
16. </select>
<resultMap id="get-user-result" class="user">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="address" column="t_address.address"/>
<result property="zipCode" column="t_address.zipcode"/>
</resultMap>
<select id="getUsers"
parameterClass="java.lang.String"
resultMap="get-user-result">
<![CDATA[
select*
from t_user,t_address
where t_user.id=t_address.user_id
]]>
</select>
在进行表关联的时候一定要注意:关联的2个pojo之间的联系,还有就是配置文件之间的关联。
分享到:
相关推荐
为了提高开发效率,Ibatis工具应运而生,它是一个优秀的持久层框架,支持自定义SQL、存储过程以及高级映射。在MyEclipse中,有专门为Ibatis设计的插件——Ibator,可以帮助开发者快速生成DAO和实体类,极大地简化了...
本压缩包包含两个关键的持久层框架——Hibernate和iBATIS的开发文档,将帮助我们深入理解并有效使用这两个强大的工具。 **Hibernate** 是一个对象关系映射(ORM)框架,它允许Java开发者用面向对象的方式处理数据库...
第10章 Hibernate益友——iBatis 10.1 Ibatis 概述 10.2 快速起步 10.3 IBatis 基础 10.4 iBatis高级特性 10.5 IBatis周边 第11章 工具卡片和软件 11.1 工具卡片 11.2 Eclipse安装和基本使用方法 11.3 快速...
第10章 Hibernate益友——iBatis 10.1 Ibatis 概述 10.2 快速起步 10.3 IBatis 基础 10.4 iBatis高级特性 10.5 IBatis周边 第11章 工具卡片和软件 11.1 工具卡片 11.2 Eclipse安装和基本使用方法 11.3 快速...
iBatis,由MyBatis的前身,是一款优秀的持久层框架,它简化了Java应用程序中的数据库操作,使得SQL与Java代码更加解耦,提高了开发效率和可维护性。 1. **iBatis简介** iBatis是一个基于Java的持久层框架,它允许...
这两本书详细介绍了如何使用iBATIS进行数据库交互,帮助开发者深入理解并熟练掌握这一持久层框架。 iBATIS,全称为“Integration Between Applications and SQL”,即应用程序与SQL之间的集成,是由Apache软件基金...
这组“iBatis课件”是关于Java编程领域中的一个知名持久层框架——iBatis的学习资源。iBatis作为一个轻量级的框架,它允许开发者将SQL语句直接嵌入到Java代码中,解决了传统的JDBC繁琐的代码编写问题,提高了开发...
标题 "ibatis" 提到的是一个著名的开源Java持久层框架——iBATIS,它在过去的Web应用程序开发中占据了重要地位。iBATIS 提供了一种将SQL查询与Java代码分离的方法,增强了数据库操作的灵活性和可维护性。"ibatis in ...
标题 "IBatisVSHibernate" 暗示了我们将探讨两个知名的Java持久层框架——IBatis和Hibernate之间的差异和特点。这两个工具都是用于简化数据库操作的框架,但在设计理念和使用方式上有所不同。 **IBatis** 是一个轻...
本文将深入探讨其中一个流行的选择——iBATIS,以及其在传智播客教程中的优点总结。 iBATIS,全称为“互联网应用程序基础工具包”(Internet Basics for Architecture with Transactions and SQL),是由Apache ...
iBatis,作为一款优秀的数据持久层框架,以其轻量级、易用性以及灵活性,在Java开发领域备受推崇。本教学视频全面覆盖了iBatis的基础知识,旨在帮助初学者快速掌握这一强大的工具。以下是对视频内容的详细解析: 1....
标题中的“ibatis 连接字符串 SqlMapConfig.xml”指的是使用iBATIS(一个轻量级的Java持久层框架)时,配置数据库连接的关键文件——SqlMapConfig.xml。这个文件是iBATIS的核心配置文件,它包含了数据源、事务管理器...
本文将深入探讨一个基于Java的持久层框架——Ibatis,通过"ibatisDemo"这个实例,我们将全面理解Ibatis的基础概念、核心特性以及如何进行增删改查操作。 Ibatis,原名MyBatis,是由Google Code托管的开源项目,由...
《ibatis框架源码剖析》是一本深入探讨mybatis前身——ibatis的源码解析书籍。通过对源码的深入分析,我们可以理解ibatis的核心机制,掌握数据库操作的底层原理,从而更好地利用和优化这个强大的持久层框架。在这个...
iBatis是著名的开源持久层框架,它提供了SQL映射功能,将数据库操作与业务逻辑分离,使得代码更加灵活且易于维护。本书由夏昕编写,他通过丰富的实例和详尽的解释,为读者呈现了iBatis的核心特性和使用技巧。 首先...
**iBatis** 是一个持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,或者在Java代码中动态构造。iBatis 提供了与数据库交互的能力,使得数据库操作变得简单直观。在这个项目中,iBatis 可能用于执行查询和...
iBATIS是一个由Clinton Begin创建,目前由Apache基金会支持的持久化框架,它专注于数据库查询的简化,尤其在JDBC编程方面提供了极大的便利。相对于全自动化ORM解决方案如Hibernate,iBATIS被称为“半自动化”ORM实现...
标题中的“myBatis or ibatis 神器”指的是两个知名的Java持久层框架——myBatis和iBatis。这两个框架在Java开发中扮演着重要角色,它们简化了数据库操作,让开发者能够更加专注于业务逻辑,而不是底层的SQL查询。 ...
总之,iBATIS作为Java中的一个优秀持久层框架,极大地简化了数据库操作,提高了开发效率。`ibatis-2.3.4.726.jar`文件是其核心组件,确保其正确引入和使用是成功利用iBATIS的关键步骤。随着版本的更新,iBATIS的功能...
总的来说,这个"iBATIS_test"文件提供了实践操作的机会,而PPT文档则提供了理论指导,两者结合,将帮助初学者快速上手iBATIS,深入理解数据库操作和Java持久层编程。在学习过程中,读者应注重理解iBATIS的核心思想...