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

 更新时间:2019年09月09日 09:34:59   作者:杨一一  
这篇文章主要给大家介绍了关于结合mybatis-plus实现简单不需要写sql的多表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mybatis-plus具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

项目地址: GITHUB (本地下载

java mybatis 多表查询

简介

实现简单的实体类操作多表,  首先你的项目是使用了mybatis-plus 才可以使用

设计说明

  • 如何关联表?

找第一张表注解为 TableId (mybatis-plus 注解)的属性名, 到每二张表找同样的属性名, 如果没找到,反过来找,如果还没找到,挨个属性找。以此类推,实现关联的前提条件是 主从表的关联例名必须一样

// user 表
@TableId
private Integer userId
// address 表
@TableId
private Integer addressId
private Integer userId

使用说明

com.freedomen.multipselect 包放到你的项目中,使 com.freedomen.multipselect.mapper里的xml 要被扫描到,或手动配置, com.freedomen.multipselect.service也要被发现

//引入service
@Autowired
private MultipleService multipleService;
//表关联, 关联用户表和地址表,查找 用户表的所有字段和地址表的所有字段
MultipleSelect multipleSelect = MultipleSelect.newInstance("${1}", new User(), new Address());

multipleSelect
 .where("${0}")
 .like("userName", "张三");

multipleService.mulSelect(multipleSelect);
 

查找字段

//MultipleSelect.newInstance 的第一个参数是所要查找的字段
//${0} 或 ${user} 表是第一张表的所有字段 ${0}.userName或${user}.userName表示userName字段, 默认第一张表的字段全部都返回的。 ${}中间的参数可以是后面实体的下标,也可以是表名 如user、user_address

//下面是要订单表的所有信息 和用户的姓名与号码 和地址
MultipleSelect.newInstance("${1}.userName,${1}.userPhone,${2}", new Orders(), new User(), new Address());

查找条件

  • eq: =
  • notEq: !=
  • like: LIKE (前置已经加了 '%')
  • between: between
  • and: 改变连接方式为 AND练级(默认)
  • or: 改变 连接方式为 OR
  • division:括号
  • in: IN
  • notIn: NOT IN
  • notLike: NOT LIKE
  • ...等等
//实例好 查找实体后可以操作实体
//注意: 如何实体内属性有值 将会以 eq方式and连接做为where 条件
MultipleSelect multipleSelect = MultipleSelect.newInstance("${1}.userName,${1}.userPhone,${2}", new Orders(), new User(), new Address());

multipleSelect
 .where("${0}") //哪张表
 .eq("ordersId", 1) //并且 订单id = 1
 .like("ordersName", "cmcc") //并且 订单名称 like ''%cmcc'
 .or() //改变后续操作关系为 OR, 默认为AND
 .notEq("orderSno", "123"); //或者 orderSno 不等于 '123'
 
multipleSelect
 .where("${1}") //哪张表接着用户表 默认and连接 可以 .or()改为 OR
 .in("userId", [1, 2, 3]); // 并且userId in [1, 2, 3]
 
multipleSelect
 .where("${2}")
 .or()
 .like("adressDetails", "江苏"); //或者 地址 like '江苏'

multipleService.mulSelect(multipleSelect); //查询

排序

//MultipleSelect.setOrderBy(...columns)
MultipleSelect.setOrderBy("${1}.ordersName desc", "${2}.userId asc", ...)

分页

//MultipleSelect.setPage(pageNo, pageSize);
MultipleSelect.setPage(1, 15); //第一页 每页 15条

multipleService.mulSelect返回结果

//MultipleResult
/* 原型
 private List<Map<String, Object>> data; //结果数据
 private Integer pageNo;  //如果设置了分页 会有
 private Integer pageSize;  //如果设置了分页 会有
 private Integer total;  //如果设置了分页 会有
*/

逻辑删除

//默认是读取 mybatis-plus 的 TableLogic 注解 0 未删除,
//如果不是用 0 表示未删除, 可以修改 MultipleSelect 的 setCustomWhere 方法中的下面这段中的 0 
 
if (logic != null)
 sb.append(" AND ")
 .append(te.getNickName())
 .append(".")
 .append(logic)
 .append(" = ")
 .append("0");

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • 深入同步访问共享的可变数据分析

    深入同步访问共享的可变数据分析

    本篇文章是对同步访问共享的可变数据进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Java对中文进行排序的实现示例

    Java对中文进行排序的实现示例

    工作中,我们经常会遇到需要进行各种排序的需求,本文主要介绍了Java对中文进行排序的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Java8加java10等于Java18的版本查看及特性详解

    Java8加java10等于Java18的版本查看及特性详解

    这篇文章主要为大家介绍了Java 8加java10等于Java18的各个版本要点详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Java内省之Introspector解读

    Java内省之Introspector解读

    这篇文章主要介绍了Java内省之Introspector解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • MyBatis详细执行流程的全纪录

    MyBatis详细执行流程的全纪录

    这篇文章主要给大家介绍了关于MyBatis详细执行流程的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java实现日志文件监听并读取相关数据的方法实践

    Java实现日志文件监听并读取相关数据的方法实践

    本文主要介绍了Java实现日志文件监听并读取相关数据的方法实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • MinIO学习指南看这一篇就够了

    MinIO学习指南看这一篇就够了

    本文介绍了对象存储、服务器磁盘和分布式文件系统的基本概念和区别,重点讲解了MinIO的安装、配置和基本操作,以及如何在SpringBoot项目中集成MinIO,感兴趣的朋友一起看看吧
    2025-02-02
  • 模拟Mybatis的实现方法

    模拟Mybatis的实现方法

    本文通过实例代码给大家分享了模拟Mybatis的实现方法,需要的朋友参考下吧
    2017-09-09
  • Java 18 新特性之Web服务器 jwebserver功能

    Java 18 新特性之Web服务器 jwebserver功能

    JEP 408: Simple Web Server,是这次Java 18推出的一个比较独立的全新功能点。我们可以通过命令行工具来启动一个提供静态资源访问的迷你Web服务器,本文通过一个构建HTML页面的例子,来尝试一下jwebserver的功能
    2022-04-04
  • 8种常见的接口请求重试方法总结

    8种常见的接口请求重试方法总结

    在跨境业务中,可能第三方的服务器分布在世界的各个角落,所以请求三方接口的时候,难免会遇到一些网络问题,这时候需要加入重试机制了,下面小编就给大家分享几个接口重试的写法吧
    2023-11-11

最新评论