1、建立连个表:订单表和订单明细表
- create table T_ORDER
- (
- ID VARCHAR2(32) not null,
- NAME VARCHAR2(255)
- );
- alter table T_ORDER
- add constraint PK_ORDER primary key (ID);
- create table T_ORDER_LINE
- (
- ID VARCHAR2(32) not null,
- ORDER_ID VARCHAR2(32) not null,
- PRODUCT VARCHAR2(32),
- PRICE NUMBER
- );
- alter table T_ORDER_LINE
- add constraint PK_ORDER_LINE primary key (ID);
- alter table T_ORDER_LINE
- add constraint FK_ORDER_ID foreign key (ORDER_ID)
- references T_ORDER (ID);
2、建立实体类
Order.java
- import java.io.Serializable;
- import java.util.ArrayList;
- import java.util.List;
- public class Order implements Serializable {
- private static final long serialVersionUID = 1L;
- private String id;
- private String name;
- private List<OrderLine> orderLines = new ArrayList<OrderLine>();
- //setter...getter...
- }
OrderLine.java
- import java.io.Serializable;
- public class OrderLine implements Serializable {
- private static final long serialVersionUID = 1L;
- private String id;
- private String product;
- private int price;
- private Order order;
- //setter...getter...
- }
三、建立映射文件(重点)
Order.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 namespace="Order">
- <typeAlias type="com.keer.entity.Order" alias="order" />
- <typeAlias type="com.keer.entity.OrderLine" alias="orderLine" />
- <resultMap class="order" id="resultOrder">
- <result property="id" column="id" />
- <result property="name" column="name" />
- <result property="orderLines"
- select="Order.getOrderLinesByOrderId" column="id" />
- </resultMap>
- <resultMap class="orderLine" id="resultLine">
- <result property="id" column="id" />
- <result property="product" column="product" />
- <result property="price" column="price" />
- <result property="order" column="order_id"
- select="getOrderById" />
- </resultMap>
- <select id="getOrderById" resultMap="resultOrder"
- parameterClass="string">
- <![CDATA[
- select * from t_order where id = #id#
- ]]>
- </select>
- <select id="getOrderLinesByOrderId" resultClass="orderLine"
- parameterClass="string">
- <![CDATA[
- select * from t_order_line where order_id = #id#
- ]]>
- </select>
- <insert id="addOrderLine" parameterClass="orderLine">
- <![CDATA[
- insert into t_order_line(id,order_id,product,price) values(#id#,#order.id#,#product#,#price#)
- ]]>
- </insert>
- </sqlMap>
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>
- <settings
- cacheModelsEnabled="true"
- enhancementEnabled="true"
- errorTracingEnabled="true"
- lazyLoadingEnabled="true"
- maxRequests="32"
- maxSessions="10"
- maxTransactions="5"
- useStatementNamespaces="true"/>
- <!-- 使用spring之后,数据源的配置移植到了spring上,所以iBATIS本身的配置可以取消 -->
- <sqlMap resource="Order.xml"/>
- </sqlMapConfig>
四、采用spring整合(详见附件)
五、建立dao和service实现(详见附件)
六、测试类
- //......
- private OrderService orderService;
- @Before
- public void setUp() throws Exception {
- ApplicationContext ct = new ClassPathXmlApplicationContext(
- "applicationContext*.xml");
- orderService = (OrderService) ct.getBean("orderService");
- }
- //...
- @Test
- public void testOneToMany() {
- Order order = (Order) this.orderService.getOrderById("order1");
- // System.out.println(order.getId()+"/t");
- System.out.println(order.getId() + "/t" + order.getOrderLines().size());
- List<OrderLine> orderLines = order.getOrderLines();
- for (OrderLine orderLine : orderLines) {
- System.out.println(orderLine.getId() + "/t"
- + orderLine.getProduct() + "/t" + orderLine.getPrice()
- + "/t" + order.getName());
- }
- }
- @Test
- public void saveMany() {
- Order order = (Order) this.orderService.getOrderById("order1");
- OrderLine orderLine = new OrderLine();
- orderLine.setId("123");
- orderLine.setProduct("book");
- orderLine.setPrice(33);
- orderLine.setOrder(order);
- this.orderService.save(orderLine);
- }
- //...