1. 程式人生 > >【Mybatis】collection解決一對多關聯查詢

【Mybatis】collection解決一對多關聯查詢

在上上篇中我們用級聯屬性的方式把資料查出來封裝到Employee中,還有另一種方式實現資料的封裝。接下來小編將介紹collection標籤的相關知識,包括巢狀查詢和分段查詢兩種方式。

現在有員工和部門兩張表,前兩篇文章介紹的都是根據員工查部門,本篇文章介紹由部門查所有員工

首先請參照上上篇中步驟1,2,3 , 4,此處從第5步開始

一、巢狀查詢

5.新增DepartmentMapper.java介面方法

public interface DepartmentMapper {	
	public Department getDeptByIdPlus(Integer id);
}

6.新增DepartmentMapper.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.atguigu.mybatis.dao.DepartmentMapper">

	<!-- collection巢狀結果集的方式,定義關聯的集合型別元素的封裝規則-->
	
	<!-- 巢狀結果集的方式,使用collection標籤定義關聯的集合型別的屬性封裝規則 -->
	<resultMap type="com.atguigu.mybatis.bean.Department" id="MyDept">
		<id column="did" property="id"/>
		<result column="dept_name" property="departmentName"/>
		<!-- 
		collection定義關聯結合型別的屬性的封裝規則
		ofType:指定集合裡面元素的型別
		-->
		<collection property="emps" ofType="com.atguigu.mybatis.bean.Employee">
			<!-- 定義這個集合中元素的封裝規則 -->
			<id column="eid" property="id"/>
			<result column="last_name" property="lastName"/>
			<result column="email" property="email"/>
			<result column="gender" property="gender"/>
		</collection>
	
	</resultMap>
	
	<!-- public Department getDeptByIdPlus(Integer id); -->
	<select id="getDeptByIdPlus" resultMap="MyDept" >
		SELECT
			d.id did,
			d.dept_name dept_name,
			e.id,
			e.last_name last_name,
			e.email email,
			e.gender gender
		FROM
			tbl_dept d
		LEFT JOIN tbl_employee e ON d.id = e.d_id
		WHERE
			d.id = #{id}
	</select>
	
</mapper>

7.新增測試方法

	@Test
	public void test06() throws IOException{
		
		SqlSessionFactory sqlSesssionFactory = getSqlSesssionFactory();
		SqlSession openSession = sqlSesssionFactory.openSession();
		try {
			DepartmentMapper mapper = openSession.getMapper(DepartmentMapper.class);
			Department deptByIdPlus = mapper.getDeptByIdPlus(2);
			System.out.println(deptByIdPlus);
			System.out.println(deptByIdPlus.getEmps());
			
		} finally {
			openSession.close();
		}
	}

8.控制檯資訊


二、分段查詢

5.新增EmployeeMapperPlus.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.atguigu.mybatis.dao.EmployeeMapperPlus">
	<select id="getEmpsByDeptId" resultType="com.atguigu.mybatis.bean.Employee">
	 	select * from tbl_employee where d_id=#{deptId}
	 </select>
<mapper/>

6.DepartmentMapper.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.atguigu.mybatis.dao.EmployeeMapperPlus">
	
<resultMap type="com.atguigu.mybatis.bean.Department" id="MyDeptStep">
		<id column="id" property="id"/>
		<id column="dept_name" property="departmentName"/>
		<collection property="emps"
			select="com.atguigu.mybatis.dao.EmployeeMapperPlus.getEmpsByDeptId"
			column="{deptId=id}" fetchType="lazy"></collection>
</resultMap>
	<!-- public Department getDeptByIdStep(Integer id); -->
	<select id="getDeptByIdStep" resultMap="MyDeptStep">
		select id,dept_name departmentName from tbl_dept where id=#{id}
	</select>

<mapper/>

7.新增測試方法

@Test
	public void test06() throws IOException{
		
		SqlSessionFactory sqlSesssionFactory = getSqlSesssionFactory();
		SqlSession openSession = sqlSesssionFactory.openSession();
		try {
			DepartmentMapper mapper = openSession.getMapper(DepartmentMapper.class);
			Department deptByIdStep = mapper.getDeptByIdStep(1);
			System.out.println(deptByIdStep);		
		} finally {
			openSession.close();
		}
	}

8.控制檯資訊:分步查詢效果


相關推薦

Mybatiscollection解決一對關聯查詢

在上上篇中我們用級聯屬性的方式把資料查出來封裝到Employee中,還有另一種方式實現資料的封裝。接下來小編將介紹collection標籤的相關知識,包括巢狀查詢和分段查詢兩種方式。現在有員工和部門兩張

Mybatis一對一與一對關聯查詢

一、一對一關聯查詢 背景: 表1:user包含id,username。 表2:orders包含id,user_id 需求:查詢每個使用者下的訂單ID。( 現實中是一對多的關係,即一個使用者對應著多個訂單,主要是學習mybatis,這裡只是借用舉例) sql: select

MyBatis資料庫的一對查詢:關於resultMap的使用

