一對一關係
數據庫中我有兩張表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>
最後得到測試結果:
多對多關係
多對多關係就是雙向的一對多。