一.介紹與應(yīng)用場景
- 通常我們會遇到這樣一個業(yè)務(wù)場景:有一個班級叫A班涨享,班級有10個學(xué)生(B),學(xué)生包括了性別,年齡,家庭情況(C),每個學(xué)生家庭情況包含住址丈冬,父母的姓名的屬性流酬,那么現(xiàn)在通過mysql關(guān)聯(lián)查詢查詢到以上所有信息币厕,那么查詢結(jié)果如何映射成一個對象,這就是mybatis高級結(jié)果映射要做的事情芽腾。
- 其中涉及到一對多與一對一的結(jié)果映射關(guān)系旦装,想了解更多,請看文檔摊滔,不在贅述阴绢。
結(jié)果映射介紹
二準(zhǔn)備工作
-
建表
- 建DTO
課程
public class Course {
private Integer id;
private String cousreName;
List<Student> students;
}
學(xué)生
public class Student {
private Integer id;
private String stuName;
private Address address;
}
家庭情況
public class Address {
private Integer id;
private String address;
}
- .結(jié)果映射與sql
<resultMap id="testMap" type="course">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="cousre_name" jdbcType="VARCHAR"property="cousreName" />
<collection property=" students" ofType="student">
<id column="s_id" jdbcType="INTEGER" property="id" />
<result column="stu_name " jdbcType="VARCHAR" property="stuName" />
<association property="address" javaType="Address">
<id column="a_id" jdbcType="INTEGER" property="id" />
<result column="address" jdbcType="VARCHAR" property="address" />
</association>
</collection>
</resultMap>
<select id="findCommodityPageById" resultMap="commodityPageModal" >
SELECT
c.id ,
c.course_name ,
s.id as s_id,
s.stu_name ,
a.id,
a.address
FROM course c
LEFT JOIN student s
ON c.id=s.course_id
LEFT JOIN address a
ON s.id=a.stu_id
</select>
三.分析
- 屬性分析resultMap: id="testMap"(自定義)艰躺,type="course"(映射的dto)
- 屬性分析result: column(mysql字段)呻袭,property(dt對應(yīng)字段)
- collection(一對多映射),ofType(子類映射的dto)
- association(一對一)
- 那為什么我的id有id腺兴,a_id,s_id呢左电?結(jié)果映射如果不同dto有相同名稱屬性,需要映射成不同名字,否則只會映射第一個屬性篓足,這點(diǎn)要注意段誊。