结合mybatis-plus实现简单不需要写sql的多表查询
项目地址:GITHUB (本地下载)
javamybatis多表查询
简介
实现简单的实体类操作多表, 首先你的项目是使用了mybatis-plus才可以使用
设计说明
- 如何关联表?
找第一张表注解为TableId(mybatis-plus注解)的属性名,到每二张表找同样的属性名,如果没找到,反过来找,如果还没找到,挨个属性找。以此类推,实现关联的前提条件是主从表的关联例名必须一样
//user表 @TableId privateIntegeruserId //address表 @TableId privateIntegeraddressId privateIntegeruserId
使用说明
将com.freedomen.multipselect包放到你的项目中,使com.freedomen.multipselect.mapper里的xml要被扫描到,或手动配置,com.freedomen.multipselect.service也要被发现
//引入service
@Autowired
privateMultipleServicemultipleService;
//表关联,关联用户表和地址表,查找用户表的所有字段和地址表的所有字段
MultipleSelectmultipleSelect=MultipleSelect.newInstance("${1}",newUser(),newAddress());
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}",newOrders(),newUser(),newAddress());
查找条件
- eq:=
- notEq:!=
- like:LIKE(前置已经加了'%')
- between:between
- and:改变连接方式为AND练级(默认)
- or:改变连接方式为OR
- division:括号
- in:IN
- notIn:NOTIN
- notLike:NOTLIKE
- ...等等
//实例好查找实体后可以操作实体
//注意:如何实体内属性有值将会以eq方式and连接做为where条件
MultipleSelectmultipleSelect=MultipleSelect.newInstance("${1}.userName,${1}.userPhone,${2}",newOrders(),newUser(),newAddress());
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]);//并且userIdin[1,2,3]
multipleSelect
.where("${2}")
.or()
.like("adressDetails","江苏");//或者地址like'江苏'
multipleService.mulSelect(multipleSelect);//查询
排序
//MultipleSelect.setOrderBy(...columns)
MultipleSelect.setOrderBy("${1}.ordersNamedesc","${2}.userIdasc",...)
分页
//MultipleSelect.setPage(pageNo,pageSize); MultipleSelect.setPage(1,15);//第一页每页15条
multipleService.mulSelect返回结果
//MultipleResult /*原型 privateList
逻辑删除
//默认是读取mybatis-plus的TableLogic注解0未删除,
//如果不是用0表示未删除,可以修改MultipleSelect的setCustomWhere方法中的下面这段中的0
if(logic!=null)
sb.append("AND")
.append(te.getNickName())
.append(".")
.append(logic)
.append("=")
.append("0");
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。