SQLOrm sert comme un bon exemple de combiner le modèle constructeur avec un ensemble approprié de noms de méthodes rendant la construction de SQL sentir comme travailler avec un DSL.
par exemple
private String getPersonAndmaybePet_JavaStr(boolean personName, boolean isAdult, int[] petTypes) {
StringBuilder sb = new StringBuilder();
// do SELECT
sb.append("SELECT ");
if(personName)
sb.append("person.name,");
if(petTypes != null)
sb.append("pet.*,");
// do FROM
sb.delete(sb.length() - 1, sb.length()); // remove last comma
sb.append(" FROM person,");
if(petTypes != null)
sb.append(" Pet,");
// do WHERE
sb.delete(sb.length() - 1, sb.length()); // remove last comma
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();
}
devient
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();
}
avez-vous vérifié les exemples wikipedia? – Bozho
pour une lecture intéressante: http://stackoverflow.com/questions/328496/when-would-you-use-the-builder-pattern – akf