这里将告诉您结合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 实现实体操作多表关联查询相关推荐

  1. hibernate 读取mysql表结构_为什么要用hibernate 与基于数据库表结构的项目开发

    最近开始学习hibernate,其实并不知道要学习什么,有什么用.后来问了一下同事,他就说快捷方便简单,很多事情不用自己做他会帮你做好,但是我觉得不应该是这样的, 于是我就去搜了一下,就搜到了一篇帖子 ...

  2. mysql码表是什么意思_什么是码表,什么是维度表?

    整理业务库的库表字段和字段含义的时候,遇到了码表的概念,码表是什么,和维度表又是什么关系呢? 首先,码表没有明确的定义. 百度搜索码表,可以看到和数据处理相关的解释是:码表是 编码表(或代码表)的简称 ...

  3. Mysql库及表的基本概念、增删查改操作以及表的约束、多表联查

    什么是数据库? 存储数据的仓库 数据库的存储介质:磁盘和内存. 为什么要用数据库不用文件?(数据库与文件进行数据存储的区别) 1.文件存储安全性低 2.数据库对数据进行良好的存储,查询以及管理 3.便 ...

  4. 所有表单对象_【第十课】常见的表单

    前言 从零开始学前端系列课程,与传统的视频大课堂教学不同,没有填鸭:也普通做练习题的方式不同,没有假想的模拟题. 本课程拆出80个左右必须掌握的技能点,并对其分组,从易到难地列出学习曲线.同时从真实项 ...

  5. mysql数据库访问300ms以上_[Java教程]一张900w的数据表,16s执行的SQL优化到300ms?...

    [Java教程]一张900w的数据表,16s执行的SQL优化到300ms? 0 2020-11-20 16:00:16 一,前言 证实 有一张财务流水表,未分库分表,目前的数据量为9555695,分页 ...

  6. jpi多表联查_使用mybatis进行多表联查

    一.使用mybatis的基本步骤 1.导入jar包 2.配置文件 3.使用配置文件完成操作 二.实战演习 需求:教师表里有教师id和教师姓名 学生表里有学生id,姓名,年龄,教师id 一个教师有多个学 ...

  7. jpi多表联查_使用Mybatis进行多表联查操作

    (1)增加一个测试数据库shop_order,sql语句如下: CREATE DATABASE`shop_order`;USE`shop_order`;CREATE TABLE`t_user` ( ` ...

  8. mysql个和会计有什么关联_中级会计和初级会计科目之间有什么关联?

    中级会计师一共考三门,分别是<中级会计实务>.<财务管理>.<经济法>.需在连续的两年内通过全部考试方可获得证书.知乎视频​www.zhihu.com 初级会计一共 ...

  9. main方法 如何去掉http debug日志_在MyBatis中如何使用collection标签实现嵌套查询?...

    # 需求升级 在上篇博客<一对多的关系,在MyBatis中如何映射?>中,我们实现了需求:根据用户id查询用户信息的同时获取用户拥有的角色. 因为角色可以拥有多个权限,所以本篇博客我们升级 ...

最新文章

  1. 统计数列中是连续数的个数
  2. Android10.0 ContentProvider原理分析
  3. hdu4772 水模拟
  4. inter Course Certificate
  5. 将自己写的windows服务加入到windows集群中
  6. APACHE服务器出现No input file specified.解决方案
  7. Linux三剑客正则表达式常用字符汇总
  8. vue-cli3创建项目时报错
  9. 散射回波仿真Matlab,基于matlab的体目标回波模拟方法与流程
  10. php视频教程打包下载 - 网络上最好的php视频教程
  11. 最全整理反面角色谁更适合饰演老大角色,你认识多少?(已收藏)
  12. Datawhale组队学习周报(第031周)
  13. DTM测试里无线Modem应该选哪种MCU?
  14. (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  15. 攻防世界-CRYPTO新手区
  16. 罗技G502 HERO 主要的DPI灯光突然不亮了
  17. 计算机网络第五弹——运输层
  18. 《西邮XUPT-ACM学子的文字》
  19. C# 创建XML文件
  20. ryu与mininet的连接

热门文章

  1. 地震学儒略日转化成常规日期(python函数)
  2. 请问java如何跟isapi通讯,代码怎么实现?
  3. <第2.5个月>新店日记,shopee要投入多少钱?利润怎么样能赚钱吗好做吗?shopee孵化期考核
  4. ​Spring Cloud中统一异常处理是怎么做的?
  5. 【如何拍出一条好的vlog】素材篇
  6. 易语言调用子程序_ c,易语言汇编调用子程序源码
  7. 网站漏洞整改报告公司之攻防方案
  8. 解读 Oracle 12c 自适应执行计划一例
  9. 服务器固态硬盘连接,技术支招:服务器中固态硬盘如何选?
  10. proteus仿真arduino控制舵机