Spring Boot入門系列(十七)Mybatis創(chuàng)建自定義mapper 實(shí)現(xiàn)多表關(guān)聯(lián)查詢!

之前講了Springboot整合Mybatis,介紹了如何自動(dòng)生成pojo實(shí)體類、mapper類和對(duì)應(yīng)的mapper.xml 文件,并實(shí)現(xiàn)最基本的增刪改查功能。mybatis 插件自動(dòng)生成的mapper 實(shí)現(xiàn)了大部分基本、通用的方法,如:insert、update、delete、select 等大概20個(gè)左右方法,都是比較基礎(chǔ)的增刪改查,這些通用Mapper提供的方法基本都能滿足各種單表操作需求。
但是,在實(shí)際工作中通用Mapper并不能滿足所有的工作,或是某個(gè)業(yè)務(wù)需要手寫 sql 語(yǔ)句、或是多表關(guān)聯(lián)時(shí),該怎么辦呢?這就需要額外的一些自定義的mapper 實(shí)現(xiàn)一些特定的功能。下面就來介紹自定義mapper 的實(shí)現(xiàn)。
一、如何實(shí)現(xiàn)
首先需要?jiǎng)?chuàng)建一個(gè)項(xiàng)目并整合mybatis等相關(guān)框架,這個(gè)之前介紹過這里不再細(xì)說。直接在原來的基礎(chǔ)上實(shí)現(xiàn)?!禨pring Boot入門系列(六)Spring Boot如何使用Mybatis XML 配置版【附詳細(xì)步驟】》
1、創(chuàng)建自定義 mapper
在com.weiz.mapper 包中,創(chuàng)建?SysUserMapperCustom 接口
package com.weiz.mapper;import com.weiz.pojo.SysUser;import java.util.List;public interface SysUserMapperCustom {ListqueryUserSimplyInfoById(String userId) ;}
說明:
??? SysUserMapperCustom 是一個(gè)接口,這里只定義了一個(gè)方法:queryUserSimplyInfoById 。
?
2、創(chuàng)建mapper 配置文件
創(chuàng)建完mapper類之后,需要?jiǎng)?chuàng)建SysuserMapperCustom 類對(duì)應(yīng)的xml 配置文件:SysuserMapperCustom.xml 。
<mapper namespace="com.weiz.mapper.SysUserMapperCustom" ><select id="queryUserSimplyInfoById" resultType="com.weiz.pojo.SysUser"parameterType="java.lang.String" >select*fromsys_userwhereid = #{id,jdbcType=VARCHAR}select>mapper>
說明:
id:對(duì)應(yīng)的就是 接口名,
resultType:返回的是結(jié)果類型,
parameterType:參數(shù)的類型,
?
3、Service調(diào)用
首先在UserService接口中增加queryUserByIdCustom方法,然后在對(duì)應(yīng)的 UserServiceImpl 實(shí)現(xiàn)類中,注入SysUserMapperCustom 。最后實(shí)現(xiàn)queryUserByIdCustom 方法,在方法中調(diào)用前面自定義的mapper 類中方法即可。具體代碼如下:
// 1. 在UserServiceImpl 中注入SysUserMapperCustomprivate SysUserMapperCustom userMapperCustom;// 2. 實(shí)現(xiàn)接口方法,調(diào)用public SysUser queryUserByIdCustom(String userId) {ListuserList = userMapperCustom.queryUserSimplyInfoById(userId); if (userList != null && !userList.isEmpty()) {return (SysUser)userList.get(0);}return null;}
?
二、如何調(diào)用
添加了自定義的mapper和對(duì)應(yīng)的方法之后,怎么調(diào)用這些mapper 呢?其實(shí)和之前的調(diào)用方式是一樣的。
首先在原先的MybatisController 創(chuàng)建一個(gè)測(cè)試方法。
public JSONResult queryUserByIdCustom(String userId) {return JSONResult.ok(userService.queryUserByIdCustom(userId));}
?
啟動(dòng)項(xiàng)目,并在瀏覽器中輸入地址:http://localhost:8080/mybatis/queryUserByIdCustom?userId=200425AYXA733M5P
查看是否返回人員數(shù)據(jù)
通過上面的例子,我們實(shí)現(xiàn)了自定義的mapper,并根據(jù)特殊的要求返回相關(guān)的數(shù)據(jù)信息。
三、多表關(guān)聯(lián)查詢
上面講的是,創(chuàng)建一個(gè)自定義的mapper,實(shí)現(xiàn)自定義的查詢。那么mybatis多表關(guān)聯(lián)查詢操作怎么實(shí)現(xiàn)呢??其實(shí),多表的關(guān)聯(lián)查詢跟這個(gè)類似。
1、自定義mapper類 SysUserMapperCustom 類中,增加一個(gè)新的方法
public interface SysUserMapperCustom {ListqueryUserSimplyInfoById(String userId) ;ListqueryAllUserListCustom() ;}
說明:
?????queryAllUserListCustom() 方法為新加的關(guān)聯(lián)查詢的方法。
?
2、在之前的SysuserMapperCustom配置文件:SysuserMapperCustom.xml 增加新方法對(duì)應(yīng)的配置。
<resultMap id="UserMap" type="com.weiz.pojo.SysUser"><id column="id" jdbcType="VARCHAR" property="id" /><result property="username" column="username" jdbcType="VARCHAR" /><association property="company" javaType="com.weiz.pojo.SysCompany" column="company_id"><id property="id" jdbcType="VARCHAR" column="companyid">id><result property="name" jdbcType="VARCHAR" column="companyname">result>association>resultMap><select id="queryAllUserListCustom" resultMap="UserMap" >SELECTu.id,u.username,c.id companyid, c.name companynameFROM sys_user uLEFT JOIN sys_company c on u.company_id=c.idselect>
上面配置的sql ,可以看到用戶表sys_user 關(guān)聯(lián) sys_company 表,查詢完整的人員公司信息。
說明:
1、association:用于配置1對(duì)1的映射
屬性property:company對(duì)象在user對(duì)象中的屬性名
屬性javaType:company屬性的java對(duì)象 類型
屬性column:user表中的外鍵引用company表。
2、collection:用于配置1對(duì)多關(guān)系映射
property:在user里面的List
? ofType:當(dāng)前account表的java類型
column:外鍵
以上就是在自定義的mapper 中實(shí)現(xiàn)多表關(guān)聯(lián)查詢的方法,這里就不寫測(cè)試代碼了,大家仔細(xì)去測(cè)試實(shí)驗(yàn)。
?
最后
以上,就把Spring Boot 中mybatis 如何通過自定義mapper 實(shí)現(xiàn)多表關(guān)聯(lián)查詢介紹完了,實(shí)現(xiàn)起來比較簡(jiǎn)單。上面的例子比較簡(jiǎn)單,沒有做多表關(guān)聯(lián),大家自己寫的時(shí)候,可以試試復(fù)雜的多表關(guān)聯(lián)。
這個(gè)系列課程的完整源碼,也會(huì)提供給大家。大家關(guān)注我的微信公眾號(hào)(架構(gòu)師精進(jìn)),回復(fù):springboot源碼。獲取這個(gè)系列課程的完整源碼。
推薦閱讀:
Spring Boot入門系列(十六)整合pagehelper,一秒實(shí)現(xiàn)分頁(yè)功能!
Spring Boot入門系列(十五) SpringBoot開發(fā)環(huán)境熱部署的配置
Spring Boot入門系列(十三)統(tǒng)一日志處理!
Spring Boot入門系列(十一)如何整合Mybatis,實(shí)現(xiàn)增刪改查【XML 配置版】
Spring Boot入門系列(十)如何使用攔截器,一學(xué)就會(huì)!
Spring Boot入門系列(八)整合定時(shí)任務(wù)Task,一秒搞定定時(shí)任務(wù)
SpringBoot入門系列(二)Controller介紹及如何返回json數(shù)
SpringBoot入門系列(一)如何快速創(chuàng)建SpringBoot項(xiàng)

