1. 程式人生 > >Spring JdbcTemplate實現通用的泛型dao二:實現自己的名稱轉換NameHandler

Spring JdbcTemplate實現通用的泛型dao二:實現自己的名稱轉換NameHandler

這個比較簡單,只是實現了根據Java實體屬性名轉換回資料庫表的列名而已,看下介面定義:

/**
 * 名稱處理介面
 * 
 * User: liyd
 * Date: 2/12/14
 * Time: 4:51 PM
 */
public interface NameHandler {

    /**
     * 根據實體名獲取表名
     *
     * @param entityName
     * @return
     */
    public String getTableName(String entityName);

    /**
     * 根據表名獲取主鍵名
     * 
     * @param entityName
     * @return
     */
    public String getPrimaryName(String entityName);

    /**
     * 根據屬性名獲取列名
     *
     * @param fieldName
     * @return
     */
    public String getColumnName(String fieldName);
}


三個方法相信一看就明白了,實現也順便貼一下吧:

/**
 * 預設名稱處理handler
 * 
 * User: liyd
 * Date: 2/12/14
 * Time: 4:51 PM
 */
public class DefaultNameHandler implements NameHandler {

    /** 欄位字首 */
    private static final String PREFIX     = "_";

    /** 主鍵字尾 */
    private static final String PRI_SUFFIX = "_id";

    /**
     * 根據實體名獲取表名
     *
     * @param entityName
     * @return
     */
    @Override
    public String getTableName(String entityName) {
        //Java屬性的駱駝命名法轉換回資料庫下劃線“_”分隔的格式
        return NameUtils.getUnderlineName(entityName);
    }

    /**
     * 根據表名獲取主鍵名
     *
     * @param entityName
     * @return
     */
    @Override
    public String getPrimaryName(String entityName) {
        String underlineName = NameUtils.getUnderlineName(entityName);
        //正如前面說到的,資料庫列名統一以“_”開始,主鍵以表名加上“_id” 如user表主鍵即“_user_id”
        return PREFIX + underlineName + PRI_SUFFIX;
    }

    /**
     * 根據屬性名獲取列名
     *
     * @param fieldName
     * @return
     */
    @Override
    public String getColumnName(String fieldName) {
        String underlineName = NameUtils.getUnderlineName(fieldName);
        //資料庫列名統一以“_”開始
        return PREFIX + underlineName;
    }
}