中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MyBatis測試resultMap,分步查詢以及延遲加載

發布時間:2020-07-25 16:47:18 來源:網絡 閱讀:965 作者:Adam的blog 欄目:開發技術

什么是resultMap?

  resultMap即自定義結果集映射規則,之前我們使用的resultType是MyBatis為我們提供的默認映射規則,使用方法如下:

<mapper namespace="com.zgz.MyBatis.dao.DeptMapper">
        <select id="getDeptById" resultType="com.zgz.MyBatis.bean.Dept">
            select id, dept_name deptName from tbl_dept where id = #{id}
        </select>
</mapper>

  那么resultMap的作用是什么呢?之前我們在處理數據庫中字段與javabean中的屬性不一致的問題時,采用的方法是起別名或者開啟mybatis的自動駝峰映射,現在可以使用resultMap來做,另外可以使用解決級聯查詢的問題

如何使用resultMap?

 我們現在新建一張員工部門表,要求是在我們查詢員工的同時查詢出員工對應的部門?
首先給出對應的JavaBean

public class Dept {
    private Integer id;
    private String deptName;
    //get,set,tostring()。。。

}

寫上相應的mapper

<mapper namespace="com.zgz.MyBatis.dao.DeptMapper">
        <select id="getDeptById" resultType="com.zgz.MyBatis.bean.Dept">
            select id, dept_name deptName from tbl_dept where id = #{id}
        </select>
</mapper>

SQL映射文件中進行配置:

<?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.zgz.MyBatis.dao.EmployeeMapperPlus">

    <!-- 
        測試resultMap(自定義某個javabean的封裝規則)
        type:自定義規則的java類型
        id:方便引用,唯一 
    -->
    <resultMap type="com.zgz.MyBatis.bean.Employee" id="MyEmp">
        <!-- 
            id:指定主鍵的封裝規則,底層會有優化
                column:指定哪一列
                property:指定對應的javabean屬性 
        -->
        <id column="id" property="id"/>
        <!-- result是指定普通列的封裝規則 -->
        <result column="last_name" property="lastName"/>
        <!-- 其他的不指定會默認封裝,最好指定一下 -->
        <result column="email" property="email"/>
        <result column="gender" property="gender"/>
    </resultMap>

    <!-- resultMap:自定義結果集映射規則 -->
    <select id="getEmployeeByGender" resultMap="MyEmp">
        select * from tbl_employee where gender = #{gender}
    </select>

    <!-- resultMap級聯查詢 -->
    <!-- 第一種方法:使用級聯屬性封裝結果集-->
    <resultMap type="com.zgz.MyBatis.bean.Employee" id="MySecond">
        <id column="id" property="id"/>
        <result column="last_name" property="lastName"/>
        <result column="gender" property="gender"/>
        <result column="email" property="email"/>

        <result column="did" property="dept.id"/>
        <result column="dept_name" property="dept.deptName"/>
    </resultMap>
    <!-- 第二種方法: 使用association定義單個對象的封裝 -->
    <resultMap type="com.zgz.MyBatis.bean.Employee" id="MyThird">
        <id column="id" property="id"/>
        <result column="last_name" property="lastName"/>
        <result column="gender" property="gender"/>
        <result column="email" property="email"/>

        <!--
            association:可以指定聯合的javabean對象
                property:指定哪個屬性是聯合的對象
                javaType:指定這個屬性的類型(不能省略)    
        -->
        <association property="dept" javaType="com.zgz.MyBatis.bean.Dept">
            <id column="did" property="id"/>
            <result column="dept_name" property="deptName"/>
        </association>      
    </resultMap>
    <!-- 第三種方法:分步查詢 -->
    <resultMap type="com.zgz.MyBatis.bean.Employee" id="MyFourth">
        <id column="id" property="id"/>
        <result column="last_name" property="lastName"/>
        <result column="gender" property="gender"/>
        <result column="email" property="email"/>

        <!-- 
            使用 association 進行分步查詢:
                1. 先按照員工id查詢員工信息
                2. 根據查詢到的員工信息的d_id值去查出部門信息
                3. 部門設置到員工里面
            association 定義關聯對象的封裝規則
                select:表明當前屬性是調用select指定的方法查出的結果
                column:指定將哪一列的值傳給這個方法
            流程:(理解)
                使用select制定的方法,傳入column指定的這列參數的值查出對象,并封裝給property指定的屬性
        -->
        <association property="dept" 
            select="com.zgz.MyBatis.dao.DeptMapper.getDeptById" column="d_id">
        </association>
    </resultMap>

    <!-- 場景一:查詢員工的同時查詢出員工對應的部門 -->
    <select id="getEmpAndDept" resultMap="MyThird">
        SELECT e.id id, e.last_name last_name,e.email email, e.gender gender, e.d_id d_id, d.id did, d.dept_name dept_name
        FROM tbl_employee e, tbl_dept d 
        WHERE e.d_id = d.id AND e.id = #{id}
    </select>

    <!-- 分步查詢 -->
    <select id="getEmpByIdStep" resultMap="MyFourth">
        select * from tbl_employee where id = #{id}
    </select>
    <!-- 
        分步查詢可以使用延遲加載(按需加載)(懶加載):
            Employee ===》 Dept
                要查詢Dept,我們每次查詢Employee時都將一起查詢出來
                為了達到部門信息在我們使用的時候在查詢出來的要求,我們可以在分步查詢的基礎上加兩個配置(在mybatis中的主配置文件中)
     -->

</mapper>

主配置文件中配置:

<configuration>

    <!-- configuration里的標簽必須按順序寫 -->
    <settings>
        <!--  顯示我們需要更改配置的值,即使是默認的建議寫上,防止版本更新帶來的問題 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings> 

    <environments default="development">
        <environment id="test">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>

        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"
                    value="jdbc:mysql://localhost:3306/mybatis?useSSL=false" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>

    <!-- 將我們寫好的sql映射文件(testEmployeeMapper.xml)注冊到全局配置文件(mybatis-config.xml)中 -->
    <mappers>
        <mapper resource="testEmployeeMapperPlus.xml" />
        <mapper resource="testDeptMapper.xml" />
    </mappers>
</configuration>

注意事項(填了好長時間的坑)

 1》千萬不要忘記將我們寫好的sql映射文件注冊到全局配置文件中,注意是所有的sql映射文件

<mappers>
        <mapper resource="testEmployeeMapperPlus.xml" />
        <mapper resource="testDeptMapper.xml" />
    </mappers>

 2》configuration里的標簽必須按順序寫,標簽是有順序的
MyBatis測試resultMap,分步查詢以及延遲加載

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辉县市| 四川省| 综艺| 涿州市| 称多县| 华蓥市| 淮阳县| 安徽省| 独山县| 南京市| 绥江县| 沁水县| 鹤壁市| 云南省| 肃南| 云阳县| 桃园县| 大宁县| 靖江市| 灌南县| 林口县| 库伦旗| 尖扎县| 乌什县| 旬阳县| 临湘市| 莒南县| 青冈县| 庆城县| 普宁市| 淮南市| 澳门| 宜章县| 阿城市| 新兴县| 通辽市| 洪雅县| 稷山县| 获嘉县| 德格县| 洛浦县|