码迷,mamicode.com
首页 > 其他好文 > 详细

Mybatis基础学习(四)—关系映射

时间:2016-07-04 20:34:03      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

一、模型分析

技术分享

user和orders

user---->orders

一个用户可以创建多个订单,一对多。

orders--->user

一个订单只由一个用户创建,一对一。

 

orders和orderdetail

orders--->orderdetail

一个订单可以包括多个订单明细,因为一个订单可以购买多个商品,每个商品的购买信息在orderdetail记录,一对多关系。

orderdetail---> orders

一个订单明细只能包括在一个订单中,一对一。

 

orderdetail和items

orderdetail--->itesms

一个订单明细只对应一个商品信息,一对一。

items---> orderdetail

一个商品可以包括在多个订单明细 ,一对多。

 

二、一对一查询

1.使用resultType

     复杂查询时,单表对应的po类已不能满足输出结果集的映射。所以要根据需求建立一个扩展类来作为resultType的类型。

 

User.java

public class User implements Serializable{

	private int id;

	private String username;// 用户姓名

	private String sex;// 性别

	private Date birthday;// 生日

	private String address;// 地址

	public User(){
	}

	public User(String username,String sex,Date birthday,String address){
		this.username = username;
		this.sex = sex;
		this.birthday = birthday;
		this.address = address;
	}

	//get、set.....
}

 

Orders.java

public class Orders implements Serializable{
	
    private Integer id;

    private Integer userId;

    private String number;

    private Date createtime;

    private String note;
 
    //get、set.....
 } 

 

我们要执行如下语句:

技术分享

 

(1)编写PO类

public class OrdersExt extends Orders{

	private String username;

	private String sex;

	private String address;

	//get、set......
}

 

(2)编写mapper接口 

public interface OrdersMapper{

	public List<OrdersExt> findOrderAndUser();
}

 

(3)编写映射文件

技术分享

 

Test.java

	@Test
	public void testFindUsersByNameAndSex(){
		
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		OrdersMapper mapper = sqlSession.getMapper(OrdersMapper.class);
		
		List<OrdersExt> list = mapper.findOrderAndUser();
		
		for(OrdersExt orderExt : list){
			
			System.out.println(orderExt);
		}
		
		sqlSession.close();
	}

 

2.使用resultMap

(1)修改PO类,添加User对象

技术分享

 

(2)编写mapper接口

技术分享

 

(3)编写映射文件

技术分享

技术分享

 

一对一查询

resultType: 使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。

如果没有查询结果的特殊要求建议使用resultType。

resultMap: 需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射pojo的对象属性中。

resultMap可以实现延迟加载,resultType无法实现延迟加载。

 

三、一对多映射

(1)需求

     查询订单信息及订单明细和用户信息。

 

(2)Sql语句

确定主查询表: 订单表

确定关联查询表: 订单明细表、用户表

在一对一查询基础上添加订单明细关联表即可。

技术分享

 

(3)修改PO类

技术分享

 

(4)编写mapper接口

技术分享

 

(5)编写mapper配置文件

技术分享

collection: 定义一个一对多关系。

ofType: 指定该集合参数所映射的类型。

Mybatis基础学习(四)—关系映射

标签:

原文地址:http://www.cnblogs.com/yangang2013/p/5641502.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!