springboot + mybatis-plus實(shí)現(xiàn)多表聯(lián)合查詢功能(注解方式)
第一步:加入mybatis-plus依賴

第二步:配置數(shù)據(jù)源
spring: thymeleaf: cache: false encoding: utf-8 prefix: classpath:/templates/ suffix: .html enabled: true datasource: url: jdbc:mysql://192.168.1.152:3306/timo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8 driver-class-name: com.mysql.cj.jdbc.Driver username: root password: root type: com.alibaba.druid.pool.DruidDataSource mybatis-plus: configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
第三步:創(chuàng)建兩張有關(guān)聯(lián)關(guān)系的表(我的如下 )
sys_user:用戶表

sys_role:權(quán)限表

第四步:將兩張表映射到實(shí)體類bean(其實(shí)sys_role建不建都無所謂,可以不建sys_role的實(shí)體類)
@Data
@TableName("sys_user") //當(dāng)實(shí)體類名(前提是開啟駝峰)與數(shù)據(jù)庫表名一致時(shí)可不寫
public class SysUser extends Model {
@TableId(type = IdType.AUTO)
private Long id;
private String username;
private String password;
private String salt;
private Integer deptId;
private String picture;
private String sex;
private String email;
private String phone;
@Version
private Integer version;
@TableField(fill = FieldFill.INSERT)
private Date createDate;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateDate;
private Integer status;
********************不想建這個(gè)實(shí)體類就不建 沒有意義
public class SysRole {
private long id;
private String roleName;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
}
第五步:定義mapper(注意看這個(gè)@Select里面的SQL)

第六步:定義一個(gè)通用實(shí)體類Record
import com.alibaba.druid.proxy.jdbc.ClobProxyImpl;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.Reader;
import java.util.*;
/**
* @author Wxiaokun
* @version 1.0
* @date 2020/9/25 0025 下午 4:15
*/
public class Record extends HashMap implements Map {
private static final long serialVersionUID = 1L;
Map map = null;
HttpServletRequest request;
public Record(HttpServletRequest request){
this.request = request;
Map properties = request.getParameterMap();
Map returnMap = new HashMap();
Iterator entries = properties.entrySet().iterator();
Map.Entry entry;
String name = "";
String value = "";
while (entries.hasNext()) {
entry = (Map.Entry) entries.next();
name = (String) entry.getKey();
Object valueObj = entry.getValue();
if(null == valueObj){
value = "";
}else if(valueObj instanceof String[]){
String[] values = (String[])valueObj;
for(int i=0;i<values.length;i++){
value = values[i] + ",";
}
value = value.substring(0, value.length()-1);
}else{
value = valueObj.toString();
}
returnMap.put(name, value);
}
map = returnMap;
}
public Record() {
map = new HashMap();
}
@Override
public Object get(Object key) {
Object obj = null;
if(map.get(key) instanceof Object[]) {
Object[] arr = (Object[])map.get(key);
obj = request == null ? arr:(request.getParameter((String)key) == null ? arr:arr[0]);
} else {
obj = map.get(key);
}
return obj;
}
public String getString(Object key) {
return (String)get(key);
}
@SuppressWarnings("unchecked")
@Override
public Object put(Object key, Object value) {
if(value instanceof ClobProxyImpl){ // 這里必須要到如durid數(shù)據(jù)源的依賴 讀取數(shù)據(jù)庫 Clob類型數(shù)據(jù)
try {
ClobProxyImpl cpi = (ClobProxyImpl)value;
Reader is = cpi.getCharacterStream(); //獲取流
BufferedReader br = new BufferedReader(is);
String str = br.readLine();
StringBuffer sb = new StringBuffer();
while(str != null){ //循環(huán)讀取數(shù)據(jù)拼接到字符串
sb.append(str);
sb.append("\n");
str = br.readLine();
}
value = sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
}
return map.put(key, value);
}
@Override
public Object remove(Object key) {
return map.remove(key);
}
@Override
public void clear() {
map.clear();
}
@Override
public boolean containsKey(Object key) {
return map.containsKey(key);
}
@Override
public boolean containsValue(Object value){
return map.containsValue(value);
}
public Set entrySet() {
return map.entrySet();
}
@Override
public boolean isEmpty() {
return map.isEmpty();
}
public Set keySet() {
return map.keySet();
}
@SuppressWarnings("unchecked")
@Override
public void putAll(Map t) {
map.putAll(t);
}
@Override
public int size() {
return map.size();
}
public Collection values() {
return map.values();
}
}
第七步:接下來就是測試了

測試結(jié)果如下:

至此 到這里 我覺得這個(gè)東西就有點(diǎn)像Jfinal底層封裝的Record類了,在多表聯(lián)合查詢的情況下,我們可以方便的使用mybatis-plus來進(jìn)行了。
到此這篇關(guān)于springboot + mybatis-plus實(shí)現(xiàn)多表聯(lián)合查詢功能(注解方式)的文章就介紹到這了,更多相關(guān)Mybatis-plus 多表聯(lián)合查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Mybatis-Plus或PageHelper多表分頁查詢總條數(shù)不對問題的解決方法
- MyBatis-Plus多表聯(lián)查的實(shí)現(xiàn)方法(動(dòng)態(tài)查詢和靜態(tài)查詢)
- mybatis-plus多表關(guān)聯(lián)查詢功能的實(shí)現(xiàn)
- springboot整合mybatis-plus實(shí)現(xiàn)多表分頁查詢的示例代碼
- MyBatis-Plus多表聯(lián)合查詢并且分頁(3表聯(lián)合)
- 結(jié)合mybatis-plus實(shí)現(xiàn)簡單不需要寫sql的多表查詢
- mybatis-plus多表查詢操作方法
相關(guān)文章
MyBatis中insert操作返回主鍵的實(shí)現(xiàn)方法
在使用MyBatis做持久層時(shí),insert語句默認(rèn)是不返回記錄的主鍵值,而是返回插入的記錄條數(shù)。這篇文章主要介紹了MyBatis中insert操作返回主鍵的方法,需要的朋友可以參考下2016-09-09
IDEA2021.2配置docker如何將springboot項(xiàng)目打成鏡像一鍵發(fā)布部署
這篇文章主要介紹了IDEA2021.2配置docker如何將springboot項(xiàng)目打成鏡像一鍵發(fā)布部署,本文圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
SpringBoot中使用spring-retry 解決失敗重試調(diào)用
本文主要介紹了SpringBoot中使用spring-retry 解決失敗重試調(diào)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
JAVA中ArrayList和數(shù)組的轉(zhuǎn)換與遇到的問題解決
做研發(fā)的朋友都知道,在項(xiàng)目開發(fā)中經(jīng)常會(huì)碰到ArrayList與數(shù)組類型之間的相互轉(zhuǎn)換,這篇文章主要給大家介紹了關(guān)于JAVA中ArrayList和數(shù)組的轉(zhuǎn)換與遇到的問題解決,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Java視頻斷點(diǎn)上傳的實(shí)現(xiàn)示例
斷點(diǎn)續(xù)傳指的是在下載或上傳時(shí),將下載或上傳任務(wù)人為的劃分為幾個(gè)部分,本文主要介紹了Java視頻斷點(diǎn)上傳的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05
java結(jié)合keytool如何實(shí)現(xiàn)非對稱加密與解密詳解
這篇文章主要給大家介紹了關(guān)于java結(jié)合keytool如何實(shí)現(xiàn)非對稱加密與解密的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08

