Commons DbUtils很一個很好用JDBC工具類,地球人都知道,就不介紹了,不知道的看這裏:http://commons.apache.org/dbutils/ java
在進行查詢自動類映射的時候domain類的屬性必須和數據庫中名稱同樣,可是若是數據庫的表名使用帶下劃線的設計,domain類中的屬性也要使用下劃線,看起來很不雅觀,並且使用hibernate工具自動生成的domain類會自動去掉下劃線,下劃線後面的用大寫字母,好比user_name轉換後爲userName,所以有必要讓DbUtils支持這種設計。數據庫
好,目標已經明確,下來就是開工了!apache
一、下載DbUtils的源代碼app
二、找到commons-dbutils-1.5-src\src\java\org\apache\commons\dbutils下的BeanProcessor.java,增長一個函數,代碼以下:dom
private String getPropertyName(String columnName){ StringBuilder sb = new StringBuilder(); boolean match = false; for (int i=0; i<columnName.length(); i++){ char ch = columnName.charAt(i); if (match && ch>=97 && ch<=122) ch -= 32; if (ch!='_'){ match = false; sb.append(ch); }else{ match = true; } } return sb.toString(); }
三、修改mapColumnsToProperties函數,把原來的 rsmd.getColumnName(col) 修改成 getPropertyName(rsmd.getColumnName(col))。函數
protected int[] mapColumnsToProperties(ResultSetMetaData rsmd, PropertyDescriptor[] props) throws SQLException { int cols = rsmd.getColumnCount(); int columnToProperty[] = new int[cols + 1]; Arrays.fill(columnToProperty, PROPERTY_NOT_FOUND); for (int col = 1; col <= cols; col++) { String columnName = getPropertyName(rsmd.getColumnName(col)); for (int i = 0; i < props.length; i++) { if (columnName.equalsIgnoreCase(props[i].getName())) { columnToProperty[col] = i; break; } } } return columnToProperty; }
四、mvn package編譯,搞定!工具
懶得編譯的少年,直接下載附件吧ui