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自定义查询策略相关推荐

  1. [JAVA EE] JPA 查询用法:自定义查询,分页查询

    项目已上传:https://codechina.csdn.net/qq_36286039/javaee 自定义查询 问题:内置的crud功能不满足需求时如何添加自定义查询? 几种自定义查询方法 方法命 ...

  2. java查询结果自定义显示_JPA自定义对象接收查询结果集操作

    最近使用JPA的时候,碰到需要自定义查询结果集的场景,网上搜了一下,都是需要自定义方法写一大串代码实现的,太繁琐了,有那时间还不如用mybaits. 用JPA就是要尽量通过声明接口解决持久层问题,要不 ...

  3. 自定义报错返回_MybatisPlus基础篇学习笔记(五)------自定义sql及分页查询

    本章目录 自定义sql 分页查询 1. 自定义sql 在dao文件中编写自定义接口,并在方法上使用注解形式注入SQL,如图所示: 第一种: 第二种 ① application.yml加入下面配置 my ...

  4. 自定义条件查询_数据查询不止有vlookup函数,自定义zlookup函数查询操作更高效...

    Excel数据查询,相信大家首先会想到vlookup函数.毋庸置疑vlookup函数在Excel数据查询中作用是非常的强大.但是它也有一些不能实现的数据查询. 如上图所示,我们需要根据人员的出现次数, ...

  5. day056-58 django多表增加和查询基于对象和基于双下划线的多表查询聚合 分组查询 自定义标签过滤器 外部调用django环境 事务和锁...

    一.多表的创建 from django.db import models# Create your models here. class Author(models.Model):id = model ...

  6. ES自定义评分机制:function_score查询详解

    一.function_score介绍 主要用于让用户自定义查询相关性得分,实现精细化控制评分的目的. 在ES的常规查询中,只有参与了匹配查询的字段才会参与记录的相关性得分score的计算.但很多时候我 ...

  7. 自定义注解,实现jpa查询,使用起来很方便,记录一下

    自定义注解: @Query /*** @author Lee* @description* @date 2019/12/25 11:36**/ @Target(ElementType.FIELD) @ ...

  8. mysql 自定义查询函数,mysql自定义函数与动态查询

    摘要 腾兴网为您分享:mysql自定义函数与动态查询,智学网,夜读小说,小睡眠,西餐菜谱等软件知识,以及猫语翻译器,江西校讯通,刷qq业务的网站,房洽洽,学士服照,爱站seo工具包,虚拟声卡驱动,隐藏 ...

  9. influxdb连续查询CQ和保留策略RP

    目录 保留策略RP 连续查询: CQ  (Continuous  Query ) 1)新建连续查询 2)显示所有已存在的连续查询 3)删除Continuous Queries 保留策略RP 一.Inf ...

最新文章

  1. SAP BRF+ ruleset里维护多条rule,每条rule逐一执行
  2. 20220129---CTF刷题---WEB--代码审计
  3. python调用java文件_Python程序中调用Java代码的实践
  4. InfoPath: Passing Command Line parameters to a new form
  5. P4:神经网络与反向传播
  6. python 函数
  7. 计算机基础(九):C语言基础知识小结
  8. 为什么我建议你这样实现MySQL分页
  9. Caused by: java.lang.NumberFormatException: For input string: 18446744073709551615
  10. nxlog以syslog方式发送日志
  11. 卷积神经网络应用领域和基本结构
  12. 安骑士主要功能(云盾服务器安全)
  13. Android 开发艺术探索笔记(12),android开发教程百度网盘
  14. AtCoder Beginner Contest 264笔记
  15. BGP-ISIS实验
  16. 学习记录1.0(基础算法)
  17. macOS 视频格式转换器 MacX Video Converter Pro
  18. gvdp哪个工厂用_BTP、BTD与FSS三种线束设计业务模式的区别
  19. 使用命令行登陆Mysql
  20. CPU指令的流水线执行

热门文章

  1. (二)nesting解读simulations>examples
  2. AKH-L零序电流互感器(安科瑞-卓宋兰)
  3. C语言-关于rand()函数的使用
  4. 宝鲲财经:炒汇的正确逃顶技巧
  5. Handbook of MusicPsychology 音乐心理学手册 ( 多纳德·霍杰斯 Donald.A.Hodges) 笔记
  6. matlab已知圆心和半径怎么作圆,matlab根据圆心和半径画圆三种方式
  7. 常见python操作excel库比较
  8. Android 设置飞行模式,判断是否是飞行模式
  9. 企鲸客SCRM和微盛SCRM管理系统的区别
  10. 2011年十大微博热点之一:一句话赚取2.3亿元