根据POJO 产生 UPDATE 和 INSERT 语句

本文介绍了如何使用SpringJDBC创建查询,包括插入、更新操作的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**

该程序仅适合用使用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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值