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)方法(動態(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)文章
Spring使用Configuration注解管理bean的方式詳解
在Spring的世界里,Configuration注解就像是一位細(xì)心的園丁,它的主要職責(zé)是在這個(gè)繁花似錦的園子里,幫助我們聲明和管理各種各樣的bean,本文給大家介紹了在Spring中如何優(yōu)雅地管理你的bean,需要的朋友可以參考下2024-05-05SpringCloud搭建Eureka服務(wù)模塊的過程
Eureka在分布式系統(tǒng)中起到了連接各個(gè)微服務(wù)的紐帶作用,使得服務(wù)之間的交互變得更加靈活、可靠,本文將深入探討如何使用Spring?Cloud,逐步引導(dǎo)讀者完成Eureka服務(wù)模塊的搭建,感興趣的朋友跟隨小編一起看看吧2024-02-02Java基本類型包裝類概述與Integer類、Character類用法分析
這篇文章主要介紹了Java基本類型包裝類概述與Integer類、Character類用法,結(jié)合實(shí)例形式分析了java基本數(shù)據(jù)類型與字符串轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2019-03-03SpringBoot配置Spring?Security的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot配置Spring?Security的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10Java8與Scala中的Lambda表達(dá)式深入講解
這篇文章主要給大家介紹了關(guān)于Java8與Scala中Lambda表達(dá)式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11Java8 HashMap擴(kuò)容算法實(shí)例解析
這篇文章主要介紹了Java8 HashMap擴(kuò)容算法實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12MyBatisPlus自定義SQL的實(shí)現(xiàn)
MyBatisPlus提供了自定義SQL功能,允許開發(fā)者在Mapper接口中定義方法,并通過XML文件或注解編寫SQL語句,本文詳解了如何在MP中使用自定義SQL,感興趣的可以了解一下2024-09-09Java使用Collections.sort()排序的示例詳解
這篇文章主要介紹了Java使用Collections.sort()排序的示例詳解,Collections.sort(list, new PriceComparator());的第二個(gè)參數(shù)返回一個(gè)int型的值,就相當(dāng)于一個(gè)標(biāo)志,告訴sort方法按什么順序來對list進(jìn)行排序。對此感興趣的可以了解一下2020-07-07