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
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
相关文章推荐
- Mybatis 一对多(OneToOne)关系映射
- Mybatis 一对多(OneToOne)关系映射
- Mybatis 一对多(OneToOne)关系映射
- Mybatis 一对多(OneToOne)关系映射
- Mybatis 一对一(OneToOne)关系映射__INSERT
- Mybatis 一对一(OneToOne)关系映射__INSERT
- JPA总结——实体关系映射(一对一@OneToOne)
- JPA关系映射系列三:one-to-many和many-to-one
- mybatis ---- 级联查询 一对多 (集合映射)mybatis中:returned more than one row, where no more than one was expected
- JPA 关系映射(OneToOne、OneToMany、ManyToMany)
- Hibernate one-to-many / many-to-one关系映射
- 【Mybatis】一对多、多对一关系映射
- @OneToMany或@ManyToOne的用法-annotation关系映射篇
- JPA总结——实体关系映射(一对一@OneToOne)
- 用我的MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many)
- JPA关系映射系列二:one-to-one主键关联
- Hibernate One-to-One Mappings 一对一关系映射
- Entity Framework 实践系列 —— 搞好关系 - 生儿育女(一对多,one-to-many)
- Entity Framework 实践系列 —— 搞好关系 - 生儿育女(一对多,one-to-many)
- Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany