欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis深入講解resultMap的定義及用法

 更新時(shí)間:2022年04月27日 11:37:43   作者:羨羨ˇ  
MyBatis的每一個(gè)查詢映射的返回類型都是ResultMap,當(dāng)我們提供返回類型屬性是resultType時(shí),MyBatis會(huì)自動(dòng)給我們把對(duì)應(yīng)值賦給resultType所指定對(duì)象的屬性,當(dāng)我們提供返回類型是resultMap時(shí),將數(shù)據(jù)庫(kù)中列數(shù)據(jù)復(fù)制到對(duì)象的相應(yīng)屬性上,可以用于復(fù)制查詢,兩者不能同時(shí)用

        我們知道 ,mybatis框架存在pojo對(duì)象映射 , 直接將查詢到的結(jié)果封裝到對(duì)象中給我們返回, 但如果數(shù)據(jù)庫(kù)的中的列和java中類屬性名就是不一致,或者如果我們實(shí)際返回的對(duì)象需要去關(guān)聯(lián)其他的對(duì)象(也就是說(shuō),其他類的對(duì)象作為我們這個(gè)類的成員變量),那么這時(shí)候使用resultType肯定是不行的

這里我們則需要去定義 resultMap來(lái)完成我們的需求

定義resultMap的過(guò)程就是描述如何從數(shù)據(jù)庫(kù)結(jié)果集中去加載對(duì)象

resultMap多用于多表查詢間的映射關(guān)系, 例如 :

我們以部門和員工為例 , 一個(gè)部門有多個(gè)員工 , 一個(gè)員工屬于一個(gè)部門

建立部門表和員工表

CREATE TABLE dept(      -- 部門表
   id INT PRIMARY KEY AUTO_INCREMENT,
   NAME VARCHAR(10)
)
     
CREATE TABLE employee(  -- 員工表
   id INT PRIMARY KEY AUTO_INCREMENT,
   NAME VARCHAR(10),
   age INT,
   deptId INT
)

在java中創(chuàng)建 Dept(部門)類 和 Employee(員工)類

public class Employee {       //員工類
    private Integer id;
    private String name;
    private Integer age;
    // 一個(gè)員工關(guān)聯(lián)一個(gè)部門
    private Dept dept;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Dept getDept() {
        return dept;
    }
    public void setDept(Dept dept) {
        this.dept = dept;
    }
    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", dept=" + dept +
                '}';
    }
}
public class Dept {
    private Integer id;
    private String name;
    // 一個(gè)部門有多個(gè)員工 ,使用List集合存儲(chǔ)
    private List<Employee> list;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<Employee> getList() {
        return list;
    }
    public void setList(List<Employee> list) {
        this.list = list;
    }
    @Override
    public String toString() {
        return "Dept{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", list=" + list +
                '}';
    }
}

首先我們查詢員工 , 定義dao層接口 : 

public interface EmployeeDao {
    // 查詢所有員工
    List<Employee> selectAllEmployee();
}

由于我們?cè)趯?duì)象中關(guān)聯(lián)了其他對(duì)象, 所以已經(jīng)不是普通映射 ,這里我們定義 resultMap

    <resultMap id="employeeMap" type="Employee">
        <!--主鍵列-->
        <id column="id" property="id"/>
        <!--其他屬性映射-->
        <result property="name" column="ename"/>
        <result property="age" column="age"/>
        <!--一對(duì)一關(guān)聯(lián)-->
        <association property="dept" javaType="Dept">
            <!--需要映射的對(duì)象屬性-->
            <result property="name" column="dname"/>
        </association>
    </resultMap>
    <select id="selectAllEmployee" resultMap="employeeMap">
        SELECT e.id,e.name ename,e.age,d.name dname FROM employee e
                 LEFT JOIN dept d ON e.deptId = d.id
    </select>

resultMap 中的id 是唯一標(biāo)識(shí) , 相當(dāng)于名字 , type類型是我們要返回的類型

<select>中使用resultMap , 傳入剛定義的id即可

這樣在java代碼中我們就可以得到我們想要的映射格式

查詢部門 : 

public interface DeptDao {
    //查詢部門
    List<Dept> selectDept();
}

定義與使用resultMap

