结合mybatis-plus 实现个简单的不需要写sql 的多表查询
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方式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");
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ASP.NET Core on K8S深入学习(9)Secret & Configmap
一、Secret 1.1 关于Secret 在应用启动过程中需要一些敏感信息,比如数据库用户名、密码,如果直接明文存储在容器镜像中是不安全的,K8S提供的方案是Secret。 Secret 会以密文的方式存储数据,避免了直接在配置文件中保存敏感信息。 Secret 会以 Volume 的形式被 mount 到 Pod,容器可通过文件的方式使用 Secret 中的敏感数据,也可以使用环境变量的方式使用。 1.2 创建与查看Secret 这里假设我们要创建一个包含以下信息的Secret: (1)用户名:Edison (2)密码:EDC123456* 有4种方法来创建Secret: (1)通过 --from-literal: kubectl create secret generic mysecret --from-literal=username=Edison --from-literal=password=EDC123456* PS:每个--from-literal对应一个信息条目 (2)通过 --from-file: echo -n Edison > ./username e...
- 下一篇
【五分钟了解MongoDB】Change Stream 和MongoDB 4.x
充分获知数据库的数据变动是从MongoDB向其他数据服务进行数据同步的关键点。与直接查询collection来获取数据变动相比,通过流式的方式进行监听会有效并及时的多。这是一种非常强大的“响应式编程”模式。随着MongoDB的版本更新,流式的获取方式将变得原来越易用。 让我们来一同回顾一下。在MongoDB3.6之前,如果我们希望对MongoDB数据库中的数据变动进行监听,我们通常是通过 “监听并回放oplog”(“tail the oplog”)的模式(oplog表将会记录复制集中的数据变动)。在生产环境中这种方式(“监听并回放oplog”)通常较为复杂,并且难以保证其稳定与可靠性。 Change Streams and Collections 从MongoDB3.6开始支持的 Change Streams打破了这个僵局。 Change Streams使得数据的变动监听变得简单易用。以下是一个示例,该示例演示了通过Node.js对“movieDetails”表的变动监听。 javascriptconst MongoClient = require("mongodb").MongoCl...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题