javascript
jpa多表关联查询_Spring Boot 整合mybatis如何自定义 mapper 实现多表关联查询
上一篇文章已經介紹了自定義 mapper 實現自定義的方法,其實實現了通過自定義的mapper就可以做多表關聯等復雜查詢。但是很多朋友還是反饋說沒有實現多表關聯查詢,所以,今天把文章又重新修改了,增加了多表關聯的實現步驟。
Mybatis 插件自動生成的mapper 實現了大部分基本、通用的方法,如:insert、update、delete、select 等大概20個左右方法,都是比較基礎的增刪改查,這些通用Mapper提供的方法基本都能滿足各種單表操作需求。
但是,在實際工作中通用Mapper并不能滿足所有的工作,或是某個業務需要手寫 sql 語句、或是多表關聯時,該怎么辦呢? 這就需要額外的一些自定義的mapper 實現一些特定的功能。下面就來介紹自定義mapper 的實現。
一、自定義mapper
首先需要創建一個項目并整合mybatis等相關框架,這個之前介紹過這里不再細說。直接在原來的基礎上實現。《Spring Boot如何使用Mybatis XML 配置版》
1、創建自定義 mapper
在com.weiz.mapper 包中,創建 SysUserMapperCustom 接口
package com.weiz.mapper;import com.weiz.pojo.SysUser;import java.util.List;public interface SysUserMapperCustom { List queryUserSimplyInfoById(String userId);}SysUserMapperCustom 是一個接口,這里只定義了一個方法:queryUserSimplyInfoById 。
2、創建自定義mapper 配置文件
在resourcemapper 目錄下,創建一個自定義的SysUserMapperCustom.xml
<?xml version="1.0" encoding="UTF-8" ?> select * from sys_user where id = #{id,jdbcType=VARCHAR}說明:
id:對應的就是 接口名,
resultType:返回的是結果類型,
parameterType:參數的類型,
# : 是傳遞相關參數。
3、Service 調用
首先在UserService接口中增加queryUserByIdCustom方法,然后在對應的 UserServiceImpl 實現類中,注入SysUserMapperCustom 。最后實現queryUserByIdCustom 方法,在方法中調用前面自定義的mapper 類中方法即可。具體代碼如下:
// 1. 在UserServiceImpl 中注入SysUserMapperCustom @Autowiredprivate SysUserMapperCustom userMapperCustom;// 2. 實現接口方法,調用@Overridepublic SysUser queryUserByIdCustom(String userId) { List userList = userMapperCustom.queryUserSimplyInfoById(userId); if (userList != null && !userList.isEmpty()) { return (SysUser)userList.get(0); } return null;}以上三步,就能輕松實現 自定義的mapper 實現自定義的方法。
二、多表關聯
上面,通過自定義的mapper 實現了自定義方法。下面說一說多表關聯如何實現。
這里用用戶(Sys_User)和公司(Sys_Company)的關聯為例。
1、數據庫表
數據庫中原先已經有Sys_User 表,增加Sys_Company 表。
CREATE TABLE `sys_company` ( `id` varchar(64) NOT NULL DEFAULT '', `name` varchar(256) DEFAULT NULL, `code` varchar(64) DEFAULT NULL, `tax_id` varchar(64) DEFAULT NULL, `address` varchar(1024) DEFAULT NULL, `tel` varchar(256) DEFAULT NULL, `email` varchar(256) DEFAULT NULL, `register_time` date DEFAULT NULL, `is_delete` bit(1) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;Sys_User 表 通過company_id 和Sys_Company 表關聯。
相關測試數據大家自行創建。
2、修改 pojo 類
首先、數據庫中創建完Sys_Company 表后,可以用我們之前的mybatis插件,自動生成Company對應的mapper 、pojo 類 和 xml 配置文件。這里不再細說,大家可以看我之前的文章:《Spring Boot如何使用Mybatis XML 配置版「附詳細步驟」》。
然后、自動生成的SysUser 類,沒有對應的 Company 對象。需要手動加上。
package com.weiz.pojo;import java.util.Date;import javax.persistence.*;@Table(name = "sys_user")public class SysUser { @Id private String id; @Column(name = "company_id") private String companyId; // 省略之前的 字段 private SysCompany company; // 省略之前的 字段對應的getter setter public SysCompany getCompany() { return company; } public void setCompany(SysCompany company) { this.company = company; }}3、自定義mapper 增加多表查詢方法。
首先、在自定義的mapper:SysUserMapperCustom 中增加 queryAllUserListCustom方法
package com.weiz.mapper;import com.weiz.pojo.SysUser;import java.util.List;public interface SysUserMapperCustom { List queryUserSimplyInfoById(String userId); List queryAllUserListCustom();}然后、在resourcemapperSysUserMapperCustom.xml 配置文件中增加 queryAllUserListCustom 方法配。
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說明:
1、association:用于配置1對1的映射
屬性property:company對象在user對象中的屬性名
屬性javaType:company屬性的java對象 類型
屬性column:user表中的外鍵引用company表。
2、collection:用于配置1對多關系映射
property:在user里面的List的屬性名
ofType:當前account表的java類型
column:外鍵
4、Service 調用
Service中調用新增加的方法和上面的一樣,首先在UserService接口中增加queryUserByIdCustom方法,然后在對應的 UserServiceImpl 實現類中,注入SysUserMapperCustom 。最后實現queryUserByIdCustom 方法,在方法中調用前面自定義的mapper 類中方法即可。具體代碼如下:
// 1. 在UserServiceImpl 中注入SysUserMapperCustom @Autowiredprivate SysUserMapperCustom userMapperCustom;// 2. 實現接口方法,調用@Overridepublic SysUser queryAllUserListCustom() { List userList = userMapperCustom.queryAllUserListCustom(); return userList;}以上四步,實現了自定義的mapper 中 多表關聯的復雜查詢的方法。配置比較復雜。大家按照說明,一步一步,仔細配置。應該沒有問題。
三、測試
首先在原先的MybatisController 創建對應的測試方法。
@RequestMapping("/queryUserByIdCustom")public JSONResult queryUserByIdCustom(String userId) { return JSONResult.ok(userService.queryUserByIdCustom(userId));}@RequestMapping("/queryAllUserListCustom")public JSONResult queryAllUserListCustom() { return JSONResult.ok(userService.queryAllUserListCustom());}啟動項目,并在瀏覽器中輸入地址:
http://localhost:8080/mybatis/queryUserByIdCustom?userId=200425AYXA733M5P
最后
以上,就把Spring Boot 中mybatis 如何通過自定義mapper 實現多表關聯查詢介紹完了,實現起來比較簡單。上面的例子比較簡單,沒有做多表關聯,大家自己寫的時候,可以試試復雜的多表關聯。
這個系列課程的完整源碼,也會提供給大家。大家私信我(章為忠學架構),回復:springboot源碼 。獲取這個系列課程的完整源碼。
推薦閱讀:
Spring Boot如何整合Quartz 實現定時任務
Spring Boot入門系列(八)整合定時任務Task,一秒搞定定時任務
Spring Boot入門系列(十五)Spring Boot 開發環境熱部署的配置
Spring Boot 使用JdbcTemplate操作數據庫,配置多數據源
Maven快速入門(二)手動創建maven項目hellomaven
Maven快速入門(一)Maven介紹及環境搭建
史上最強《Java 開發手冊》泰山版,阿里出品,必屬精品
Spring Boot入門系列(十三)如何實現事務,極簡版!
總結
以上是生活随笔為你收集整理的jpa多表关联查询_Spring Boot 整合mybatis如何自定义 mapper 实现多表关联查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为此计算机上的所有用户安装此加载项,ac
- 下一篇: dumpbin发现没有入口函数_Java