<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3422字,需瀏覽 7分鐘

           ·

          2020-08-15 11:25

          之前講了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 { List queryUserSimplyInfoById(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            *        from            sys_user        where            id = #{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 中注入SysUserMapperCustom @Autowiredprivate SysUserMapperCustom userMapperCustom;

          // 2. 實(shí)現(xiàn)接口方法,調(diào)用@Overridepublic SysUser queryUserByIdCustom(String userId) { List userList = 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è)試方法。

          @RequestMapping("/queryUserByIdCustom")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 {    List queryUserSimplyInfoById(String userId);    List queryAllUserListCustom();     }

          說明:

          ?????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"  >       SELECT       u.id,u.username,c.id companyid, c.name companyname       FROM sys_user u       LEFT JOIN sys_company c on u.company_id=c.id    select>

          上面配置的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è)系列課程的完整源碼。


          推薦閱讀:



          瀏覽 52
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  奇米影视一本道 | 国产一级大片 | 色色激情| 日本午夜精品 | 99这里只有精品视频 |