package com.walker.jdbc;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.walker.infrastructure.utils.JsonUtils;
import com.walker.jdbc.dao.PersistenceException;
import com.walker.jdbc.util.StringUtils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* 该类有两个用处,一是绑定页面查询条件,二是生成and形式的查询条件。
* Contorller中:
* @ModelAttribute("queryVo") QueryVo queryVo
* Service中:
* sql = sql.append(queryVo.generateAndSql()); 生成and形式的sql语句
* queryVo.getQueryMap() 生成对应的sql语句参数
* 如需非页面中的查询条件,可使用putLike,putEqual方法自行添加查询条件
* 页面中:
* input type="text" name="likeItem['rz.username']" value="${queryVo.likeItem['rz.username']}"
* 其中likeItem表示模糊查询,equalItem表示精确查询。
* 如果要使用别名可用 别名.字段名
* 注:暂不支持字段名别名的情况
*
*
* @author 张亮
* @author 时克英 修改
* @date 2022-10-10
*/
public class QueryVo implements Serializable {
// 序列化版本号
private static final long serialVersionUID = 1L;
public static final String SPACE = " ";
/**
* 常用sql语句组成片段
*/
private static final String PERCENT = "%";
private static final String LIKE = " like ";
private static final String AND = " and ";
private static final String OR = " or ";
private static final String EQUAL = " = ";
private static final String UNEQUAL = " != ";
private static final String IN = " in ";
private static final String NOTIN = " not in ";
private static final String GREATER = " >= ";
private static final String LESS = " <= ";
private static final String WHERE = " where ";
private static final String ORDER_BY = " order by ";
/**
* 等于、相似、大于、小于、不等于、包含、不包含对象
*/
private Map equalItem;
private Map likeItem;
private Map greaterItem;
private Map lessItem;
private Map unequalItem;
private Map includeItem;
private Map notincludeItem;
//默认添加后缀
private Map defalutSuffixItem;
private Integer sfzsgd;
/**
* 记录非重复变量
*/
private Map countMap;
private List keyList;
/**
* 自定义sql
*/
private StringBuilder extSql;
/**
* 自定义order by sql
*/
private StringBuilder orderBySql;
/**
* 排序用字段名,正序倒序
*/
private String qvSortName;
private String qvSortOrder;
/**
* 列选择的所有数据
*/
private String toggleColumnValue = "";
/**
* 生成的查询语句用值
*/
private Map queryMap;
/**
* 保存页面查询条件字符串
*/
private String serializeQuery = "";
/**
* 临时排除查询条件
*/
private Map excludeQueryVO;
private List