<resultMap id="deptMap" type="Dept">
        <id column="id" property="id"/>
        <result column="dname" property="name"/>
        <!--collection為一對(duì)多 , 這里一個(gè)部門包含多個(gè)員工-->
        <collection property="list" javaType="List" ofType="Employee">
            <result property="name" column="ename"/>
        </collection>
    </resultMap>
    <select id="selectDept" resultMap="deptMap">
         SELECT d.id,d.name dname,e.name ename FROM dept d
              LEFT JOIN employee e ON d.id = e.deptId
    </select>

這里 JavaType我們選擇list , 因?yàn)橛胠ist集合來(lái)存儲(chǔ)多個(gè)員工信息, ofType是list集合中實(shí)際包含的對(duì)象名,這里是員工 Employee

通過(guò)resultMap 我們就可以得到自己想要的映射關(guān)系

到此這篇關(guān)于mybatis深入講解resultMap的定義及用法的文章就介紹到這了,更多相關(guān)mybatis resultMap內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot工程如何使用阿里云OSS傳輸文件

    springboot工程如何使用阿里云OSS傳輸文件

    阿里云對(duì)象存儲(chǔ)OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù),多種存儲(chǔ)類型供選擇,全面優(yōu)化存儲(chǔ)成本,非常適合存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù),本文給大家介紹springboot工程使用阿里云OSS傳輸文件的操作,感興趣的朋友一起看看吧
    2023-08-08
  • Springboot日期轉(zhuǎn)換器實(shí)現(xiàn)代碼及示例

    Springboot日期轉(zhuǎn)換器實(shí)現(xiàn)代碼及示例

    這篇文章主要介紹了Springboot日期轉(zhuǎn)換器實(shí)現(xiàn)代碼及示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • idea全局設(shè)置Maven配置的實(shí)現(xiàn)步驟

    idea全局設(shè)置Maven配置的實(shí)現(xiàn)步驟

    本文主要介紹了idea全局設(shè)置Maven配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Spring Cloud Config 使用本地配置文件方式

    Spring Cloud Config 使用本地配置文件方式

    這篇文章主要介紹了Spring Cloud Config 使用本地配置文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java 多線程-鎖詳解及示例代碼

    java 多線程-鎖詳解及示例代碼

    本文主要介紹 Java 多線程鎖的基礎(chǔ)知識(shí),這里整理了相關(guān)資料及示例代碼有興趣的小伙伴可以參考下
    2016-09-09
  • 關(guān)于spring項(xiàng)目中無(wú)法加載resources下文件問題及解決方法

    關(guān)于spring項(xiàng)目中無(wú)法加載resources下文件問題及解決方法

    在學(xué)習(xí)Spring過(guò)程中,TestContext框架試圖檢測(cè)一個(gè)默認(rèn)的XML資源位置,再resources下創(chuàng)建了一個(gè)com.example的文件夾,執(zhí)行時(shí),報(bào)錯(cuò),本文給大家介紹spring項(xiàng)目中無(wú)法加載resources下文件,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • 如何在IDEA啟動(dòng)多個(gè)Spring Boot工程實(shí)例(圖文)

    如何在IDEA啟動(dòng)多個(gè)Spring Boot工程實(shí)例(圖文)

    這篇文章主要介紹了如何在IDEA啟動(dòng)多個(gè)Spring Boot工程實(shí)例(圖文),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • MyBatis接口的簡(jiǎn)單實(shí)現(xiàn)原理分析

    MyBatis接口的簡(jiǎn)單實(shí)現(xiàn)原理分析

    這里僅僅舉個(gè)簡(jiǎn)單例子來(lái)說(shuō)明原理,不是完全針對(duì)MyBatis的,這種思想我們也可以應(yīng)用在其他地方。地mybatis接口實(shí)現(xiàn)原理感興趣的朋友一起看看吧
    2017-07-07
  • 導(dǎo)致MyEclipse內(nèi)存不足的原因分析及解決辦法

    導(dǎo)致MyEclipse內(nèi)存不足的原因分析及解決辦法

    這篇文章主要介紹了導(dǎo)致MyEclipse內(nèi)存不足的原因分析及解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • java中關(guān)于Map的三種遍歷方法詳解

    java中關(guān)于Map的三種遍歷方法詳解

    本篇文章是對(duì)java中關(guān)于Map的三種遍歷方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06

最新評(píng)論