import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.springboot.bean.Student;
import com.springboot.mapper.StudentMapper;
import com.springboot.service.StudentService;
/**
* 多个wrapper对象的条件合并在一个quer里面
*
* @param withOr 多个条件的关联是否为or联系
* @param source 组合where条件之后的对象
* @param wrappers 要组合的多个queryWrapper对象
* @param <T> 泛型对象
*/
static <T> void joinWhereSegment(boolean withOr, QueryWrapper<T> source, QueryWrapper<T>... wrappers) {
for (QueryWrapper<T> wrapper : wrappers) { //注意,这里的or只是为了多一个括号,不是or操作
if (wrapper == null || wrapper.getExpression().getNormal() == null || wrapper.getExpression().getNormal().isEmpty())
continue;
if (withOr) {
source.or().nested(mq -> mq.or().getExpression().getNormal().addAll(wrapper.getExpression().getNormal()));
} else {
source.nested(mq -> mq.or().getExpression().getNormal().addAll(wrapper.getExpression().getNormal()));
}
}
}
static <T> QueryWrapper<T> joinGroupBySegment(QueryWrapper<T> source, QueryWrapper<T>... wrappers) {
for (QueryWrapper<T> wrapper : wrappers) {
if (wrapper == null || wrapper.getExpression().getGroupBy() == null || wrapper.getExpression().getGroupBy().isEmpty())
continue;
source.groupBy(wrapper.getExpression().getGroupBy().getSqlSegment().replaceAll("GROUP BY ","")) ;
}
return source;
}
public static void main(String[] args) {
QueryWrapper<Student> queryWrapper = new QueryWrapper<Student>();
queryWrapper.eq("sno", "123");
queryWrapper.eq("name", "xiaoMing");
queryWrapper.groupBy("name");
QueryWrapper<Student> source = new QueryWrapper<>();
source.eq("sno", "1234");
source.groupBy("name");
joinWhereSegment(true, source, queryWrapper);
joinGroupBySegment(source, queryWrapper);
System.out.println(source.getSqlSegment());
}
结果:
(sno = #{ew.paramNameValuePairs.MPGENVAL1} OR (sno = #{ew.paramNameValuePairs.MPGENVAL1} AND name = #{ew.paramNameValuePairs.MPGENVAL2})) GROUP BY name, name