MyBatis聯表查詢

一對一關係

數據庫中我有兩張表t_user和t_dept,t_user表中的每個記錄在t_dept中有且只有一條記錄與之對應。這種對應關係就是1對1關係。下面來查詢每個員工的信息和部門信息。
部門對象:

	private int deptno;
	private String deptname;
	private int deptdesc;

員工對象:

	private int no;
	private String name;
	private int age;
	private Dept dept;

創建這兩個對象必須要有無參構造方法,set/get方法。底層還是用的反射實例化的對象。
映射文件配置:

<!-- 定義接收數據庫參數類型 -->
<resultMap type="user" id="relaMap">
		<id column="no" property="no"/>
		<result column="name" property="name"/>
		<result column="age" property="age"/>
		<association property="dept" javaType="Dept">
			<id column="deptno" property="deptno"/>
			<result column="deptname" property="deptname"/>
			<result column="deptdesc" property="deptdesc"/>
		</association>
	</resultMap>
	<select id="queryByRe" resultMap="relaMap">
		SELECT t_user.no
		,t_user.name
		,t_user.age
		,t_dept.deptno
		,t_dept.deptname
		,t_dept.deptdesc
		FROM t_user
		LEFT JOIN t_dept
		ON t_user.deptno=t_dept.deptno
	</select>

測試結果:
在這裏插入圖片描述

一對多關係

上述一對一關係中,一個員工的部門只會有一個,但是反過來,一個部門肯定有多個員工,這種情況下就是一對多關係。下面來對一對多關係的查詢。
部門對象:

	private int deptno;
	private String deptname;
	private int deptdesc;
	//list用來放多個員工對象正好體現一對多關係
	private List<User> users;

員工對象:

	private int no;
	private String name;
	private int age;
	//方便測試還是用原來的,這個可有可無
	private Dept dept;

映射文件的配置:

		<!-- 定義返回值dept的接受類型 -->
		<resultMap type="dept" id="reladMap">
		<id column="deptno" property="deptno"/>
		<result column="deptname" property="deptname"/>
		<result column="deptdesc" property="deptdesc"/>
		<collection property="users" ofType="user">
			<id column="no" property="no"/>
			<result column="name" property="name"/>
			<result column="age" property="age"/>
		</collection>
 	</resultMap>
	
	<select id="queryByRed" resultMap="reladMap">
		SELECT 
		u.no
		,u.name
		,u.age
		,d.deptno
		,d.deptname
		,d.deptdesc
		FROM t_user u
		LEFT JOIN t_dept d
		ON u.deptno=d.deptno
	</select>

最後得到測試結果:
在這裏插入圖片描述

多對多關係

多對多關係就是雙向的一對多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章