Java tutorial
/* * Copyright 2007-2107 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.ymate.platform.persistence.jdbc.support; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import net.ymate.platform.persistence.jdbc.JDBC; import net.ymate.platform.persistence.jdbc.base.dialect.IDialect; import net.ymate.platform.persistence.support.EntityMeta; import org.apache.commons.lang.StringUtils; /** * <p> * JdbcEntityMeta * </p> * <p> * JDBC??? * </p> * * @author (suninformation@163.com) * @version 0.0.0 * <table style="border:1px solid gray;"> * <tr> * <th width="100px">?</th><th width="100px"></th><th * width="100px"></th><th width="100px"></th> * </tr> * <!-- Table ?? --> * <tr> * <td>0.0.0</td> * <td></td> * <td></td> * <td>2011-6-16?09:41:36</td> * </tr> * </table> */ public class JdbcEntityMeta extends EntityMeta { /** * * * @param entityClass */ public JdbcEntityMeta(Class<?> entityClass) { super(entityClass, JDBC.TABLE_PREFIX); } /** * * @param entityClass * @param simple ??trueentityClass??? */ public JdbcEntityMeta(Class<?> entityClass, boolean simple) { super(entityClass, JDBC.TABLE_PREFIX, simple); } /** * @param dialect ? * @return ??SQL */ public String createSelectByPkSql(IDialect dialect) { return createSelectByPkSql(dialect, null, null); } public String createSelectByPkSql(IDialect dialect, String[] fieldFilter, String[] pkFieldFilter) { String _sql = "select #FIELDS from #TABLENAME where #PK"; _sql = _sql.replaceAll("#FIELDS", __doGenerateFieldsFormatStr(dialect, fieldFilter != null && fieldFilter.length > 0 ? Arrays.asList(fieldFilter) : this.getColumnNames())); if (dialect.getDialectName().equals("Oracle")) { _sql = _sql.replaceAll("#TABLENAME", this.getTableName()); } else { _sql = _sql.replaceAll("#TABLENAME", dialect.wapperQuotedIdent(this.getTableName())); } _sql = _sql.replaceAll("#PK", __doGeneratePrimaryKeyFormatStr(dialect, pkFieldFilter != null && pkFieldFilter.length > 0 ? Arrays.asList(pkFieldFilter) : this.getPrimaryKeys())); return _sql; } /** * @return ?SQL */ public String createSelectAllSql(IDialect dialect) { return createSelectAllSql(dialect, null); } public String createSelectAllSql(IDialect dialect, String[] fieldFilter) { String _sql = "select #FIELDS from #TABLENAME "; _sql = _sql.replaceAll("#FIELDS", __doGenerateFieldsFormatStr(dialect, fieldFilter != null && fieldFilter.length > 0 ? Arrays.asList(fieldFilter) : this.getColumnNames())); if (dialect.getDialectName().equals("Oracle")) { _sql = _sql.replaceAll("#TABLENAME", this.getTableName()); } else { _sql = _sql.replaceAll("#TABLENAME", dialect.wapperQuotedIdent(this.getTableName())); } return _sql; } /** * @return ??SQL */ public String createInsertSql(IDialect dialect) { if (this.hasAutoIncrementColumn()) { // ? List<String> _fieldFilter = new ArrayList<String>(); for (String _columnName : this.getColumnNames()) { // ? if (this.isAutoIncrementColumn(_columnName)) { continue; } _fieldFilter.add(_columnName); } return createInsertSql(dialect, _fieldFilter.toArray(new String[_fieldFilter.size()])); } return createInsertSql(dialect, null); } public String createInsertSql(IDialect dialect, String[] fieldFilter) { String sql = "insert into #TABLENAME (#FIELDS) values (#VALUES)"; if (dialect.getDialectName().equals("Oracle")) { sql = sql.replaceAll("#TABLENAME", this.getTableName()); } else { sql = sql.replaceAll("#TABLENAME", dialect.wapperQuotedIdent(this.getTableName())); } sql = sql.replaceAll("#FIELDS", __doGenerateFieldsFormatStr(dialect, fieldFilter != null && fieldFilter.length > 0 ? Arrays.asList(fieldFilter) : this.getColumnNames())); sql = sql.replaceAll("#VALUES", __doGenerateFieldsValueFormatStr( fieldFilter != null && fieldFilter.length > 0 ? Arrays.asList(fieldFilter) : this.getColumnNames())); return sql; } /** * @return ?SQL */ public String createUpdateByPkSql(IDialect dialect) { return createUpdateByPkSql(dialect, null, null); } public String createUpdateByPkSql(IDialect dialect, String[] fieldFilter, String[] pkFieldFilter) { String _sql = "update #TABLENAME set #FIELDS where #PK"; _sql = _sql.replaceAll("#FIELDS", __doGenerateFieldsValueUpdateFormatStr(dialect, fieldFilter != null && fieldFilter.length > 0 ? Arrays.asList(fieldFilter) : this.getColumnNames())); if (dialect.getDialectName().equals("Oracle")) { _sql = _sql.replaceAll("#TABLENAME", this.getTableName()); } else { _sql = _sql.replaceAll("#TABLENAME", dialect.wapperQuotedIdent(this.getTableName())); } _sql = _sql.replaceAll("#PK", __doGeneratePrimaryKeyFormatStr(dialect, pkFieldFilter != null && pkFieldFilter.length > 0 ? Arrays.asList(pkFieldFilter) : this.getPrimaryKeys())); return _sql; } /** * @return ?SQL */ public String createDeleteByPkSql(IDialect dialect) { return createDeleteByPkSql(dialect, null); } public String createDeleteByPkSql(IDialect dialect, String[] pkFieldFilter) { String sql = "delete from #TABLENAME where #PK"; if (dialect.getDialectName().equals("Oracle")) { sql = sql.replaceAll("#TABLENAME", this.getTableName()); } else { sql = sql.replaceAll("#TABLENAME", dialect.wapperQuotedIdent(this.getTableName())); } sql = sql.replaceAll("#PK", __doGeneratePrimaryKeyFormatStr(dialect, pkFieldFilter != null && pkFieldFilter.length > 0 ? Arrays.asList(pkFieldFilter) : this.getPrimaryKeys())); return sql; } private String __doGeneratePrimaryKeyFormatStr(IDialect dialect, List<String> primaryKeyNames) { StringBuilder _pkStr = new StringBuilder(); for (String pkName : primaryKeyNames) { if (_pkStr.length() > 0) { _pkStr.append(" and "); } _pkStr.append(dialect.wapperQuotedIdent(pkName)).append("=?"); } return _pkStr.toString(); } private String __doGenerateFieldsFormatStr(IDialect dialect, List<String> fields) { StringBuilder _fieldsSB = new StringBuilder(); for (String _field : fields) { _fieldsSB.append(dialect.wapperQuotedIdent(_field)).append(","); } return _fieldsSB.substring(0, _fieldsSB.length() - 1); } private String __doGenerateFieldsValueFormatStr(List<String> fields) { StringBuilder _returnValue = new StringBuilder(); for (int i = 0; i < fields.size(); i++) { _returnValue.append("?"); if (i < fields.size() - 1) { _returnValue.append(","); } } return _returnValue.toString(); } private String __doGenerateFieldsValueUpdateFormatStr(IDialect dialect, List<String> fields) { StringBuilder _returnValue = new StringBuilder(); for (String _field : fields) { if (this.getPrimaryKeys().contains(_field)) { continue; } _returnValue.append(dialect.wapperQuotedIdent(_field)).append("=?"); _returnValue.append(","); } return _returnValue.length() >= 1 ? _returnValue.substring(0, _returnValue.length() - 1) : _returnValue.toString(); } /** * ????JavaBean?<br/> * ??"user_name"?"UserName"<br/> * @param fieldName ?? * @return ?JavaBean? */ public static String buildFieldNameToClassAttribute(String fieldName) { String[] _words = StringUtils.split(fieldName, '_'); if (_words != null) { if (_words.length > 1) { StringBuilder _returnBuilder = new StringBuilder(); for (String _word : _words) { _returnBuilder.append(StringUtils.capitalize(_word.toLowerCase())); } return _returnBuilder.toString(); } else { return StringUtils.capitalize(_words[0].toLowerCase()); } } return null; } }