关于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();
}
}