Mybatis基礎學習(四)—關系映射


一、模型分析

image

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.....
 } 

 

我們要執行如下語句:

image

 

(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)編寫映射文件

image

 

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對象

image

 

(2)編寫mapper接口

image

 

(3)編寫映射文件

image

image

 

一對一查詢

resultType: 使用resultType實現較為簡單,如果pojo中沒有包括查詢出來的列名,需要增加列名對應的屬性,即可完成映射。

如果沒有查詢結果的特殊要求建議使用resultType。

resultMap: 需要單獨定義resultMap,實現有點麻煩,如果對查詢結果有特殊的要求,使用resultMap可以完成將關聯查詢映射pojo的對象屬性中。

resultMap可以實現延遲加載,resultType無法實現延遲加載。

 

三、一對多映射

(1)需求

     查詢訂單信息及訂單明細和用戶信息。

 

(2)Sql語句

確定主查詢表: 訂單表

確定關聯查詢表: 訂單明細表、用戶表

在一對一查詢基礎上添加訂單明細關聯表即可。

image

 

(3)修改PO類

image

 

(4)編寫mapper接口

image

 

(5)編寫mapper配置文件

image

collection: 定義一個一對多關系。

ofType: 指定該集合參數所映射的類型。

 

四、多對多

(1)需求

查詢用戶信息及用戶購買的商品信息,要求將關聯信息映射到主pojo的pojo屬性中。

 

(2)Sql語句

查詢主表: user

查詢關聯表: orders、orderdetail、items

image

 

(3)映射思路

將用戶信息映射到user中。

在user類中添加訂單列表屬性List<Orders> orders,將用戶創建的訂單映射到orders。

在Orders中添加訂單明細列表屬性List<Orderdetail> detailList,將訂單的明細映射到detailList。

在Orderdetail中添加Items屬性,將訂單明細所對應的商品映射到Items。

 

(4)修改PO類

image

 

(5)編寫mapper接口

image

 

(6)編寫mapper配置文件

image

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM