介紹
例:學生表,班級表,希望在查詢學生的時候一起返回該學生的班級,而一個實體類封裝的是一個表,如需要多表查詢就需要自定義映射。
表結構
班級表
學生表
SQL語句
SELECT a.id,a.name,a.classes,b.id classesId,b.name classesNmae
FROM students a,classes b WHERE a.name='蔡徐坤' and a.classes=b.id
實體類
班級類
@Data
public class Students {Long id;String name;}
學生類
@Data
public class Classes {Long id;String name;
}
Vo類 (返回前端)
@Data
public class StudentsVo {Students students;Classes classes;
}
Mapper
查詢語句
<select id="list" resultMap="listMap">SELECT a.id,a.name,a.classes,b.id classesId,b.name classesNmae FROM students a,classes b WHERE a.name=#{name} and a.classes=b.id
</select
映射規則
id:自定義規則的名稱,可以當作是一個方法
type:封裝到哪個類
association :一對一
javaType:子對象,如果 學生 或 班級
autoMapping:false 或 true true為自動映射屬性,如果屬性名和字段名一致就可以使用,不一致時使用result
<!--自定義映射規則--><resultMap id="listMap" type="com.example.demo.demos.web.pojo.vo.StudentsVo" ><association property="students" javaType="com.example.demo.demos.web.pojo.Students" autoMapping="true"></association><!--封裝學生類--><association property="classes" javaType="com.example.demo.demos.web.pojo.Classes" autoMapping="true"><id property="id" column="classesId" ></id><result property="name" column="classesNmae"></result></association><!--封裝班級類--></resultMap>
id:表示是主鍵
result:屬性名不一致是使用
property:實體類屬性名
column:數據字段名
結果
{"code": 200,"msg": "獲取成功","data": [{"students": {"id": 18,"name": "蔡徐坤"},"classes": {"id": 1,"name": "大數據5"}},{"students": {"id": 21,"name": "蔡徐坤"},"classes": {"id": 2,"name": "大數據1"}}]
}
這里json分為兩個對象封裝了,一個存學生,一個存班級,也可以把學生直接存到學生對象里。
優化
修改學生的實體類,直接把班級類定義
學生實體類
@Data
public class Students {Long id;String name;//班級消息Classes belong;
}
Mapper
<!--自定義映射規則-->
<resultMap id="listMap" type="com.example.demo.demos.web.pojo.Students" ><!--設置主鍵--><id property="id" column="id"></id><!--字段映射到屬性--><result property="name" column="name"></result><!--屬性和字段但一致的情況下可以使用autoMapping="true"--><association property="belong" javaType="com.example.demo.demos.web.pojo.Classes" ><id property="id" column="classesId"></id><result property="name" column="classesNmae"></result></association><!--班級信息封裝的類--></resultMap>
一樣的效果,都可以查出,但是結構更好一點
{"code": 200,"msg": "獲取成功","data": [{"id": 18,"name": "蔡徐坤","belong": {"id": 1,"name": "大數據5"}},{"id": 21,"name": "蔡徐坤","belong": {"id": 2,"name": "大數據1"}}]
}