注意Java陷阱
一 deleteCharAt
StringBuilder方法deleteCharAt:在這個序列中的刪除指定位置字符,只是一個字符.如下代碼,在拼接SQL過程中,刪除最后一個”?”或者”,”都是可以的,但是刪除最后一個”and”時,只是刪除了最后一個”and”的一個字符,即”a” 的位置. 結果變成: select * form tableName where 1=1 nd
可以使用 setLength 替代:stringBuilder.setLength(stringBuilder.length()-“and “.length());
public static String buildSelectSql(final String tableName,final String[] columns,final String orderByCondition,final String[] wheres){if (CheckValue.valideteNullOrEmpty(tableName)) {return "";}StringBuilder stringBuilder=new StringBuilder(" select ");if (columns==null||columns.length==0) {stringBuilder.append(" *");}else {for(String column : columns) stringBuilder.append(column+",");stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(","));}stringBuilder.append(" from "+tableName);if (wheres!=null&&wheres.length>0) {stringBuilder.append(" where ");for (String where : wheres) stringBuilder.append(where+"=? and ");stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("and"));}if (orderByCondition!=null&&!orderByCondition.isEmpty()) {stringBuilder.append(" order by "+orderByCondition);}return stringBuilder.toString();}二 使用spring注入對象,當出現null對象時,考慮定義上層對象時是否采用spring方式注入.
如下 代碼片段:
代碼片段2 ConstructPayParams
@Component public class ConstructPayParams {@Resource(name = "pay19BasicProfile")private Pay19BasicProfile payBasicProfile;//省略其他方法 }如果代碼片段1中采用方式二,正常創建ConstructPayParams對象時,則ConstructPayParams類中的payBasicProfile無法被注入,為null,必須采用方式一spring注入方式創建ConstructPayParams對象
三 格式化保留兩位小數
//如果為整型,則異常 String.format("%.2f", orderProfile.getAmount()/100.0)總結
- 上一篇: 软件清单
- 下一篇: JavaWeb显示器