自定义查询 java_JAVA自定义查询策略
packagecom.qy.code.generator.query;importjava.util.ArrayList;importjava.util.List;importcom.qy.code.generator.constant.OperatorConstants;importcom.qy.code.generator.utils.CodeArrayUtils;/*** 描述:查询类
*@author七脉*/
public classQuery {/*** 当前页码*/
privateInteger pageNum;/*** 每页条数*/
privateInteger pageSize;/*** 查询包含并且 查询条件*/
private ListandList;/*** 查询包含或查询条件*/
private ListorList;/*** 查询包含分组查询条件*/
private ListgroupKeys;/*** 查询包含排序条件项*/
private Listsorts;/*** and条件结合 and(a=1 and b=2 or c=1)*/
private ListandMultiConditionList;/*** or条件结合 or(a=1 and b=2 or c=1)*/
private ListorMultiConditionList;/*** map集合里的and和or两个key值,用于区分( a=1 ..or或and.. c=1)*/
public static final String AND_CONDITIONS_KEY = "ands";public static final String OR_CONDITIONS_KEY = "ors";privateString[] selectColumns;privateString table;private ListjoinList;/*** 查询列 (表连接查询时,必填)
*@paramcolumns
*@return
*/
publicQuery select(String... selectColumns) {if(null!=selectColumns && selectColumns.length>0) {this.selectColumns =selectColumns;
}return this;
}/*** 查询表 (表连接查询时,必填)
*@paramcolumns
*@return
*/
publicQuery from(String table) {this.table =table;return this;
}/*** 查询列
*@paramcolumns
*@return
*/
publicQuery join(Join join) {if(null==joinList) {this.joinList = new ArrayList<>();
}if(null!=join) {this.joinList.add(join);
}return this;
}/*** 私有化构造器*/
publicQuery() {
}/*** 描述:静态构建对象方便方法连续调用
*@author七脉
*@return
*/
public staticQuery create(){return newQuery();
}/*** 等于操作
*@paramvalue
*@return
*/
publicQuery eq(String key, Object value){returnand(key, OperatorConstants.TYPE_EQ, value);
}/*** 不等于操作
*@paramvalue
*@return
*/
publicQuery neq(String key, Object value){returnand(key, OperatorConstants.TYPE_NEQ, value);
}/*** 大于操作
*@paramvalue
*@return
*/
publicQuery gt(String key, Object value){returnand(key, OperatorConstants.TYPE_GT, value);
}/*** 大于等于操作
*@paramvalue
*@return
*/
publicQuery ge(String key, Object value){returnand(key, OperatorConstants.TYPE_GE, value);
}/*** 小于操作
*@paramvalue
*@return
*/
publicQuery lt(String key, Object value){returnand(key, OperatorConstants.TYPE_LT, value);
}/*** 小于等于操作
*@paramvalue
*@return
*/
publicQuery le(String key, Object value){returnand(key, OperatorConstants.TYPE_LE, value);
}/*** 模糊查询操作
*@paramvalue
*@return
*/
publicQuery like(String key, Object value){returnand(key, OperatorConstants.TYPE_LIKE, value);
}/*** 左侧模糊查询操作
*@paramvalue
*@return
*/
publicQuery leftlike(String key, Object value){returnand(key, OperatorConstants.TYPE_LLIKE, value);
}/*** 右侧模糊查询操作
*@paramvalue
*@return
*/
publicQuery rightlike(String key, Object value){returnand(key, OperatorConstants.TYPE_RLIKE, value);
}/*** in()包含操作(之所以不用list,首先list反射去class泛型名字很慢,其次数组比集合要快)
*@paramarray 数组
*@return
*/
publicQuery in(String key, Object[] array){if(null==array || array.length==0){return this;
}returnand(key, OperatorConstants.TYPE_IN,array);
}/*** not in()不包含操作
*@paramarray 数组
*@return
*/
publicQuery notIn(String key, Object[] array) {if(null==array || array.length==0){return this;
}returnand(key, OperatorConstants.TYPE_NOT_IN,array);
}/*** 判空操作
*@return
*/
publicQuery isNull(String key){return and(key, OperatorConstants.TYPE_IS_NULL, null);
}/*** 判非空操作
*@return
*/
publicQuery isNotNull(String key){return and(key, OperatorConstants.TYPE_IS_NOT_NULL, null);
}/*** 判空字符串操作
*@return
*/
publicQuery isBlank(String key){return and(key, OperatorConstants.TYPE_EQ, "");
}/*** 判非空字符串操作
*@return
*/
publicQuery isNotBlank(String key){return and(key, OperatorConstants.TYPE_NEQ, "");
}/*** 描述:增加与条件
*@author七脉
*@paramkey
*@paramoperator
*@paramvalue
*@return
*/
publicQuery and(String key, String operator, Object value){
Condition condition= Condition.create(key, operator, value,true);returnand(condition);
}/*** 等于操作
*@paramvalue
*@return
*/
publicQuery orEq(String key, Object value){returnor(key, OperatorConstants.TYPE_EQ, value);
}/*** 不等于操作
*@paramvalue
*@return
*/
publicQuery orNeq(String key, Object value){returnor(key, OperatorConstants.TYPE_NEQ, value);
}/*** 大于操作
*@paramvalue
*@return
*/
publicQuery orGt(String key, Object value){returnor(key, OperatorConstants.TYPE_GT, value);
}/*** 大于等于操作
*@paramvalue
*@return
*/
publicQuery orGe(String key, Object value){returnor(key, OperatorConstants.TYPE_GE, value);
}/*** 小于操作
*@paramvalue
*@return
*/
publicQuery orLt(String key, Object value){returnor(key, OperatorConstants.TYPE_LT, value);
}/*** 小于等于操作
*@paramvalue
*@return
*/
publicQuery orLe(String key, Object value){returnor(key, OperatorConstants.TYPE_LE, value);
}/*** 模糊查询操作
*@paramvalue
*@return
*/
publicQuery orLike(String key, Object value){returnor(key, OperatorConstants.TYPE_LIKE, value);
}/*** 左侧模糊查询操作
*@paramvalue
*@return
*/
publicQuery orLeftlike(String key, Object value){returnor(key, OperatorConstants.TYPE_LLIKE, value);
}/*** 右侧模糊查询操作
*@paramvalue
*@return
*/
publicQuery orRightlike(String key, Object value){returnor(key, OperatorConstants.TYPE_RLIKE, value);
}/*** in()包含操作(之所以不用list,首先list反射去class泛型名字很慢,其次数组比集合要快)
*@paramarray 数组
*@return
*/
publicQuery orIn(String key, Object[] array){if(null==array || array.length==0){return this;
}returnor(key, OperatorConstants.TYPE_IN,array);
}/*** not in()不包含操作
*@paramarray 数组
*@return
*/
publicQuery orNotIn(String key, Object[] array) {if(null==array || array.length==0){return this;
}returnor(key, OperatorConstants.TYPE_NOT_IN,array);
}/*** 判空操作
*@return
*/
publicQuery orIsNull(String key){return or(key, OperatorConstants.TYPE_IS_NULL, null);
}/*** 判非空操作
*@return
*/
publicQuery orIsNotNull(String key){return or(key, OperatorConstants.TYPE_IS_NOT_NULL, null);
}/*** 判空字符串操作
*@return
*/
publicQuery orIsBlank(String key){return or(key, OperatorConstants.TYPE_EQ, "");
}/*** 判非空字符串操作
*@return
*/
publicQuery orIsNotBlank(String key){return or(key, OperatorConstants.TYPE_NEQ, "");
}/*** and(a=1 and b=2 or c=1)形式查询
*@paramcondition
*@return
*/
publicQuery and(MultiCondition multiCondition) {if(null!=multiCondition) {if(null == this.andMultiConditionList) {this.andMultiConditionList = new ArrayList<>();
}this.andMultiConditionList.add(multiCondition);
}return this;
}/*** and a=1 和 and(a=1 and b=2 or c=1)形式查询
*@paramcondition
*@return
*/
publicQuery and(Condition... condition) {if(CodeArrayUtils.isNotEmpty(condition)) {if(condition.length>1){if(null == this.andMultiConditionList) {this.andMultiConditionList = new ArrayList<>();
}
MultiCondition multiCondition=MultiCondition.create().add(condition);this.andMultiConditionList.add(multiCondition);
}else{if(this.andList == null){this.andList = new ArrayList();
}this.andList.add(condition[0]);return this;
}
}return this;
}/*** or(a=1 and b=2 or c=1)形式查询
*@paramcondition
*@return
*/
publicQuery or(MultiCondition multiCondition) {if(null!=multiCondition) {if(null == this.orMultiConditionList) {this.orMultiConditionList = new ArrayList<>();
}this.orMultiConditionList.add(multiCondition);
}return this;
}/*** 增加或条件 or a=1 和 or(a=1 and b=2 or c=1)形式查询
*@paramconditions
*@return
*/
publicQuery or(Condition... condition) {if(CodeArrayUtils.isNotEmpty(condition)) {if(condition.length>1){if(null == this.orMultiConditionList) {this.orMultiConditionList = new ArrayList<>();
}
MultiCondition multiCondition=MultiCondition.create().add(condition);this.orMultiConditionList.add(multiCondition);
}else{if(this.orList == null){this.orList = new ArrayList();
}this.orList.add(condition[0]);return this;
}
}return this;
}/*** 描述:where条件,支持连续调用
*@author七脉
*@paramcondition
*@return
*/
publicQuery where(Condition condition){if(null !=condition){if(condition.isAnd()){if(this.andList == null){this.andList = new ArrayList();
}this.andList.add(condition);
}else{if(this.orList == null){this.orList = new ArrayList();
}this.orList.add(condition);
}
}return this;
}/*** 描述:增加或条件
*@author七脉
*@paramkey
*@paramoperator
*@paramvalue
*@return
*/
publicQuery or(String key, String operator, Object value){
Condition condition= Condition.create(key, operator, value, false);returnor(condition);
}/*** 描述:升序排序
*@paramkey 字段名称
*@return
*/
publicQuery asc(String key){
key=getColumn(key);if(null !=key){if(this.sorts == null){this.sorts = new ArrayList();
}this.sorts.add(OrderBy.asc(key));
}return this;
}/*** 描述:降序排序
*@paramkey 字段名称
*@return
*/
publicQuery desc(String key){
key=getColumn(key);if(null !=key){if(this.sorts == null){this.sorts = new ArrayList();
}this.sorts.add(OrderBy.asc(key));
}return this;
}/*** 增加分组条件
*@paramgroups
*@return
*/
publicQuery group(String... groupKeys){if(null !=groupKeys){for(String key : groupKeys){
key=getColumn(key);if(this.groupKeys == null){this.groupKeys = new ArrayList<>();
}this.groupKeys.add(key);
}
}return this;
}publicQuery limit(Integer pageNum, Integer pageSize) {if(null==pageNum || 0==pageNum) {this.pageNum = 1;
}else{this.pageNum =pageNum;
}if(null==pageSize || 0==pageSize) {this.pageSize = 1;
}else{this.pageSize =pageNum;
}return this;
}privateString getColumn(String key) {if(!key.contains("_")){
String newKey= "";for(int i=0; i
newKey+= "_"+ch;
}else{
newKey+=ch;
}
}
key=newKey;
}returnkey;
}public ListgetAndList() {returnandList;
}public ListgetOrList() {returnorList;
}public ListgetGroupKeys() {returngroupKeys;
}public ListgetSorts() {returnsorts;
}public ListgetAndMultiConditionList() {returnandMultiConditionList;
}public ListgetOrMultiConditionList() {returnorMultiConditionList;
}public staticString getAndConditionsKey() {returnAND_CONDITIONS_KEY;
}public staticString getOrConditionsKey() {returnOR_CONDITIONS_KEY;
}publicString[] getSelectColumns() {returnselectColumns;
}publicString getTable() {returntable;
}public ListgetJoinList() {returnjoinList;
}publicInteger getPageNum() {returnpageNum;
}publicInteger getPageSize() {returnpageSize;
}
}
自定义查询 java_JAVA自定义查询策略相关推荐
- [JAVA EE] JPA 查询用法:自定义查询,分页查询
项目已上传:https://codechina.csdn.net/qq_36286039/javaee 自定义查询 问题:内置的crud功能不满足需求时如何添加自定义查询? 几种自定义查询方法 方法命 ...
- java查询结果自定义显示_JPA自定义对象接收查询结果集操作
最近使用JPA的时候,碰到需要自定义查询结果集的场景,网上搜了一下,都是需要自定义方法写一大串代码实现的,太繁琐了,有那时间还不如用mybaits. 用JPA就是要尽量通过声明接口解决持久层问题,要不 ...
- 自定义报错返回_MybatisPlus基础篇学习笔记(五)------自定义sql及分页查询
本章目录 自定义sql 分页查询 1. 自定义sql 在dao文件中编写自定义接口,并在方法上使用注解形式注入SQL,如图所示: 第一种: 第二种 ① application.yml加入下面配置 my ...
- 自定义条件查询_数据查询不止有vlookup函数,自定义zlookup函数查询操作更高效...
Excel数据查询,相信大家首先会想到vlookup函数.毋庸置疑vlookup函数在Excel数据查询中作用是非常的强大.但是它也有一些不能实现的数据查询. 如上图所示,我们需要根据人员的出现次数, ...
- day056-58 django多表增加和查询基于对象和基于双下划线的多表查询聚合 分组查询 自定义标签过滤器 外部调用django环境 事务和锁...
一.多表的创建 from django.db import models# Create your models here. class Author(models.Model):id = model ...
- ES自定义评分机制:function_score查询详解
一.function_score介绍 主要用于让用户自定义查询相关性得分,实现精细化控制评分的目的. 在ES的常规查询中,只有参与了匹配查询的字段才会参与记录的相关性得分score的计算.但很多时候我 ...
- 自定义注解,实现jpa查询,使用起来很方便,记录一下
自定义注解: @Query /*** @author Lee* @description* @date 2019/12/25 11:36**/ @Target(ElementType.FIELD) @ ...
- mysql 自定义查询函数,mysql自定义函数与动态查询
摘要 腾兴网为您分享:mysql自定义函数与动态查询,智学网,夜读小说,小睡眠,西餐菜谱等软件知识,以及猫语翻译器,江西校讯通,刷qq业务的网站,房洽洽,学士服照,爱站seo工具包,虚拟声卡驱动,隐藏 ...
- influxdb连续查询CQ和保留策略RP
目录 保留策略RP 连续查询: CQ (Continuous Query ) 1)新建连续查询 2)显示所有已存在的连续查询 3)删除Continuous Queries 保留策略RP 一.Inf ...
最新文章
- SAP BRF+ ruleset里维护多条rule,每条rule逐一执行
- 20220129---CTF刷题---WEB--代码审计
- python调用java文件_Python程序中调用Java代码的实践
- InfoPath: Passing Command Line parameters to a new form
- P4:神经网络与反向传播
- python 函数
- 计算机基础(九):C语言基础知识小结
- 为什么我建议你这样实现MySQL分页
- Caused by: java.lang.NumberFormatException: For input string: 18446744073709551615
- nxlog以syslog方式发送日志
- 卷积神经网络应用领域和基本结构
- 安骑士主要功能(云盾服务器安全)
- Android 开发艺术探索笔记(12),android开发教程百度网盘
- AtCoder Beginner Contest 264笔记
- BGP-ISIS实验
- 学习记录1.0(基础算法)
- macOS 视频格式转换器 MacX Video Converter Pro
- gvdp哪个工厂用_BTP、BTD与FSS三种线束设计业务模式的区别
- 使用命令行登陆Mysql
- CPU指令的流水线执行
热门文章
- (二)nesting解读simulations>examples
- AKH-L零序电流互感器(安科瑞-卓宋兰)
- C语言-关于rand()函数的使用
- 宝鲲财经:炒汇的正确逃顶技巧
- Handbook of MusicPsychology 音乐心理学手册 ( 多纳德·霍杰斯 Donald.A.Hodges) 笔记
- matlab已知圆心和半径怎么作圆,matlab根据圆心和半径画圆三种方式
- 常见python操作excel库比较
- Android 设置飞行模式,判断是否是飞行模式
- 企鲸客SCRM和微盛SCRM管理系统的区别
- 2011年十大微博热点之一:一句话赚取2.3亿元