多對一映射、一對多映射


Emp員工表  Dept部門表

多對一映射
在查詢時,需要獲取兩張以上關聯表的數據,通過關聯映射,可以由一個對象獲取關聯對象的信息,例如:查詢一個Emp員工對象,可以
通過關聯映射獲取員工所在的部門Dept對象信息

MyBatis多對一有以下兩種不同的實現形式: 需要在Emp實體類中添加一個屬性   private Dept dept;  因為 是多對一,通過Emp表 也能查到Dept表的數據,查到的是一個Dept對象
1.嵌套查詢:通過執行另外一個SQL映射語句來返回關聯數據結果(需要查詢兩次)
2.嵌套結果查詢:執行一個表關聯查詢SQL,然后將查詢結果映射成關聯對象(需要查詢一次)

方法1

<!-- 嵌套查詢,查詢員工時,關聯查詢出對應的部門信息 -->
     <select id="findEmpAndDeptByEmpnoOne" parameterType="java.lang.Integer" resultMap="empMapOne">
         select * from emp where empno=#{empno}    
     </select>
     <resultMap type="com.xms.entity.Emp" id="empMapOne">
         <association property="dept" column="deptno" javaType="com.xms.entity.Dept" select="findByDeptno"/>
     </resultMap>
     <select id="findByDeptno" resultType="com.xms.entity.Dept" parameterType="java.lang.Integer">
         select * from dept where deptno=#{deptno}
     </select>

方法2

<!-- 嵌套結果查詢,查詢員工時,關聯查詢出對應的部門信息 ,與數據庫交互一次-->
         <select id="findEmpAndDeptByEmpnoOneTwo" parameterType="integer" resultMap="empMapTwo" >
             select * from emp e inner join dept d on e.deptno=d.deptno where e.empno=#{empno}
         </select>
         <resultMap type="com.xms.entity.Emp" id="empMapTwo">
             <id property="empno" column="empno"/>
             <result property="ename" column="ename"/>
             <result property="salary" column="salary"/>
             <result property="bonus" column="bonus"/>
             <result property="hiredate" column="hiredate"/>
             <result property="deptno" column="deptno"/>
             <association property="dept" column="deptno" javaType="com.xms.entity.Dept">
                 <id property="deptno" column="deptno"/>
                 <result property="dname" column="dname"/>
             </association>
         </resultMap>

 

一對多映射
當查詢某個表的記錄信息時,如果關聯表有多條相關記錄,此時,就可以通過一對多映射,例如:查詢某個Dept部門對象信息,
通過一對多映射獲取此部門所有的Emp員工對象信息

MyBatis的一對多有以下兩種不同的實現形式       需要在Dept實體類中添加一個屬性   private List<Emp> dept;  因為 是一對多,通過Dept表 也能查到Emp表的數據,查到的是一個Emp對象的集合
1.嵌套查詢:通過執行另外一個SQL映射語句來返回關聯數據結果(需要查詢兩次)
2.嵌套結果查詢:執行一個表關聯查詢SQL,然后將查詢結果映射成關聯對象(需要查詢一次)

嵌套查詢

<!-- 嵌套查詢,查詢部門信息,同時查詢部門中員工信息 ,與數據庫交互2次-->
     <select id="findByDeptOne" parameterType="integer" resultMap="deptMapOne">
         select * from dept where deptno=#{deptno}
     </select>
     <resultMap type="com.xms.entity.Dept" id="deptMapOne">
         <id property="deptno" column="deptno"/>
         <collection property="emps" javaType="java.util.ArrayList" ofType="com.xms.entity.Emp" column="deptno" select="findEmps" />
     </resultMap>
    <select id="findEmps" resultType="com.xms.entity.Emp" parameterType="java.lang.Integer">
        select * from emp where deptno=#{deptno}
    </select> 

嵌套結果查詢

<!-- 嵌套結果查詢,查詢部門信息,同時查詢部門中員工信息 ,與數據庫交互一次-->
    <select id="findByDeptnoTwo" parameterType="integer" resultMap="deptMapTwo">
         select d.*,e.* from dept d inner join emp e on d.deptno=e.deptno where d.deptno=#{deptno}
     </select>
     <resultMap type="com.xms.entity.Dept" id="deptMapTwo">
         <id property="deptno" column="deptno"/>
         <result property="dname" column="dname"/>
         <collection property="emps" column="deptno" javaType="java.util.ArrayList" ofType="com.xms.entity.Emp">
             <id property="empno" column="empno"/>
             <result property="ename" column="ename"/>
             <result property="salary" column="salary"/>
             <result property="bonus" column="bonus"/>
             <result property="hiredate" column="hiredate"/>
             <result property="deptno" column="deptno"/>
         </collection>
     </resultMap>

 


免責聲明!

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



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