修改DbUtils支持表名下劃線映射(駝峯模式)

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

相關文章
相關標籤/搜索