/**
该程序仅适合用使用Spring JDBC
*/
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource; // comes from spring-SEC.2.5.6.jar
import com.pojo.BasicPojo;
import com.pojo.Review; // Review is POJO which extends BasicPojo
/**
* Given a model object, this class builds the query for it.
*/
public class QueryBuilder {
protected String tableName = "";
protected String operation = " AND ";
protected String selectPrefix = "SELECT * from ";
protected String insertPrefix = "INSERT INTO ";
protected String updatePrefix = "UPDATE ";
protected int maxCharPerLine = 80;
protected BeanPropertySqlParameterSource bpps;
public QueryBuilder(DomainObject model) {
tableName = model.getClass().getSimpleName().toString();
bpps = new BeanPropertySqlParameterSource(model);
}
/**
* @param args
*/
public static void main(String[] args) {
QueryBuilder builder = new QueryBuilder(new Review());
builder.buildInsert();
System.out.println("------------------------------------");
builder.buildUpdate();
}
protected StringBuffer buildInsert() {
StringBuffer insertColNames = new StringBuffer("\"" + insertPrefix
+ tableName + " ");
StringBuffer insertValues = new StringBuffer(" + \" VALUES(");
int lineOffset = insertColNames.length();
String[] propertyNames = bpps.getReadablePropertyNames();
insertColNames.append("\" \n");
insertColNames.append(" + \"(");
for (int i = 0; i < propertyNames.length; i++) {
String name = propertyNames[i];
if ("class".equalsIgnoreCase(name))
continue;
int oriLen = insertColNames.length();
if (lineOffset > maxCharPerLine) {
insertColNames.append("\"");
insertValues.append("\"");
lineOffset = 0;
insertColNames.append("\n");
insertColNames.append(" + \"");
insertValues.append("\n");
insertValues.append(" + \"");
}
if ("id".equalsIgnoreCase(name)) {
insertColNames.append(name.substring(0, 1).toUpperCase());
insertColNames.append(name.toUpperCase());
} else {
insertColNames.append(name.substring(0, 1).toUpperCase());
insertColNames.append(name.substring(1));
}
insertValues.append(":");
insertValues.append(name);
if (i == propertyNames.length - 1) {
insertColNames.append(")");
insertValues.append(")");
} else {
insertColNames.append(", ");
insertValues.append(", ");
}
lineOffset = lineOffset + (insertColNames.length() - oriLen);
}
insertColNames.append("\"");
insertValues.append("\"");
insertValues.append(";");
System.out.println(insertColNames);
System.out.println(insertValues);
insertColNames.append(insertValues);
return insertColNames;
}
protected StringBuffer buildUpdate() {
StringBuffer result = new StringBuffer("\"" + updatePrefix + tableName
+ " ");
int lineOffset = result.length();
String[] propertyNames = bpps.getReadablePropertyNames();
for (int i = 0; i < propertyNames.length; i++) {
int oriLen = result.length();
String name = propertyNames[i];
if ("id".equalsIgnoreCase(name) || "class".equalsIgnoreCase(name))
continue;
if (lineOffset > maxCharPerLine) {
result.append("\"");
lineOffset = 0;
result.append("\n");
result.append(" + \"");
}
result.append(name.substring(0, 1).toUpperCase());
result.append(name.substring(1));
result.append(" = :");
result.append(name);
if (i < propertyNames.length - 1)
result.append(", ");
lineOffset = lineOffset + (result.length() - oriLen);
}
result.append(" WHERE ID = :id");
result.append("\";");
System.out.println(result);
return result;
}
}