springboot + mybatis-plus实现多表联合查询功能(注解方式)

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

springboot + mybatis-plus实现多表联合查询功能(注解方式)

tod你好   2020-09-27 我要评论

本文着重讲解了springboot + mybatis-plus实现多表联合查询功能,是最简单的一种注解方式,本文为大家做详细介绍,希望能够帮助到您,欢迎大家阅读和收藏

第一步:加入mybatis-plus依赖

第二步:配置数据源

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

第三步:创建两张有关联关系的表(我的如下  )

            sys_user:用户表

          sys_role:权限表

 第四步:将两张表映射到实体类bean(其实sys_role建不建都无所谓,可以不建sys_role的实体类)

@Data
@TableName("sys_user") //当实体类名(前提是开启驼峰)与数据库表名一致时可不写
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;

********************不想建这个实体类就不建  没有意义 

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(注意看这个@Select里面的SQL)

第六步:定义一个通用实体类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数据源的依赖 读取数据库 Clob类型数据
    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){      //循环读取数据拼接到字符串
      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();
  }
 }

 第七步:接下来就是测试了

测试结果如下:

 

至此  到这里 我觉得这个东西就有点像Jfinal底层封装的Record类了,在多表联合查询的情况下,我们可以方便的使用mybatis-plus来进行了。

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们