ドメイン・クラスのプロパティで Condition アノテーションを使用すると、クエリで使用される比較記号をすばやく定義できます。
例えば、以下のように記述できます。
@Column
@Condition(operator = LIKE)
private String roleCode;
デフォルトのクエリを使用する場合、この属性はファジー・クエリを使用します。
コンディションクラスを見てみましょう:
- ここでは特に制限はありませんが、特定の条件が""になるような> = <、デフォルトの=、オートラップファジークエリで、"のような "に設定することもできます。
- はブーリアン型で、trueを指定すると与えられた値を%で囲みますが、falseを指定すると囲みません。
- falseの場合はコンディションに入れません。
具体的なコールチェーンは
1,
sql.append(SqlHelper.whereAllIfColumns(entityClass, this.isNotEmpty()));
2,
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,
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);
}
}