您的位置:首页 > 编程语言 > Java开发

Spring+Ibatis处理1对多数据表的例子

2007-08-28 17:26 393 查看
数据库脚本(MYsqL)




create table Orders (OrderId varchar(10) primary key,Customer varchar(10));


create table OrderLines(OrderLineId varchar(10) primary key,Product varchar(10),OrderId varchar(10),


foreign key(OrderId) references Orders(OrderId));




insert into Orders values("1","john");


insert into Orders values("2","marry");




insert into OrderLines values("1","computer","1");


insert into OrderLines values("2","bike","1");


insert into OrderLines values("3","cat","2");


insert into OrderLines values("4","dog","2");


insert into OrderLines values("5","basketball","2");

domain对象




package ch10.SpringAndIbatisOneToMany;




import java.io.Serializable;


import java.util.ArrayList;


import java.util.List;






public class Order implements Serializable...{


private String orderid;


private String customer;




private List orderLines;




public String getCustomer() ...{


return customer;


}




public void setCustomer(String customer) ...{


this.customer = customer;


}




public String getOrderid() ...{


return orderid;


}




public void setOrderid(String orderid) ...{


this.orderid = orderid;


}




public List getOrderLines() ...{


return orderLines;


}




public void setOrderLines(List orderLines) ...{


this.orderLines = orderLines;


}




}






package ch10.SpringAndIbatisOneToMany;




import java.io.Serializable;






public class OrderLine implements Serializable ...{


private String orderLineId;


private String product;




public OrderLine()...{





}




public OrderLine(String orderLineId, String product) ...{


super();


this.orderLineId = orderLineId;


this.product = product;


}




public String getOrderLineId() ...{


return orderLineId;


}




public void setOrderLineId(String orderLineId) ...{


this.orderLineId = orderLineId;


}




public String getProduct() ...{


return product;


}




public void setProduct(String product) ...{


this.product = product;


}


}





dao接口




package ch10.SpringAndIbatisOneToMany;




import java.util.List;






public interface IDAO ...{


public Object getOrderById(String id);


}





dao实现




package ch10.SpringAndIbatisOneToMany;




import java.util.List;




import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;






public class TestDAO extends SqlMapClientDaoSupport implements IDAO ...{






public Object getOrderById(String id) ...{





return this.getSqlMapClientTemplate().queryForObject("getOrderById",id);


}












}





ibatis配置文件:




<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE sqlMapConfig


PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"


"http://www.ibatis.com/dtd/sql-map-config-2.dtd">


<sqlMapConfig>


<sqlMap resource="ch10/SpringAndIbatisOneToMany/Ibatis.xml" />


</sqlMapConfig>



ibatis sql map配置文件:




<?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 type="ch10.SpringAndIbatisOneToMany.Order" alias="order"/>


<typeAlias type="ch10.SpringAndIbatisOneToMany.OrderLine" alias="order_line"/>





<resultMap class="order" id="result">


<result property="orderid" column="OrderId"/>


<result property="customer" column="Customer"/>


<result property="orderLines" select="getOrderLinesByOrder" column="OrderId"/>


</resultMap>





<resultMap class="order_line" id="resultLine">


<result property="orderLineId" column="orderLineId"/>


<result property="product" column="Product"/>


</resultMap>





<select id="getOrderLinesByOrder" resultMap="resultLine" parameterClass="string">select orderLineId,Product from orderlines where orderid=#value#</select>





<select id="getOrderById" resultMap="result" parameterClass="string">select OrderId,Customer,OrderId from Orders where OrderId=#value#</select>


</sqlMap>



Spring配置文件:

如果要使用1对1,1对多这样牵扯两个表的情况,一定要为SqlMapClientFactoryBean设置dataSource属性



<?xml version="1.0" encoding="UTF-8"?>


<beans


xmlns="http://www.springframework.org/schema/beans"


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">





<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">


<property name="driverClassName">


<value>com.mysql.jdbc.Driver</value>


</property>


<property name="username">


<value>root</value>


</property>


<property name="password">


<value>1234</value>


</property>


<property name="url">


<value>jdbc:mysql://localhost:3306/spring</value>


</property>


</bean>




<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">


<!-- 此处应注入ibatis配置文件,而非sqlMap文件,否则会出现“there is no statement.....异常” -->


<property name="configLocation">


<value>ch10/SpringAndIbatisOneToMany/sqlMapConfig.xml</value>


</property>


<property name="dataSource">


<ref bean="dataSource"/>


</property>




</bean>




<bean id="testDAO" class="ch10.SpringAndIbatisOneToMany.TestDAO">


<property name="dataSource">


<ref bean="dataSource"/>


</property>


<property name="sqlMapClient">


<ref bean="sqlMapClient"/>


</property>


</bean>




</beans>



测试代码:




package ch10.SpringAndIbatisOneToMany;




import java.util.ArrayList;


import java.util.Iterator;


import java.util.List;




import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;


import org.springframework.context.ApplicationContext;


import org.springframework.context.support.ClassPathXmlApplicationContext;




import ch10.SpringAndIbatis.Ibatis;






public class Test ...{






/** *//**


* @param args


*/




public static void main(String[] args) ...{


ApplicationContext context=new ClassPathXmlApplicationContext("ch10/SpringAndIbatisOneToMany/applicationContext.xml");


TestDAO testDAOImpl=(TestDAO)context.getBean("testDAO");




Order order=(Order)testDAOImpl.getOrderById("1");





System.out.println("Order info:");


System.out.println(order.getCustomer());


System.out.println("OrderLine info:");





List result=order.getOrderLines();







for (Iterator iter = result.iterator(); iter.hasNext();) ...{


OrderLine element = (OrderLine) iter.next();


System.out.println(element.getProduct());





}








}




}





结果:

Order info:
marry
OrderLine info:
cat
dog
basketball
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: