您的位置:首页 > 产品设计 > UI/UE

MyBatis学习-使用SqlBuilder生成SQL语句

2015-02-10 15:26 316 查看
import java.io.Serializable;

import java.util.ArrayList;

import java.util.List;

import org.apache.ibatis.jdbc.SqlBuilder;

public class Record extends SqlBuilder implements Serializable {

private static final long serialVersionUID = -74709401356489160L;

private DbType dbType = DbType.INSERT;

public DbType getDbType() {

return dbType;

}

public void setDbType(DbType dbType) {

this.dbType = dbType;

}

public String getSchema() {

return schema;

}

public void setSchema(String schema) {

this.schema = schema;

}

private String schema;

private String tableName;

private List<String> columns;

private List<Object> values;

private List<String> keys;

private List<Object> keyValues;

private String recordKey;

public String getRecordKey() {

return recordKey;

}

public void setRecordKey(String recordKey) {

this.recordKey = recordKey;

}

public Record(String schema, String tableName) {

if (tableName == null)

throw new NullPointerException("record tableName is null");

if (schema == null || schema.length() == 0)

throw new NullPointerException(

"record schema is null , tableName : " + tableName);

this.columns = new ArrayList<String>();

this.values = new ArrayList<Object>();

this.keys = new ArrayList<String>();

this.keyValues = new ArrayList<Object>();

this.tableName = tableName;

this.schema = schema;

}

public List<String> getColumns() {

return columns;

}

public void setColumns(List<String> columns) {

this.columns = columns;

}

public List<Object> getValues() {

return values;

}

public String getTableFullName() {

return (schema == null ? tableName : schema + "." + tableName);

}

public String getTableName() {

return tableName;

}

public void setTableName(String tableName) {

this.tableName = tableName;

}

public void setValues(List<Object> values) {

this.values = values;

}

public List<String> getKeys() {

return keys;

}

public void setKeys(List<String> keys) {

this.keys = keys;

}

public List<Object> getKeyValues() {

return keyValues;

}

public void setKeyValues(List<Object> keyValues) {

this.keyValues = keyValues;

}

public void addFieldAndValue(String column, Object value, boolean isKey) {

this.columns.add(column);

this.values.add(value);

if (isKey)

addKeyAndValue(column, value);

}

private void addKeyAndValue(String column, Object value) {

this.keys.add(column);

this.keyValues.add(value);

this.recordKey += value.toString();

}

public String insertSqlForPreparedStatement() {

BEGIN();

INSERT_INTO(schema + "." + tableName);

for (String column : columns)

VALUES(column, "?");

return SQL().replaceAll("\\n", "");

}

public String updateSqlForPreparedStatement() {

BEGIN();

UPDATE(schema + "." + tableName);

for (String column : columns) {

if (keys.contains(column))

continue;

SET(column + "=?");

}

for (String keyString : keys)

WHERE(keyString + "=?");

return SQL().replaceAll("\\n", " ");

}

public String toString() {

StringBuffer stringBuffer = new StringBuffer();

stringBuffer.append("[sql type:" + dbType + ";")

.append("SCHEMA:" + schema + ";")

.append("tableName:" + tableName + ";")

.append("columns:" + columns + ";")

.append("values:" + values + ";")

.append("keyValues:" + keyValues + ";").append("]");

return stringBuffer.toString();

}

public String insterOrUpdateSqlForPreparedStatement() {

StringBuffer sql = new StringBuffer("MERGE INTO ");

sql.append(schema + "." + tableName + " T1 ");

sql.append(" USING (SELECT ");

for (int i = 0; i < columns.size(); i++) {

if (i == 0) {

sql.append(" ? as " + columns.get(i));

} else {

sql.append(", ? as " + columns.get(i));

}

}

sql.append(" FROM dual) T2 ON ( ");

for (int i = 0; i < keys.size(); i++) {

if (i == 0) {

sql.append("T1." + keys.get(i) + "=T2." + keys.get(i));

} else {

sql.append(" and T1." + keys.get(i) + "=T2." + keys.get(i));

}

}

sql.append(") WHEN MATCHED THEN UPDATE SET ");

for (int i = 0; i < columns.size(); i++) {

if (keys.contains(columns.get(i)))

continue;

sql.append(" T1." + columns.get(i) + "=T2." + columns.get(i) + ",");

}

sql.delete(sql.length() - 1, sql.length());

sql.append(" WHEN NOT MATCHED THEN INSERT (");

for (int i = 0; i < columns.size(); i++) {

sql.append(columns.get(i) + ",");

}

sql.delete(sql.length() - 1, sql.length());

sql.append(") VALUES (");

for (int i = 0; i < columns.size(); i++) {

sql.append("T2." + columns.get(i) + ",");

}

sql.delete(sql.length() - 1, sql.length());

sql.append(")");

return sql.toString();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: