您的位置:首页 > 其它

Mybatis 一对多(OneToOne)关系映射

2011-11-08 23:25 337 查看
关于MyBatis一对多的设置如下:
1.创建数据库脚本

CREATE TABLE t_customer(
id int(10) not null auto_increment,
address varchar(120),
postcode varchar(6),
sex varchar(2),
cname varchar(24),
primary key(id)
)charset="GB2312";

CREATE TABLE t_orders(
id int(10) not null auto_increment,
code varchar(24),
customer_id int(3) not null,
primary key(id)
)charset="GB2312";

ALTER TABLE t_orders
ADD CONSTRAINT orders_customer_fk FOREIGN KEY (customer_id) REFERENCES t_customer(id)
-- t_orders.customer_id 参照 t_customer.id

2.创建实体类(POJO)
Customer.java

package com.lixing.ibatis.entity.onetomany;

import java.io.Serializable;
import java.util.List;

public class Customer implements Serializable{
private static final long serialVersionUID = 451949797460417653L;
private int id;
private String address;
private String postcode;
private String sex;
private String cname;
private List<Orders> orders; //一个Customer 对应N多个Orders
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPostcode() {
return postcode;
}
public void setPostcode(String postcode) {
this.postcode = postcode;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public List<Orders> getOrders() {
return orders;
}
public void setOrders(List<Orders> orders) {
this.orders = orders;
}
}

Orders.java

package com.lixing.ibatis.entity.onetomany;

import java.io.Serializable;

public class Orders implements Serializable {
private static final long serialVersionUID = 8215977396669780567L;
private int id;
private String code;
private int customerId;
private Customer customer; //多个Orders对应一个Customer

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public int getCustomerId() {
return customerId;
}

public void setCustomerId(int customerId) {
this.customerId = customerId;
}

public Customer getCustomer() {
return customer;
}

public void setCustomer(Customer customer) {
this.customer = customer;
}
}

3.创建Mapper映射接口
CustomerMapper.java

package com.lixing.ibatis.onetomany.mapper;

import com.lixing.ibatis.entity.onetomany.Customer;

public interface CustomerMapper {
void insertCustomer(Customer customer);
Customer getCustomer(int id);
}

OrdersMapper.java

package com.lixing.ibatis.onetomany.mapper;

import java.util.List;

import com.lixing.ibatis.entity.onetomany.Orders;

public interface OrdersMapper {
void insertOrders(Orders orders);
List<Orders> getOrders(int id); //根据id
List<Orders> getOrdersById(int customerId); //根据customerId获得N多个对象
}

4.创建Mapper XML配置文件
CustomerMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lixing.ibatis.onetomany.mapper.CustomerMapper">
<parameterMap type="Customer" id="parameterCustomerMap">
<parameter property="id"/>
<parameter property="address"/>
<parameter property="postcode"/>
<parameter property="sex"/>
<parameter property="cname"/>
</parameterMap>

<insert id="insertCustomer" parameterMap="parameterCustomerMap">
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT @@IDENTITY AS ID
</selectKey>
INSERT INTO t_customer(address,postcode,sex,cname)
VALUES(#{address},#{postcode},#{sex},#{cname})
</insert>

<resultMap type="Customer" id="resultCustomerMap">
<result property="id" column="id"/>
<result property="address" column="address"/>
<result property="postcode" column="postcode"/>
<result property="sex" column="sex"/>
<result property="cname" column="cname"/>
<collection property="orders" column="id" select="com.lixing.ibatis.onetomany.mapper.OrdersMapper.getOrdersById"/>
</resultMap>

<select id="getCustomer" resultMap="resultCustomerMap" parameterType="int">
SELECT *
FROM t_customer
WHERE id=#{id}
</select>
</mapper>

OrderMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lixing.ibatis.onetomany.mapper.OrdersMapper">
<parameterMap type="Orders" id="parameterOrdersMap">
<parameter property="id"/>
<parameter property="code"/>
<parameter property="customerId"/>
</parameterMap>

<insert id="insertOrders" parameterMap="parameterOrdersMap">
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID() AS ID
</selectKey>
INSERT INTO t_orders(code,customer_id)
VALUES(#{code},#{customerId})
</insert>

<resultMap type="Orders" id="ordersMap">
<result property="id" column="id"/>
<result property="code" column="name"/>
<result property="customerId" column="customer_id"/>
<association property="customer" javaType="Customer" column="customer_id" select="com.lixing.ibatis.onetomany.mapper.CustomerMapper.getCustomer"/>
</resultMap>
<select id="getOrders" resultMap="ordersMap" parameterType="int">
SELECT * FROM t_orders
WHERE id=#{id}
</select>

<select id="getOrdersById" resultMap="ordersMap" parameterType="int">
SELECT * FROM t_orders
WHERE customer_id=#{customer_id}
</select>

</mapper>

5.mybatis-config.xml 文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- changes from the defaults for testing -->
<setting name="cacheEnabled" value="false" />
<setting name="useGeneratedKeys" value="true" />
<setting name="defaultExecutorType" value="REUSE" />
</settings>

<typeAliases>
<typeAlias type="com.lixing.ibatis.entity.onetomany.Customer" alias="Customer"/>
<typeAlias type="com.lixing.ibatis.entity.onetomany.Orders" alias="Orders"/>

</typeAliases>

<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="7501857" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/lixing/ibatis/onetomany/mapper/CustomerMapper.xml"/>
<mapper resource="com/lixing/ibatis/onetomany/mapper/OrdersMapper.xml"/>
</mappers>
</configuration>

6.创建测试类

package com.lixing.ibatis.test;

import java.util.Iterator;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.lixing.ibatis.entity.onetomany.Customer;
import com.lixing.ibatis.entity.onetomany.Orders;
import com.lixing.ibatis.onetomany.mapper.CustomerMapper;
import com.lixing.ibatis.onetomany.mapper.OrdersMapper;
import com.lixing.ibatis.util.MyBatisUtil;

public class OrdersMapperTest {
private SqlSessionFactory sqlSessionFactory=null;
private SqlSession session=null;

@Before
public void before(){
sqlSessionFactory=MyBatisUtil.getInstance();
session=sqlSessionFactory.openSession();
}

@Test
public void testInsertOrders(){
Orders orders=new Orders();
orders.setCode("code__1");
orders.setCustomerId(1);

OrdersMapper ordersMapper=session.getMapper(OrdersMapper.class);
ordersMapper.insertOrders(orders);
session.commit();
}

@Test
public void testInsertCustomerOneToMany(){
Customer customer=new Customer();
customer.setCname("Lixing5");
customer.setPostcode("518105");
customer.setSex("男");
customer.setAddress("广东省深圳市5");

CustomerMapper customerMapper=session.getMapper(CustomerMapper.class);
customerMapper.insertCustomer(customer);
System.out.println(customer.getId());

Orders orders1=new Orders();
orders1.setCode("code__5_1");
orders1.setCustomerId(customer.getId());

Orders orders2=new Orders();
orders2.setCode("code__5_2");
orders2.setCustomerId(customer.getId());

Orders orders3=new Orders();
orders3.setCode("code__5_3");
orders3.setCustomerId(customer.getId());

OrdersMapper ordersMapper=session.getMapper(OrdersMapper.class);
ordersMapper.insertOrders(orders1);
ordersMapper.insertOrders(orders2);
ordersMapper.insertOrders(orders3);

session.commit();
}

@Test
public void testGetOrdersManyToOne(){
OrdersMapper ordersMapper=session.getMapper(OrdersMapper.class);
List<Orders> list=ordersMapper.getOrdersById(5);
for(int i=0;i<list.size();i++){
Orders orders=list.get(i);
Customer customer=orders.getCustomer();
System.out.println(orders.getId()+"\t"+orders.getCode()+"\t"+orders.getCustomerId());
System.out.println("\t \t--:"+customer.getId()+"\t"+customer.getCname());
}
session.commit();
}

@Test
public void testGetCustomerOneToMany(){
CustomerMapper customerMapper=session.getMapper(CustomerMapper.class);
Customer customer=customerMapper.getCustomer(5);
List<Orders> orders=customer.getOrders();
System.out.println(customer.getId()+"\t"+customer.getCname()+"\t"+customer.getPostcode()+"\t"+customer.getAddress());
for(int i=0;i<orders.size();i++){
Orders order=orders.get(i);
System.out.println("\t \t --:"+order.getId()+"\t"+order.getCode()+"\t"+order.getCustomerId());
}
session.commit();
}

@After
public void after(){
session.close();
}
}
本文出自 “李新博客” 博客,请务必保留此出处http://kinglixing.blog.51cto.com/3421535/709738
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: