package com.black.design.pattern.builder.sql;
import java.util.ArrayList;
import java.util.List;
// 查询规则类
public class QueryRule {
// 查询条件
private List conditions = new ArrayList();
// 排序字段
private List orderConditions = new ArrayList();
// 参数值
private List
package com.black.design.pattern.builder.sql;
import java.util.ArrayList;
import java.util.List;
// sql 构造器
public class QueryRuleSqlBuilder {
private QueryRule queryRule;
private List values = new ArrayList();
public QueryRuleSqlBuilder(QueryRule queryRule) {
this.queryRule = queryRule;
this.values = queryRule.getParams();
}
public String build(String tableName) {
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append("select * from ").append(tableName);
List conditions = queryRule.getConditions();
for (int i = 0; i < conditions.size(); i++) {
if(i==0) {
sqlBuffer.append(" where ");
}
sqlBuffer.append(conditions.get(i)).append("?");
if(i < conditions.size() - 1) {
sqlBuffer.append(" and ");
}
}
//排序
List orders = queryRule.getOrderConditions();
for (int i = 0; i < orders.size(); i++) {
if(i==0) {
sqlBuffer.append(" order by ");
}
sqlBuffer.append(orders.get(i));
if(i < orders.size() - 1) {
sqlBuffer.append(",");
}
}
sqlBuffer.append(";");
return sqlBuffer.toString();
}
public List getValues() {
return values;
}
}
测试:
package com.black.design.pattern.builder.sql;
public class QueryRuleSqlBuilderTest {
public static void main(String[] args) {
QueryRule queryRule = new QueryRule();
queryRule.addAscOrder("age");
queryRule.andEquals("addr", "北京市");
queryRule.andLike("name", "black");
queryRule.andGreaterEquals("age", 18);
queryRule.andGreaterEquals("time", "2021-01-01");
QueryRuleSqlBuilder builder = new QueryRuleSqlBuilder(queryRule);
System.out.println(builder.build("t_user"));
System.out.println(builder.getValues());
}
}
输出:
select * from t_user where addr = ? and name like ? and age >= ? and time >= ? order by age asc;
[北京市, %black%, 18, 2021-01-01]