可以在domain类的属性上利用Condition这个注解,来快捷定义查询时使用的比较符号。
例如可以写
@Column
@Condition(operator = LIKE)
private String roleCode;使用默认查询时让这个属性使用模糊查询
我们来看下Condition类:
- 这里的operator不做限制,具体条件会变成 “字段名 operator 给定的值”,例如> = <,默认=,也可以设置成“like”,配合autoWrap进行模糊查询。
- autoWrap是布尔类型,如果设置成true会使用%将给定的值包起来,false则不会,也就是“字段名 like ‘%给定的值%’”和“字段名 like ‘给定的值’”的区别。
- exclude如果为false,则不会放入条件中。
具体的调用链为:
1、
BaseSelectProvider
sql.append(SqlHelper.whereAllIfColumns(entityClass, this.isNotEmpty()));2、
SqlHelper
Condition condition = column.getCondition();
if(condition == null) {
sql.append(getIfNotNull(column, " AND " + column.getColumnEqualsHolder(), empty));
} else if(!condition.exclude()) {
sql.append(getIfNotNull(column, " AND " + column.getColumnHolderWithOperator(condition.operator(), condition.autoWrap()), empty));
}3、
EntityColumn
public String getColumnHolderWithOperator(String operator, boolean autoWrap) {
if("LIKE".equalsIgnoreCase(operator)) {
return autoWrap?this.column + " LIKE concat(\'%\',concat(" + this.getColumnHolder((String)null) + ",\'%\'))":this.column + " LIKE " + this.getColumnHolder((String)null);
} else {
operator = operator.replace(">", ">").replace("<", "<");
return this.column + operator + this.getColumnHolder((String)null);
}
}