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 多表联合查询内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MyBatis-Plus 分页查询以及自定义sql分页的实现

    一.引言 分页查询每个人程序猿几乎都使用过,但是有部分同学不懂什么是物理分页和逻辑分页. 物理分页:相当于执行了limit分页语句,返回部分数据.物理分页只返回部分数据占用内存小,能够获取数据库最新的状态,实施性比较强,一般适用于数据量比较大,数据更新比较频繁的场景. 逻辑分页:一次性把全部的数据取出来,通过程序进行筛选数据.如果数据量大的情况下会消耗大量的内存,由于逻辑分页只需要读取数据库一次,不能获取数据库最新状态,实施性比较差,适用于数据量小,数据稳定的场合. 那么MP中的物理分页怎么实现

  • MyBatis-Plus 如何实现连表查询的示例代码

    在项目开发中,难免会遇到连表查询的操作. 项目中用的是 MyBatis-Plus,是新使用的框架.官方文档看这里. 我写过一篇通过单元测试来验证 MyBatis-Plus 的 CRUD 操作.点这里跳转 今天遇到连表查询的问题,特此记录一下. 遇到需要连表操作,想起 MyBatis 的操作连表查询,要是 MyBatis-Plus 也像 MyBatis 一样,就脑壳痛了.(MyBatis-Plus 是 MyBatis 的增强版) 脑壳痛归脑壳痛,先动手干. 首先 因为官方的内置接口方法都是针对单表

  • mybatis-plus QueryWrapper自定义查询条件的实现

    mybatis-plus框架功能很强大,把很多功能都集成了,比如自动生成代码结构,mybatis crud封装,分页,动态数据源等等,附上官网链接https://mp.baomidou.com/,github上有代码例子,国内小伙伴推荐码云https://gitee.com/baomidou/mybatis-plus.  但是,其中还是有些小坑,文档也没有涉及的很全面,碰到问题,百度或者发issue,能力强的还是直接看源码好,一切答案都在源码中. 版本推荐用3.1.0,3.1.1及以上版本有bu

  • MyBatis-Plus多表联合查询并且分页(3表联合)

    这3张表的关系是模型表Model  ===> 训练表Training ===>应用表Application(大概的逻辑是:选择应用,然后训练,然后成为模型) 首先我们先建立实体Model(我使用的data注解不需要get set  @TableField(exist = false) 注解下的属性 是相关联表的属性) package cn.com.befery.dataai.po; import java.util.Date; import org.springframework.boot.j

  • 结合mybatis-plus实现简单不需要写sql的多表查询

    项目地址: GITHUB (本地下载) java mybatis 多表查询 简介 实现简单的实体类操作多表,  首先你的项目是使用了mybatis-plus 才可以使用 设计说明 如何关联表? 找第一张表注解为 TableId (mybatis-plus 注解)的属性名, 到每二张表找同样的属性名, 如果没找到,反过来找,如果还没找到,挨个属性找.以此类推,实现关联的前提条件是 主从表的关联例名必须一样 // user 表 @TableId private Integer userId // a

  • 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&

  • MyBatis Plus 实现多表分页查询功能的示例代码

    在Mybatis Plus 中,虽然IService 接口帮我们定义了很多常用的方法,但这些都是 T 对象有用,如果涉及到 多表的查询,还是需要自定义Vo 对象和自己编写sql 语句,Mybatis Plus提供了一个Page 对象,查询是需要设置其中的 size 字段 和 current 字段的值 一.分页配置 可以直接使用selectPage这样的分页,但返回的数据确实是分页后的数据,但在控制台打印的SQL语句其实并没有真正的物理分页,而是通过缓存来获得全部数据中再进行的分页,这样对于大数据

  • java mybatis框架实现多表关系查询功能

    基于Maven框架的整体设计 -- 一多一的关系 思路:导入mybatis.mysql.Junit4.13依赖: 编写两个java实体类: 编写sqMapConfig.xml mybatis核心配置文件 编写dao层接口: 编写mapper 映射文件: 编写测试类. 1.导入相关依赖 <!--配置依赖--> <dependencies> <!--配置mybatis--> <dependency> <groupId>org.mybatis</

  • mybatis Plus 多表联合查询的实现示例

    本文主要介绍了mybatis Plus 多表联合查询,分享给大家,具体如下: //实体类package com.sk.skkill.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.io.Serializable; import java.util.D

  • MyBatis 多表联合查询及优化方法

    目录 背景 正文 关于优化 这篇文章我打算来简单的谈谈 mybatis 的多表联合查询.起初是觉得挺简单的,没必要拿出来写,毕竟 mybatis 这东西现在是个开发的都会用,而且网上的文章也是一搜罗一大堆,根本就用不着我来重复.但是吧,就我前几天在做一个多表联合查询的时候,竟然出了很多意想不到的问题,而且这些问题的出现,并不是对 mybatis 不了解,而是在用的过程中会或多或少的忽略一些东西,导致提示各种错误. 背景 老规矩,开始之前,还是要先说说这件事的背景.也就是最近几天,公司要做一个后台

  • MyBatis实现多表联合查询resultType的返回值

    目录 多表联合查询resultType的返回值 一般数据按参数类型返回 根据某字段查询 查询结果为多条记录,存放在list中返回 多表联合查询 解决方案 多表联查,返回结果嵌套list 多表联合查询resultType的返回值 一般数据按参数类型返回 <select id="queryCarIdList" resultType="long">         select id from t_car_car </select>   <s

  • springboot整合mybatis-plus实现多表分页查询的示例代码

    1.新建一个springboot工程 2.需要导入mybatis和mybatis-plus的依赖文件 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </dependency> <dependency> &l

  • ThinkPHP多表联合查询的常用方法

    ThinkPHP中关联查询(即多表联合查询)可以使用 table() 方法或和join方法,具体使用如下例所示: 1.原生查询示例: 复制代码 代码如下: $Model = new Model(); $sql = 'select a.id,a.title,b.content from think_test1 as a, think_test2 as b where a.id=b.id '.$map.' order by a.id '.$sort.' limit '.$p->firstRow.',

  • cakephp2.X多表联合查询join及使用分页查询的方法

    本文实例讲述了cakephp2.X多表联合查询join及使用分页查询的方法.分享给大家供大家参考,具体如下: 格式化参数: public function getconditions($data){ $this->loadModel("Cm.LoginHistory"); $conditions = array(); foreach ($data as $key=>$val){ if($key=='start_date'){ $conditions['LoginHistor

随机推荐