cn.hutool.db.sql.Condition Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hutool-all Show documentation
Show all versions of hutool-all Show documentation
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
package cn.hutool.db.sql;
import cn.hutool.core.clone.CloneSupport;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.text.StrSplitter;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.CharUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
/**
* 条件对象
*
* @author Looly
*/
public class Condition extends CloneSupport {
/**
* SQL中 LIKE 语句查询方式
*
* @author Looly
*/
public enum LikeType {
/**
* 以给定值开头,拼接后的SQL "value%"
*/
StartWith,
/**
* 以给定值开头,拼接后的SQL "%value"
*/
EndWith,
/**
* 包含给定值,拼接后的SQL "%value%"
*/
Contains
}
private static final String OPERATOR_LIKE = "LIKE";
private static final String OPERATOR_IN = "IN";
private static final String OPERATOR_IS = "IS";
private static final String OPERATOR_IS_NOT = "IS NOT";
private static final String OPERATOR_BETWEEN = "BETWEEN";
private static final List OPERATORS = Arrays.asList("<>", "<=", "<", ">=", ">", "=", "!=", OPERATOR_IN);
private static final String VALUE_NULL = "NULL";
/**
* 字段
*/
private String field;
/**
* 运算符(大于号,小于号,等于号 like 等)
*/
private String operator;
/**
* 值
*/
private Object value;
/**
* 是否使用条件值占位符
*/
private boolean isPlaceHolder = true;
/**
* between firstValue and secondValue
*/
private Object secondValue;
/**
* 与前一个Condition连接的逻辑运算符,可以是and或or
*/
private LogicalOperator linkOperator = LogicalOperator.AND;
/**
* 解析为Condition
*
* @param field 字段名
* @param expression 表达式或普通值
* @return Condition
*/
public static Condition parse(String field, Object expression) {
return new Condition(field, expression);
}
// --------------------------------------------------------------- Constructor start
/**
* 构造
*/
public Condition() {
}
/**
* 构造
*
* @param isPlaceHolder 是否使用条件值占位符
*/
public Condition(boolean isPlaceHolder) {
this.isPlaceHolder = isPlaceHolder;
}
/**
* 构造,使用等于表达式(运算符是=)
*
* @param field 字段
* @param value 值
*/
public Condition(String field, Object value) {
this(field, "=", value);
parseValue();
}
/**
* 构造
*
* @param field 字段
* @param operator 运算符(大于号,小于号,等于号 like 等)
* @param value 值
*/
public Condition(String field, String operator, Object value) {
this.field = field;
this.operator = operator;
this.value = value;
}
/**
* 构造
*
* @param field 字段
* @param value 值
* @param likeType {@link LikeType}
*/
public Condition(String field, String value, LikeType likeType) {
this.field = field;
this.operator = OPERATOR_LIKE;
this.value = SqlUtil.buildLikeValue(value, likeType, false);
}
// --------------------------------------------------------------- Constructor end
// --------------------------------------------------------------- Getters and Setters start
/**
* @return 字段
*/
public String getField() {
return field;
}
/**
* 设置字段名
*
* @param field 字段名
*/
public void setField(String field) {
this.field = field;
}
/**
* 获得运算符
* 大于号,小于号,等于号 等
*
* @return 运算符
*/
public String getOperator() {
return operator;
}
/**
* 设置运算符
* 大于号,小于号,等于号 等
*
* @param operator 运算符
*/
public void setOperator(String operator) {
this.operator = operator;
}
/**
* 获得值
*
* @return 值
*/
public Object getValue() {
return value;
}
/**
* 设置值,不解析表达式
*
* @param value 值
*/
public void setValue(Object value) {
setValue(value, false);
}
/**
* 设置值
*
* @param value 值
* @param isParse 是否解析值表达式
*/
public void setValue(Object value, boolean isParse) {
this.value = value;
if (isParse) {
parseValue();
}
}
/**
* 是否使用条件占位符
*
* @return 是否使用条件占位符
*/
public boolean isPlaceHolder() {
return isPlaceHolder;
}
/**
* 设置是否使用条件占位符
*
* @param isPlaceHolder 是否使用条件占位符
*/
public void setPlaceHolder(boolean isPlaceHolder) {
this.isPlaceHolder = isPlaceHolder;
}
/**
* 是否 between x and y 类型
*
* @return 是否 between x and y 类型
* @since 4.0.1
*/
public boolean isOperatorBetween() {
return OPERATOR_BETWEEN.equalsIgnoreCase(this.operator);
}
/**
* 是否IN条件
*
* @return 是否IN条件
* @since 4.0.1
*/
public boolean isOperatorIn() {
return OPERATOR_IN.equalsIgnoreCase(this.operator);
}
/**
* 是否IS条件
*
* @return 是否IS条件
* @since 4.0.1
*/
public boolean isOperatorIs() {
return OPERATOR_IS.equalsIgnoreCase(this.operator);
}
/**
* 是否LIKE条件
*
* @return 是否LIKE条件
* @since 5.7.14
*/
public boolean isOperatorLike() {
return OPERATOR_LIKE.equalsIgnoreCase(this.operator);
}
/**
* 检查值是否为null,如果为null转换为 "IS NULL"形式
*
* @return this
*/
public Condition checkValueNull() {
if (null == this.value) {
this.operator = OPERATOR_IS;
this.value = VALUE_NULL;
}
return this;
}
/**
* 获得between 类型中第二个值
*
* @return 值
*/
public Object getSecondValue() {
return secondValue;
}
/**
* 设置between 类型中第二个值
*
* @param secondValue 第二个值
*/
public void setSecondValue(Object secondValue) {
this.secondValue = secondValue;
}
/**
* 获取与前一个Condition连接的逻辑运算符,可以是and或or
*
* @return 与前一个Condition连接的逻辑运算符,可以是and或or
* @since 5.4.3
*/
public LogicalOperator getLinkOperator() {
return linkOperator;
}
/**
* 设置与前一个Condition连接的逻辑运算符,可以是and或or
*
* @param linkOperator 与前一个Condition连接的逻辑运算符,可以是and或or
* @since 5.4.3
*/
public void setLinkOperator(LogicalOperator linkOperator) {
this.linkOperator = linkOperator;
}
// --------------------------------------------------------------- Getters and Setters end
@Override
public String toString() {
return toString(null);
}
/**
* 转换为条件字符串,并回填占位符对应的参数值
*
* @param paramValues 参数列表,用于回填占位符对应参数值
* @return 条件字符串
*/
public String toString(List
© 2015 - 2024 Weber Informatics LLC | Privacy Policy