结合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


猜你喜欢
- 前两天给同事做 code review,感觉自己对 Java 的 Generics 掌握得不够好,便拿出 《Effective Java》1
- 先执行以一个简单的示例:static void Main(string[] args) { &nb
- 本文实例为大家分享了java客户端登陆服务器用户名验证的具体实现代码,供大家参考,具体内容如下客户端通过键盘录入用户名,服务端对用户名进行验
- file: BluetoothEventLoop.java GB/GB2/GB3: 1. import android.os.PowerMa
- 在java中常常会遇到这样一个问题,在实际应用中,总会碰到对List排序并过滤重复的问题,如果List中放的只是简单的String类型过滤s
- 一、导入JAR包二、配置applicationContext.xml的spring核心配置三、 public static void mai
- 简单认识一下Startupnowinandroid项目作为目前google官方来演示MAD(现代Android开发技术)的示例项目,里面大量
- 复习了下数据结构,用Java的数组实现一下循环队列。队列的类//循环队列class CirQueue{ private int QueueS
- 本文实例为大家分享了Android实现跟随手指画圆的具体代码,供大家参考,具体内容如下首先自己定义一个View子类:package com.
- 文件移动是计算机资源管理常用的一个操作,这在操作系统中可以通过文件的剪切与复制或鼠标拖动来实现。但是在Java文件的编程实现中,大多是通过复
- 本文实例为大家分享了Java使用开源Rxtx实现串口通讯的具体代码,供大家参考,具体内容如下使用方法:windows平台:1、把rxtxPa
- 1 数据响应  数据响应一般分为两种:页面响应和数据响应,一般来说页面响应是用来开发一些单体项目(也就是
- 一、现象在服务器上通过curl命令调用一个Java服务的查询接口,半天没有任何响应。关于该服务的基本功能如下:1、该服务是一个后台刷新指示器
- 类是使用关键字 class 声明的,如下面的示例所示:访问修饰符 class 类名 { //类成员: // Methods, prope
- 前段时间,同事在代码中KW扫描的时候出现这样一条:上面出现这样的原因是在使用foreach对HashMap进行遍历时,同时进行put赋值操作
- 在做android图片加载的时候,由于手机屏幕受限,很多大图加载过来的时候,我们要求等比例缩放,比如按照固定的宽度,等比例缩放高度,使得图片
- 在了解Lambda表达式之前我们先来区分一下面向对象的思想和函数式编程思想的区别面向对象的思想:做一件事情,找一个能解决这个事情的对象,调用
- 一棵二叉查找树是按二叉树结构来组织的。这样的树可以用链表结构表示,其中每一个结点都是一个对象。结点中除了数据外,还包括域left,right
- 1、实现效果:项目的整体的日志打印级别为ERROR,但在某个包下或某个类想打印INFO级别的日志。2、配置:FILE是ERROR级别日志打印
- HTML是WEB的核心,互联网中你看到的所有页面都是HTML,不管它们是由JavaScript,JSP,PHP,ASP或者是别的什么WEB技