http://kinglixing.blog.iyunv.com/3421535/709738
关于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();
}
}
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com