/*
* Copyright (c) 2011-2022, baomidou (jobob@qq.com).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baomidou.mybatisplus.advance.injector;
import com.baomidou.mybatisplus.core.conditions.AbstractJoinWrapper;
import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.toolkit.*;
import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.conditions.query.BasicJoinQueryWrapper;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.SqlSessionUtils;
import java.lang.invoke.CallSite;
import java.lang.invoke.LambdaMetafactory;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 通过此类去给wrapper添加参数和执行sql返回结果
*
* @author wanglei
* @since 2022-03-14
*/
public class FuntionTools {
/**
* 可序列化
*/
private static final int FLAG_SERIALIZABLE = 1;
private static Map<String, SFunction> functionMap = new HashMap<>();
/**
* 把动作
*
* @param actions 动作
* @param operator 操作符 比如like
* @param po po对象
* @param property 属性名
* @param value 值
*/
public static void addAction(List<Action> actions, String operator, Object po, String property, Object value) {
actions.add(new Action(po.getClass(), property, operator, value, null, null, null));
}
/**
* 添加动作
*
* @param actions actions
* @param operator 操作符 比如like
* @param po po对象
* @param property 属性名
* @param minValue 最小值
* @param maxValue 最大值
*/
public static void addAction(List<Action> actions, String operator, Object po, String property, Object minValue, Object maxValue) {
actions.add(new Action(po.getClass(), property, operator, null, minValue, maxValue, null));
}
/**
* 构造一个查询条件 - 单表查询
*
* @param actions 动作集合
* @param po po
* @return QueryWrapper
*/
public static LambdaQueryWrapper buildQueryWrapper(List<Action> actions, Object po) {
LambdaQueryWrapper<?> queryWrapper = new LambdaQueryWrapper();
for (Action action : actions) {
// 普通的查询只保留他自己的where条件和select,就算他调用了join也忽略掉
if (action.getModelClass().equals(po.getClass()) && !"select".equals(action.getAction())) {
SFunction column = getSFunction(action.getModelClass(), action.getProperty());
buildWhere(queryWrapper, action, column);
} else if ("select".equals(action.getAction()) && action.getModelClass().equals(po.getClass())) {
SFunction[] columns = new SFunction[action.getProperties().length];
int i = 0;
for (String property : action.getProperties()) {
columns[i++] = getSFunction(action.getModelClass(), property);
}
queryWrapper.select(columns);
}
}
return queryWrapper;
}
/**
* 构造where条件
*
* @param queryWrapper wapper
* @param action 动作
* @param column 列名
*/
public static void buildWhere(AbstractWrapper queryWrapper, Action action, Object column) {
switch (action.getAction()) {
case OperatorConstant.EQ:
queryWrapper.eq(column, action.getValue());
break;
case OperatorConstant.LT:
queryWrapper.lt(column, action.getValue());
break;
case OperatorConstant.GT:
queryWrapper.gt(column, action.getValue());
break;
case OperatorConstant.LE:
queryWrapper.le(column, action.getValue());
break;
case OperatorConstant.GE:
queryWrapper.ge(column, action.getValue());
break;
case OperatorConstant.NE:
queryWrapper.ne(column, action.getValue());
break;
case OperatorConstant.LIKE:
queryWrapper.like(column, action.getValue());
break;
case OperatorConstant.LIKE_LEFT:
queryWrapper.likeLeft(column, action.getValue());
break;
case OperatorConstant.LIKE_RIGHT:
queryWrapper.likeRight(column, action.getValue());
break;
case OperatorConstant.NOT_LIKE:
queryWrapper.notLike(column, action.getValue());
break;
case OperatorConstant.IS_NULL:
queryWrapper.isNull(column);
break;
case OperatorConstant.NOT_NULL:
queryWrapper.isNotNull(column);
break;
case OperatorConstant.IN:
queryWrapper.in(column, (Collection) (action.getValue()));
break;
case OperatorConstant.NOT_IN:
queryWrapper.notIn(column, (Collection) (action.getValue()));
break;
case OperatorConstant.ORDER_BY_ASC:
queryWrapper.orderByAsc(column);
break;
case OperatorConstant.ORDER_BY_DESC:
queryWrapper.orderByDesc(column);
break;
case OperatorConstant.BETWEEN:
queryWrapper.between(column, action.getMin(), action.getMax());
break;
case OperatorConstant.NOT_BETWEEN:
queryWrapper.notBetween(column, action.getMin(), action.getMax());
break;
}
}
/**
* 构造一个查询条件 - 多表查询
*
* @param actions 动作集合
* @param po po
* @return
*/
public static BasicJoinQueryWrapper buildJoinWrapper(List<Action> actions, Object po) {
BasicJoinQueryWrapper queryWrapper = new BasicJoinQueryWrapper(po.getClass());
// 先搞定join,不然添加条件和select会报错
for (Action action : actions) {
if (action.getAction().contains(OperatorConstant.JOIN)) {
switch (action.getAction()) {
case OperatorConstant.JOIN:
queryWrapper.innerJoin(action.getModelClass());
break;
case OperatorConstant.LEFT_JOIN:
queryWrapper.leftJoin(action.getModelClass());
break;
}
}
}
for (Action action : actions) {
// 不是select和join动作的话,就是where条件
if (!OperatorConstant.SELECT.equals(action.getAction()) && !action.getAction().contains(OperatorConstant.JOIN)) {
BasicJoinQueryWrapper.ModelProperty column = new BasicJoinQueryWrapper.ModelProperty(action.getModelClass(), action.getProperty());
没有合适的资源?快使用搜索试试~ 我知道了~
mybatis-plus-advance插件
共24个文件
java:21个
xml:1个
jar:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 113 浏览量
2024-04-10
10:22:02
上传
评论
收藏 112KB ZIP 举报
温馨提示
本插件需要配合mybatis_plus_advance_idea_plugin 插件 一起使用
资源推荐
资源详情
资源评论
收起资源包目录
mybatis-plus-advance-master.zip (24个子文件)
mybatis-plus-advance-master
pom.xml 10KB
src
main
java
com
baomidou
mybatisplus
advance
injector
OperatorConstant.java 847B
processor
GenQueryMethodProcessor.java 9KB
GenFieldsConstantProcessor.java 2KB
MybatisPlusModelInjectorAnnotationProcessor.java 5KB
GenImplModelExtensionMethodProcessor.java 1KB
MybatisPlusAPTProcessor.java 966B
GenOperatorMethodProcessor.java 13KB
GenMapperProcessor.java 3KB
GenFieldsMethodProcessor.java 4KB
ASTBuilder.java 11KB
FuntionTools.java 18KB
ModelExtension.java 2KB
query
QueryFilter.java 16KB
QueryField.java 2KB
anno
SafeField.java 286B
DefaultPager.java 3KB
FieldSort.java 2KB
enums
DirectionEnum.java 2KB
RelationEnum.java 787B
OperatorEnum.java 2KB
package-info.java 742B
plugin
mybatis_plus_advance_ext-1.0.0.jar 81KB
.gitignore 15B
共 24 条
- 1
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6742
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- SW3518S全协议快充USB Type-c接口电源模块硬件参考设计评估版硬件(原理图 +pcb)+封装库文件.zip
- 基于深度强化学习算法实现多星对区域目标观测的规划python源码+数据集+模型+超详细注释.zip
- RT1052+SDRAM(IS42S16160) +SIM7600CE(PCIE接口封装)控制板硬件(原理图+PCB)+封装库
- 2017大学英语四级词汇-excel-列表版(精品文档).xls
- 2017版国家医保药品目录(excel版)完整版.xls
- 基于STM32F103单片机设计的无刷电机控制板硬件(原理图+PCB+BOM)+MCU软件控制源码+文档资料.zip
- 肺结节检测数据集VOC+YOLO格式1186张1类别.zip
- Faster-RCNN基于知识蒸馏的目标检测模型增量深度学习方法python源码+项目运行说明.zip
- 2018年考勤表——excel版.xls
- 基于Labview的转子动平衡测控系统源码+系统软件说明书.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功