专栏首页ElementUI结合mybatis-plus 实现无XML多表联查询
原创

结合mybatis-plus 实现无XML多表联查询

项目地址github

multipleselect

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: =
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");
​

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • React Native 最快捷的开发框架分享

    工具人
  • ElementUI二次封装单, 让后台开发更简单,解决代码复用低,新手易出错的烦恼

    本人接触后台,后台的前后分离,使用各种后台比较火热的比如iview, elementui, antd等后,

    工具人
  • 开发这样一个复杂的表单你需要用多久

    工具人
  • 基于MyBatis注解扩展,实现无需配置就可拥有增删改 顶

          如果项目本身基于SpringMVC+Mybatis构建,不需添加任何配置Mapper类只需继承

    用户2603479
  • 李开复对谈硅谷传奇:杨致远敦促AI交产品,马尔科夫说无人车3年没戏

    李根 发自 硅谷 量子位 报道 | 公众号 QbitAI AI仍旧是核心话题,但“光说没货”的现状要面临挑战了。 创新工场第三期兄弟会硅谷行第四日,李开复分别...

    量子位
  • Spring5.0源码深度解析之Spring基于注解启动流程分析

    下面来分析下,通过AnnotationConfigurationContext类图可知:

    须臾之余
  • 3分钟短文:Laravel Form,让你不再写 HTML 的好“库”

    作为后端工程师的你,是不是面对一堆JS,CSS感觉无比抓狂。如果能摆脱大量的冗余的HTML代码块,

    程序员小助手
  • 西湖论剑2019--一道MISC题目的解题思路

    第一次打西湖论剑,啥都不懂,被题目虐的很惨,一共就做出来两道题,但也算有收获。这里分享一下TTL那道misc题目的writeup,算是给自己点安慰吧。

    KevinBruce
  • SpringBoot嵌入式Tomcat的自动配置原理

    我们知道SpringBoot的自动装配的秘密在org.springframework.boot.autoconfigure包下的spring.factories...

    Java学习录
  • python操作数据库

    在stored Routines调用中开的一个缓冲区,用于存放SQL调用的结果集。(结果集是只读的)

    py3study

扫码关注云+社区

领取腾讯云代金券