SQLOrm is a good example of combining a builder pattern with an appropriate set of method names that let you build SQL, how to work with DSL.
eg,
private String getPersonAndmaybePet_JavaStr(boolean personName, boolean isAdult, int[] petTypes) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT ");
if(personName)
sb.append("person.name,");
if(petTypes != null)
sb.append("pet.*,");
sb.delete(sb.length() - 1, sb.length());
sb.append(" FROM person,");
if(petTypes != null)
sb.append(" Pet,");
sb.delete(sb.length() - 1, sb.length());
sb.append(" WHERE ");
if(isAdult)
sb.append(" person.age >= 18");
else
sb.append(" person.age < 18");
if(petTypes != null) {
StringBuilder commaList = new StringBuilder();
for(int id : petTypes) {
commaList.append(id);
commaList.append(",");
}
commaList.delete(commaList.length() - 1, commaList.length());
sb.append(" AND person.pet_id = pet.id AND pet.pettype IN (" + commaList.toString() + ")");
}
return sb.toString();
}
becomes
private String getPersonAndmaybePet(boolean personName, boolean isAdult, int[] petTypes) {
SelectBuilder qry = new SelectBuilder();
if(personName)
qry.select("person.name").from("person");
if(isAdult)
qry.from("person").where().and("person.age >= 18");
else
qry.from("person").where().and("person.age < 18");
if(petTypes != null) {
qry.select("pet.*").from("Pet")
.where()
.and("person.pet_id = pet.id")
.and("pet.pettype IN (#)", QueryBuilderHelper.numbers(petTypes));
}
return qry.toSql();
}
source
share