利用resultMap,能夠將查詢到的複雜資料(比如查詢到幾個表中資料)對映到一個結果集當中。 (1)如下圖所示,在進行一對多查詢時: (2)通常要求不能出現重複記錄,因此需要對結果資料可以進行整合 (3)解決方案:利用resultMap。程式碼如下: i

MyBatisresultMap的一對查詢,結果中的list只有一條資料(size=1)

問題:定義好resultMap之後,查詢結果中的list,其size都是1。(相當於“一對多”變成了“多對一”) 原因:因為返回的列沒有用於區分許可權的id,導致mybatis不知道如何區分,於是把每

javaEE Mybatis,一對一、一對關聯查詢,resultMap配置關聯屬性的對映

OrderMapper.xml(實體類的Sql配置檔案,resultMap配置一對一、一對多關聯屬性的對映): <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//

mybatis使用者角色許可權一對關聯查詢

mybatis一對多關聯查詢案例 1.需求 2.資料庫說明 3.實體說明 4.mybatis SQL語句編寫 一.需求 在做角色許可權管理時,需要根據使用者名稱查詢其對應的所有角色以及擁有的所有許可權 二.資料庫說明 資料庫有如下幾個表

MyBatiscollection一對查詢

  最近專案中有這樣一種需求,有一張園區表t_zone;一張圖片表t_picture,一個園區可能對應好幾張圖片(可以把t_zone理解為訂單,t_picture理解為商品,一張訂單可能對應好幾件商品) t_zone實體 public class Zone ex

MyBatis關聯查詢一對關聯查詢

log www. 相同 bubuko pre img ref sele 傳遞 實體關系圖,一個國家對應多個城市 一對多關聯查詢可用三種方式實現: 單步查詢,利用collection標簽為級聯屬性賦值; 分步查詢: 利用association標簽進行分步查詢; 利用co

(十四)Mybatis一對關聯查詢

注:程式碼已託管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,專案是mybatis-10-one2many,需要自取,需要配置maven環境以及mysql環境(sql語句在resource下的test.sql中),覺得有

mysql一對關聯查詢分頁錯誤解決

xml問價中查詢資料中包含list,需要使用collection <resultMap id="XX" type="com.XXX.XXXX"> <id column

hibernate一對關聯查詢去重 criteria設定 解決分頁條數不正確的問題

Criteria criteria=classroomDao.getCriteria(new classroom()); criteria.setFetchMode("studentList", FetchMode.SELECT); criteria.setRe

mybatis一對關聯查詢子表只返回一條資料

注意:在mybatis的部分版本中發現當兩個表的主鍵列名一致,比如都是id時,配置關聯查詢時子表只能返回1條資料,在這裡提供一種簡單的方法,避免大量修改檔案,由於我的原始碼不便公開,請大家看這裡的原始碼:http://blog.csdn.net/qinshijangshan/

Mybatiscollection實現一對的問題

今天在使用Mybatis中的Collection獲取集合資訊時,資料庫中對應了多條資料,但在做單元測試時只能獲取到一條資料。 糾結了很久,突然想到是不是主鍵的問題,結果一試,還真是這麼回事。 Myba

MyBatis初級實戰之六:一對關聯查詢

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ###

springboot JPA 一對關聯查詢 ,動態復雜查詢 去除重復數據 in語句使用

query pri predicate list cat cut 單向 查詢 group 目的:根據圖書的發布地區查詢圖書信息實現步驟:1 實體配置one: 圖書信息 bookmany: 地區信息 bookarea實體映射,單向映射 book 中增加 area

Mybatis學習總結五實現關聯查詢----一對關聯(collection)

實現關聯表查詢----一對多關聯(collection) 一對多需求:即一張表class中又含有多張表(teacher,student)內容。現根據class_id 來獲取對應的班級資訊(包括學生和老師資訊)。 1 、建立表和資料: CREATE TABLE studen

MyBatis-----MyBatis---表級聯系一對

new pda 聯合 測試 asr exc ack 負責 trace 一、核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//myba

mybatis一對查詢

一對多查詢 需求 查詢訂單及訂單明細的資訊。 sql語句 確定主查詢表:訂單表 確定關聯查詢表:訂單明細表 在一對一查詢基礎上新增訂單明細表關聯即可。 SELECT   orders.*,   USER.username,   USER.sex,   U

SSH三大框架Hibernate基礎第七篇:一對關聯關係的操作

相對於上文的多對一關係,這裡又說明下一對多的關聯關係。 在上文中,我們描述了多對一的關係,在關係資料庫中也是多對一的關係,並且還是一對多的關係。但是,僅僅如此是不夠的,Hibernate是一種面向物件的結構,在Hibernate中仍然是多對一的關係,但是沒有一對多,所以我們

mybatismybatis中的<if test=“”>test中條件

ID span lun tco sel myba cloud ise uid mybatis中的<if test=“”>test中多條件 代碼展示: 其中 accountCode和apiName都是ApiAllRespBean的屬性 <select