MyBatis使用resultMap自定义映射规则与关联映射
一、寫在前面
在MyBatis 的全局配置文件中我們可以通過在settings標簽中設置
<setting name="mapUnderscoreToCamelCase" value="true"/>來開啟駝峰命名法,實現數據庫中的字段名與JavaBean 中屬性的關系映射。
在數據庫中一般使用單詞來定義列名,多個列名之間用’ _ ‘分隔開,比如department_name,在JavaBean 中一般使用駝峰命名來定義屬性,所以會定義為departmentName。在默認不開啟駝峰命名法的情況下,它們之間是不能夠實現關系映射的,在開啟對駝峰命名法的支持后,MyBatis 會對數據庫中的字段進行駝峰命名轉換。
但是有的時候,開啟駝峰命名法也不能完成映射,比如數據庫字段dept_name對應JavaBean 中的departmentName,這時候就需要我們自定義resultMap關系映射。
二、resultMap自定義映射規則
使用resultMap實現數據庫中的dept_name字段與JavaBean 中的departmentName的關系映射。
mapper 接口:
// 通過id 查詢部門信息,返回的是一個Department 對象Department getDeptById(Integer id);SQL 映射文件:
<!--先通過resultMap 定義映射規則id:當前命名空間中的一個唯一標識,用于標識一個resultMap type:類的完全限定名, 或者一個類型別名,也就是返回的對應JavaBean 類型--><resultMap id="BaseDeptResultMap" type="com.jas.mybatis.bean.Department"><!-- <id>:與下面<result>標簽的區別是可以用于提升性能,所以這里用<id>標簽來定義主鍵的映射關系column:數據庫中對應的字段名property:對應JavaBean 的屬性名因為可以實現自動映射,所以<id column="id" property="id"/> 在這里也可以省略如果開啟了駝峰命名法,對應的映射轉換也可以省略--><id column="id" property="id"/><result column="dept_name" property="departmentName"/></resultMap><select id="getDeptById" resultMap="BaseDeptResultMap">SELECT * FROM t_dept WHERE id = #{id}</select>三、resultMap實現關聯映射
有這樣一個需求,在根據id 查詢員工信息的時候,把員工所在的部門信息也查出來。
Employee 員工類:
package com.jas.mybatis.bean;public class Employee {private Integer id;private String username;private Character gender;private String email;//在Employee 類中定義一個Department 對象,用來封裝員工的部門信息private Department department;// 省略get、set 與toString 方法 }Department部門類:
package com.jas.mybatis.bean;public class Department {private Integer id;private String departmentName; }mapper 接口:
// 根據id 查出員工的信息并把對應的部門信息也查詢出來Employee getEmpAndDeptById(Integer id);SQL 映射文件:
方式一:
<resultMap type="com.jas.mybatis.bean.Employee" id="BaseEmployeeResultMap"><id column="id" property="id"/><result column="username" property="username"/><result column="gender" property="gender"/><result column="email" property="email"/><!-- 通過下面兩個列名獲得數據將封裝成Department 對象直接通過屬性名.屬性名的方式指定映射的關系--><result column="d_id" property="department.id"/><result column="dept_name" property="department.departmentName"/></resultMap><select id="getEmpAndDeptById" resultMap="BaseEmployeeResultMap">SELECT e.id, e.username, e.gender, e.email, e.d_id, d.dept_nameFROM t_employee e LEFT JOIN t_dept d ON (e.d_id = d.id) WHERE e.id = #{id}</select>方式二(在resultMap使用association標簽):
<resultMap type="com.jas.mybatis.bean.Employee" id="BaseEmployeeResultMap"><id column="id" property="id"/><result column="username" property="username"/><result column="gender" property="gender"/><result column="email" property="email"/><!--使用association 標簽實現關聯查詢property:在Employee 類中對應的department 屬性javaType:關聯的類的全路徑名或者其對應的別名--><association property="department" javaType="com.jas.mybatis.bean.Department"><!--property:直接就是Department 類中的屬性--><id column="d_id" property="id"/><result column="dept_name" property="departmentName"/></association></resultMap><select id="getEmpAndDeptById" resultMap="BaseEmployeeResultMap">SELECT e.id, e.username, e.gender, e.email, e.d_id, d.dept_nameFROM t_employee e LEFT JOIN t_dept d ON (e.d_id = d.id) WHERE e.id = #{id}</select>查看結果:
四、總結
這篇博文主要介紹了使用resultMap 實現數據庫字段與JavaBean 屬性之間高級映射的知識點,并實現了一個關聯映射。resultMap的作用還有很多,比如分布查詢與延遲加載等,都是在resultMap的基礎上完成的。如果有興趣,可以關注后續的博文。希望這篇博文能夠為你提供幫助。
總結
以上是生活随笔為你收集整理的MyBatis使用resultMap自定义映射规则与关联映射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑开机怎么优盘启动不了系统文件 电脑无
- 下一篇: 复制的文件怎么安装系统文件在哪里 复制文