ibatis 일대다 예시

6709 단어 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. 해당되는 자바빈 생성
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

한 쌍의 멀티캐스트 파일 원2many.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

좋은 웹페이지 즐겨찾기