ibatis一对多示例
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 sqlMapConfigPUBLIC "-//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.Driverjdbc.url=jdbc:mysql://localhost:3306/vinjdbc.userName=rootjdbc.password=sa
一对多映射文件one2many.xml的配置:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapPUBLIC "-//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 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" parameterresultMap="get-user-result"><![CDATA[select id,userName,passWord,expiredatefrom userwhere id=#id#]]></select><select id="getAddressByUserId" parameterresultname="code">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:admin11-->addressName11-->addressName2