1、在实际开发中,iBATIS框架已经很普遍的使用,然而我们常常遇到关联数据的情况,如User 对象拥有若干Address 对象,每个Address 对象描述了对应User 的一个联系地址,这种情况下,我们应该如何处理?通过单独的Statement操作固然可以实现(通过Statement 用于读取用户数据,再手工调用另外一个Statement 根据用户ID 返回对应的Address信息)。
2、构建数据库表,user表和address表,建表语句如下:(使用mysql数据库)
create table user(
id int(10) not null auto_increment,
userName varchar(20) ,
passWord varchar(20),
primary key(id)
);
insert into user(userName,passWord) values('admin1','admin1');
insert into user(userName,passWord) values('admin2','admin2');
insert into user(userName,passWord) values('admin3','admin3');
insert into user(userName,passWord) values('admin4','admin4');
create table address(
user_id int(10) not null ,
addressName varchar(20) ,
addressCode varchar(20)
);
insert into address(user_id,addressName,addressCode) values(1,'addressName1','addressCode1');
insert into address(user_id,addressName,addressCode) values(1,'addressName2','addressCode2');
insert into address(user_id,addressName,addressCode) values(2,'addressName3','addressCode3');
insert into address(user_id,addressName,addressCode) values(3,'addressName4','addressCode4');
3、生成相应的JavaBean
User.java
package com.tonyj.pojo;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
public class User {
private int id;
private String userName;
private Date expireDate=null;
private String passWord;
private List<Address> address=new ArrayList<Address>();
//相应的getter和setter方法,构造方法
}
Address.java
package com.tonyj.pojo;
public class Address {
private String addressName;
private String addressCode;
private String user_id;
//相应的getter和setter方法,构造方法
}
4、ibatis配置文件的配置
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="jdbc.properties"/>
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="true"/>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${jdbc.driverClassName}"/>
<property name="JDBC.ConnectionURL" value="${jdbc.url}"/>
<property name="JDBC.Username" value="${jdbc.userName}"/>
<property name="JDBC.Password" value="${jdbc.password}"/>
</dataSource>
</transactionManager>
<sqlMap resource="one2many.xml"/>
</sqlMapConfig>
配置连接数据库的资源文件:
jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/vin
jdbc.userName=root
jdbc.password=sa
一对多映射文件one2many.xml的配置:
<?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>
<typeAlias alias="User" type="com.tonyj.pojo.User"/>
<typeAlias alias="Address" type="com.tonyj.pojo.Address"/>
<resultMap class="User" id="get-user-result">
<result property="id" column="id"/>
<result property="userName" column="userName"/>
<result property="passWord" column="passWord"/>
<result property="expireDate" column="expiredate" />
<result property="address" column="id" select="getAddressByUserId"/>
</resultMap>
<select id="getUser" parameterClass="int" resultMap="get-user-result">
<![CDATA[
select id,userName,passWord,expiredate
from user
where id=#id#
]]>
</select>
<select id="getAddressByUserId" parameterClass="int" resultClass="Address">
select user_id,addressName,addressCode
from address
where user_id=#user_id#
</select>
</sqlMap>
5、测试类的编写
IbatisOne2Many.java
package com.tonyj.test;
import java.io.Reader;
import java.util.List;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.tonyj.pojo.Address;
import com.tonyj.pojo.User;
public class IbatisOne2Many {
public static void main(String[] args) throws Exception {
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
// sqlMap系统初始化完毕
User user=(User) sqlMap.queryForObject("getUser", new Integer(1));
System.out.println("user_id:"+user.getId()+",userName:"
+user.getUserName());
List<Address> addresss=user.getAddress();
for(int i=0;i<addresss.size();i++){
System.out.println(addresss.get(i).getUser_id()+"-->"
+addresss.get(i).getAddressName());
}
}
}
6、执行结果如下:
log4j:WARN No appenders could be found for logger (com.ibatis.common.jdbc.SimpleDataSource).
log4j:WARN Please initialize the log4j system properly.
user_id:1,userName:admin1
1-->addressName1
1-->addressName2
分享到:
相关推荐
利用ibatis实现一对一、多对一的示例代码。每种关系用两种方式实现,具体的讲解可看我的博客http://blog.csdn.net/duwenchao1986/article/details/8565386
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将SQL语句与Java代码分离,从而更好地管理数据库操作。Ibatis的出现,解决了传统JDBC中手动编写SQL和结果集映射的繁琐工作,...
### ibatis多对一代码示例解析 #### 一、ibatis简介与多对一映射概念 在深入了解本文档之前,我们先简单回顾一下ibatis(现称为MyBatis)的基本概念及其在多对一关系处理上的应用。ibatis是一款优秀的持久层框架,...
在本例中,我们将使用学生(Student)和教师(Teacher)之间的多对多关系作为示例。一个学生可以有多个教师,而一个教师也可以有多个学生。 数据库设计 首先,我们需要设计数据库表来存储学生和教师之间的多对多...
在IT行业中,数据库操作是应用程序开发的核心部分,而iBATIS作为一个流行的持久层框架,它为Java开发者提供了...通过"ibatis-缓存使用示例"的学习,开发者能更好地掌握这一技巧,从而在实际项目中发挥出更大的价值。
5. **结果映射**:自动映射查询结果到Java对象,包括一对一、一对多、多对一的复杂映射。 6. **API使用**:解释SqlSession和Mapper接口的常用方法,如selectList、selectOne、insert、update和delete。 7. **事务...
同时支持复杂的一对多、多对一、一对一关系的映射。 4. **事务管理**:iBATIS支持手动和自动的事务控制,可以根据业务需求灵活配置事务的边界。 5. **缓存机制**:内置的本地缓存和二级缓存机制,可以提高数据访问...
标题 "iBatis 一对多映射" 描述中提到的是关于 iBatis 框架下的一对多关系映射。iBatis 是一个基于 Java 的持久层框架,它允许程序员将 SQL 查询与 Java 代码相结合,以实现更灵活的数据访问。在数据库关系模型中,...
总结来说,"iBatis经典示例"是一份深入理解iBatis框架的好资料,它覆盖了iBatis的基础操作和核心特性,通过TestSiBatis的实例代码,你可以更直观地学习到如何在实际开发中应用iBatis。对于初学者而言,这是一份...
"spring+iBatis处理1对多数据表实例"展示了如何将iBatis与Spring框架集成,实现更高级的数据操作。Spring的依赖注入可以简化iBatis的配置,而Spring的事务管理则能确保数据的一致性。1对多关系的处理通常涉及到集合...
6. **结果映射**:当查询结果复杂时,可以定义结果映射来处理一对一、一对多、多对多等关系,确保数据正确地转换为Java对象。 7. **动态SQL**:iBatis允许在XML映射文件中使用if、choose、when、otherwise、where、...
在数据库设计中,多表查询通常涉及到表之间的关联,例如一对一、一对多、多对多关系。在iBatis中,我们可以使用`<select>`标签来定义多表查询的SQL语句。 ### 3. 使用`<include>`标签 为了保持SQL语句的整洁和可...
在这个例子中,`<mapper resource="com/ibatis3/dao/sql/studentSqlMapper.xml"/>` 指定了一个名为“studentSqlMapper.xml”的映射文件,该文件包含了对“Student”实体的操作定义。 ### 3. SqlMap文件详解 SqlMap...
### ibatis应对批量update 在处理大量数据更新时,传统的for循环方式往往...总之,ibatis提供的批量更新功能是处理大量数据更新场景的一个强大工具,开发者应该熟练掌握并合理利用这一特性来提升应用程序的整体性能。
iBatis是一个SQL映射框架,它允许开发者将SQL语句直接写在配置文件中,减少了对JDBC的直接操作。在本项目中,iBatis将作为数据访问层,处理与MySQL数据库的交互。开发者会在iBatis的XML配置文件中定义SQL查询,包括...
iBatis支持复杂的数据关联,包括一对多、一对一关联。通过`collection`和`association`元素,你可以轻松地处理嵌套的结果集。 #### 一对多关联 在XML映射文件中,定义一个`collection`元素来表示一对多关系,例如:...
- **结果映射**:了解如何将查询结果自动映射到Java对象,包括一对一、一对多、多对多的关系映射。 - **参数传递**:学习如何传递参数给SQL,包括简单类型、复杂对象以及Map参数。 - **事务控制**:了解Ibatis如何...
3. 映射一对一、一对多、多对多关系的具体示例。 4. iBATIS的源码解析,特别是与关系映射相关的部分。 5. 使用MyBatis Generator等工具提高开发效率。 6. 关于优化iBATIS映射性能的最佳实践和技巧。 总之,"ibatis ...
5. **结果集映射**:iBATIS能自动将查询结果映射到Java对象,包括单一结果、多个结果集以及复杂的一对多关联映射。 6. **参数映射**:iBATIS可以将Java方法的参数自动映射到SQL的参数,减少了代码量,提高了开发...