mysql plus多表关联_结合mybatis-plus 实现实体操作多表关联查询
这里将告诉您结合mybatis-plus 实现实体操作多表关联查询,教程操作方法:
multipleselect
java mybatis 实现简单多表查询
简介
实现简单的实体类操作多表, 首先你的项目是使用了mybatis-plus 才可以使用。
通过解析实体,调用通用的XML来实现多表查询, 提供一个设计多表查询的思路,复杂的Sql嵌套等目前并不支持
目前只支持:
left join方式,(能关联的两张表的实体中关联字段名称必须一样,数据库字段可以不一样可以通@TableField注解来解决
where 基本查询条件等
分页 查询
order 排序
可以用来三两句搞定一些简单关联查询业务,解决不需要写的代码
设计说明
如何关联表?
找第一张表注解为 TableId (mybatis-plus 注解)的属性名, 到每二张表找同样的属性名, 如果没找到,反过来找,如果还没找到,挨个属性找。以此类推,实现关联的前提条件是 主从表的实体关联列名必须是一样的
// user 表
@TableId
private Integer userId
// address 表
@TableId
private Integer addressId
private Integer userId
//那么自动条件为 user.user_id = address.user_id
//或者是
@TableId(value="id")
private Integer userId
// address 表
@TableId(value="id")
private Integer addressId
@TableField(value="test_user_id")
private Integer userId
//目前只有left join
//那么自动条件为 user.id = address.test_user_id
使用说明
将 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
//字段中有@TableField(exist=false)注解也是被跳过的
//下面是要订单表的所有信息 和用户的姓名与号码 和地址
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 条件
/*
可以关联的必要条件
Orders:
@TableId //或者数据库字段为其它@TableId(value="id")
private Long ordersId;
private Long userId;
...
User:
@TableId
private Long userId;
...
Address:
@TableId
private Long addressId;
private Long userId;
...
*/
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.where("${0}")
.eq("componyId", 1)
.division()
.like("userName", "abcd")
.or()
.like("userPhone", "abcd");
// 部分sql: compony_id = 1 and (user_name = 'abcd' or user_phone = 'abcd')
排序
//MultipleSelect.setOrderBy(...columns)
MultipleSelect.setOrderBy("${0}.createTime", "${1}.ordersName desc", "${2}.userId asc", ...)
分页
//MultipleSelect.setPage(pageNo, pageSize);
MultipleSelect.setPage(1, 15); //第一页 每页 15条
multipleService.mulSelect返回结果
//MultipleResult
/*原型
private List> 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");
结合mybatis-plus 实现实体操作多表关联查询就为您介绍到这里,感谢您关注懒咪学编程c.lanmit.com.
本文地址:https://c.lanmit.com/shujuku/qita/13784.html
mysql plus多表关联_结合mybatis-plus 实现实体操作多表关联查询相关推荐
- hibernate 读取mysql表结构_为什么要用hibernate 与基于数据库表结构的项目开发
最近开始学习hibernate,其实并不知道要学习什么,有什么用.后来问了一下同事,他就说快捷方便简单,很多事情不用自己做他会帮你做好,但是我觉得不应该是这样的, 于是我就去搜了一下,就搜到了一篇帖子 ...
- mysql码表是什么意思_什么是码表,什么是维度表?
整理业务库的库表字段和字段含义的时候,遇到了码表的概念,码表是什么,和维度表又是什么关系呢? 首先,码表没有明确的定义. 百度搜索码表,可以看到和数据处理相关的解释是:码表是 编码表(或代码表)的简称 ...
- Mysql库及表的基本概念、增删查改操作以及表的约束、多表联查
什么是数据库? 存储数据的仓库 数据库的存储介质:磁盘和内存. 为什么要用数据库不用文件?(数据库与文件进行数据存储的区别) 1.文件存储安全性低 2.数据库对数据进行良好的存储,查询以及管理 3.便 ...
- 所有表单对象_【第十课】常见的表单
前言 从零开始学前端系列课程,与传统的视频大课堂教学不同,没有填鸭:也普通做练习题的方式不同,没有假想的模拟题. 本课程拆出80个左右必须掌握的技能点,并对其分组,从易到难地列出学习曲线.同时从真实项 ...
- mysql数据库访问300ms以上_[Java教程]一张900w的数据表,16s执行的SQL优化到300ms?...
[Java教程]一张900w的数据表,16s执行的SQL优化到300ms? 0 2020-11-20 16:00:16 一,前言 证实 有一张财务流水表,未分库分表,目前的数据量为9555695,分页 ...
- jpi多表联查_使用mybatis进行多表联查
一.使用mybatis的基本步骤 1.导入jar包 2.配置文件 3.使用配置文件完成操作 二.实战演习 需求:教师表里有教师id和教师姓名 学生表里有学生id,姓名,年龄,教师id 一个教师有多个学 ...
- jpi多表联查_使用Mybatis进行多表联查操作
(1)增加一个测试数据库shop_order,sql语句如下: CREATE DATABASE`shop_order`;USE`shop_order`;CREATE TABLE`t_user` ( ` ...
- mysql个和会计有什么关联_中级会计和初级会计科目之间有什么关联?
中级会计师一共考三门,分别是<中级会计实务>.<财务管理>.<经济法>.需在连续的两年内通过全部考试方可获得证书.知乎视频www.zhihu.com 初级会计一共 ...
- main方法 如何去掉http debug日志_在MyBatis中如何使用collection标签实现嵌套查询?...
# 需求升级 在上篇博客<一对多的关系,在MyBatis中如何映射?>中,我们实现了需求:根据用户id查询用户信息的同时获取用户拥有的角色. 因为角色可以拥有多个权限,所以本篇博客我们升级 ...
最新文章
- 统计数列中是连续数的个数
- Android10.0 ContentProvider原理分析
- hdu4772 水模拟
- inter Course Certificate
- 将自己写的windows服务加入到windows集群中
- APACHE服务器出现No input file specified.解决方案
- Linux三剑客正则表达式常用字符汇总
- vue-cli3创建项目时报错
- 散射回波仿真Matlab,基于matlab的体目标回波模拟方法与流程
- php视频教程打包下载 - 网络上最好的php视频教程
- 最全整理反面角色谁更适合饰演老大角色,你认识多少?(已收藏)
- Datawhale组队学习周报(第031周)
- DTM测试里无线Modem应该选哪种MCU?
- (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
- 攻防世界-CRYPTO新手区
- 罗技G502 HERO 主要的DPI灯光突然不亮了
- 计算机网络第五弹——运输层
- 《西邮XUPT-ACM学子的文字》
- C# 创建XML文件
- ryu与mininet的连接