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

 更新时间:2020年09月27日 09:30:00   作者:tod你好  
这篇文章主要介绍了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来进行了。

到此这篇关于springboot + mybatis-plus实现多表联合查询功能(注解方式)的文章就介绍到这了,更多相关Mybatis-plus 多表联合查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis中insert操作返回主键的实现方法

    MyBatis中insert操作返回主键的实现方法

    在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数。这篇文章主要介绍了MyBatis中insert操作返回主键的方法,需要的朋友可以参考下
    2016-09-09
  • Java非侵入式API接口文档工具apigcc用法详解

    Java非侵入式API接口文档工具apigcc用法详解

    这篇文章主要介绍了Java非侵入式API接口文档工具apigcc用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署

    IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署

    这篇文章主要介绍了IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署,本文图文实例相结合给大家介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • Shiro安全框架的主要组件及认证过程简介

    Shiro安全框架的主要组件及认证过程简介

    这篇文章主要介绍了Shiro安全框架的主要组件及认证过程简介,Shiro 是一个强大灵活的开源安全框架,可以完全处理身份验证、授权、加密和会话管理,本文就来介绍一下此框架的核心组成,需要的朋友可以参考下
    2023-08-08
  • SpringBoot中使用spring-retry 解决失败重试调用

    SpringBoot中使用spring-retry 解决失败重试调用

    本文主要介绍了SpringBoot中使用spring-retry 解决失败重试调用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • lombok中@Data使用常见的小坑及解决

    lombok中@Data使用常见的小坑及解决

    在Java中使用Lombok库的@Data注解时,布尔类型属性可能导致生成的get方法不符合预期,对于非is开头的布尔属性,Lombok生成的方法会添加is前缀,导致原本期待的get方法不存在,例如,对于属性private boolean active,Lombok会生成方法名为isActive而不是getActive
    2024-10-10
  • java实现简单的小超市程序

    java实现简单的小超市程序

    这篇文章主要为大家详细介绍了java实现简单的小超市程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • JAVA中ArrayList和数组的转换与遇到的问题解决

    JAVA中ArrayList和数组的转换与遇到的问题解决

    做研发的朋友都知道,在项目开发中经常会碰到ArrayList与数组类型之间的相互转换,这篇文章主要给大家介绍了关于JAVA中ArrayList和数组的转换与遇到的问题解决,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Java视频断点上传的实现示例

    Java视频断点上传的实现示例

    断点续传指的是在下载或上传时,将下载或上传任务人为的划分为几个部分,本文主要介绍了Java视频断点上传的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • java结合keytool如何实现非对称加密与解密详解

    java结合keytool如何实现非对称加密与解密详解

    这篇文章主要给大家介绍了关于java结合keytool如何实现非对称加密与解密的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友下面随着小编来一起学习学习吧
    2018-08-08

最新评论