结合mybatis-plus实现简单不需要写sql的多表查询
作者:杨一一 发布时间:2021-06-25 12:54:22
标签:mybatis-plus,sql,多表查询
项目地址: 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");
来源:https://segmentfault.com/a/1190000020310083
0
投稿
猜你喜欢
- Shiro是什么Shiro是一个Java平台的开源权限框架,用于认证和访问授权。具体来说,满足对如下元素的支持:用户,角色,权限(仅仅是操作
- IntelliJ IDEA中实现跟eclipse一样的outline方法,查看文件内所有已经声明的方法。mac的可以在key map 里搜索
- 实现原理: 长连接的维持,是要客户端程序,定时向服务端程序,发送一个
- 1. 什么是XGBoostXGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广
- 我们在学习接口的时候。能够在里面做一些方法的调用。不过今天所要讲的JDBC,虽然也是连接数据库的一种接口,不过与类接口有着很大的区别,大家要
- 1、线性表定义线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特
- 1.封装1.介绍封装是指把抽象出的属性和方法封装在一起,数据被保护在内部,程序的其他部分只能通过被授权的方法,才能对数据操作。2.封装的理解
- Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性、是否可以重排序等问题的无
- 引言之前介绍过Spring Boot Validation的使用及扩展本文在此基础上重点讲解下Spring Boot Validation如
- 一、背景Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE
- 在ibatis的xml文件里,我们去写sql语句,对应mapper类的方法,这些sql语句与控制台上没什么两样,但在有些功能上需要注意,如w
- 基于Java swing+MySQL实现学生信息管理系统:主要实现JDBC对学生信息进行增删改查,应付一般课设足矣,分享给大家。(由于篇幅原
- 概述:Flutter中常用的滑动布局 ScrollView 有 SingleChildScrollView、NestedScrollView
- 首先对于一个SpringBoot工程来说,最明显的标志的就是 @SpringBootApplication它标记了这是一个SpringBoo
- 在构建RESTful数据服务过程中,我们定义了controller、repositories,并用一些注解修饰它们,但是到现在为止我们还没执
- 目标效果: 点击动画按钮之后每张牌各自旋转 散开到屏幕上半部分的任意位置之后回到初始位置 比较像LOL男刀的技能动画 : )1: 创建卡牌对
- using System;using System.Data;using System.Data.OleDb;namespace ZFSof
- Bitmap (android.graphics.Bitmap)Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像
- 前言在介绍使用微信自定义分享前,我们来先了解一下什么是自定义分享?访问自定义微信外链地址页面,点击红色框位置进行分享给朋友或者朋友圈,具体操
- 本文实例为大家分享了Java实现简单酒店管理系统的具体代码,供大家参考,具体内容如下为某个酒店编写程序:酒店管理系统,模拟订房、退房和打印所