mybatis深入講解resultMap的定義及用法
我們知道 ,mybatis框架存在pojo對(duì)象映射 , 直接將查詢到的結(jié)果封裝到對(duì)象中給我們返回, 但如果數(shù)據(jù)庫的中的列和java中類屬性名就是不一致,或者如果我們實(shí)際返回的對(duì)象需要去關(guān)聯(lián)其他的對(duì)象(也就是說,其他類的對(duì)象作為我們這個(gè)類的成員變量),那么這時(shí)候使用resultType肯定是不行的
這里我們則需要去定義 resultMap來完成我們的需求
定義resultMap的過程就是描述如何從數(shù)據(jù)庫結(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集合來存儲(chǔ)多個(gè)員工信息, ofType是list集合中實(shí)際包含的對(duì)象名,這里是員工 Employee
通過resultMap 我們就可以得到自己想要的映射關(guān)系
到此這篇關(guān)于mybatis深入講解resultMap的定義及用法的文章就介紹到這了,更多相關(guān)mybatis resultMap內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot?引入?Redis?并配置序列化并封裝RedisTemplate?
這篇文章主要介紹了Springboot?引入?Redis?并配置序列化并封裝RedisTemplate。文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
SpringBoot校園綜合管理系統(tǒng)實(shí)現(xiàn)流程分步講解
這篇文章主要介紹了SpringBoot+Vue實(shí)現(xiàn)校園綜合管理系統(tǒng)流程分步講解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-09-09
Netty學(xué)習(xí)教程之Netty與Marshalling結(jié)合發(fā)送對(duì)象
Netty是由JBOSS提供的一個(gè)Java開源框架,之前已經(jīng)給大家簡(jiǎn)單介紹了一些基礎(chǔ)與使用,下面這篇文章主要給大家介紹了關(guān)于Netty與Marshalling結(jié)合發(fā)送對(duì)象的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05
Java源碼解析阻塞隊(duì)列ArrayBlockingQueue常用方法
今天小編就為大家分享一篇關(guān)于Java源碼解析阻塞隊(duì)列ArrayBlockingQueue常用方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
java如何使用正則表達(dá)式限制特殊字符的個(gè)數(shù)
這篇文章主要介紹了java如何使用正則表達(dá)式限制特殊字符的個(gè)數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Java static方法用法實(shí)戰(zhàn)案例總結(jié)
這篇文章主要介紹了Java static方法用法,結(jié)合具體案例形式總結(jié)分析了java static方法功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-09-09

