JDK 5引入的enum類型不僅是枚舉常量,更是功能完整的類,可實現介面、擁有方法與字段。善用此特性,可構建類型安全、可維護的數據庫映射層。
public enum UserUser {
username, // 對應user_name字段
id // 對應id字段
}
// 構建SQL
String sql = "SELECT * FROM " + UserUser.class.getSimpleName()
+ " WHERE " + UserUser.username + " = 'aksdkk'";
public interface IDbTable {
String getInsertSQL();
String idGenerator();
Enum> getIdCol();
}
public enum SqlType { STRING, INTEGER, DATE, ... }
public enum UserUser implements IDbTable {
username {
@Override public String toString() { return "User_Name"; }
@Override public SqlType getSqlType() { return SqlType.STRING; }
},
id {
@Override public SqlType getSqlType() { return SqlType.STRING; }
};
// 抽象方法強制實現
public abstract SqlType getSqlType();
// 靜態方法訪問枚舉實例
public static UserUser getIdCol() { return id; }
public static String idGenerator() { return "uuid()"; }
public static String getInsertSQL() {
return "INSERT INTO " + UserUser.class.getSimpleName()
+ " (" + id + "," + username + ") VALUES (" + idGenerator() + ",?)";
}
}
toString(),全局生效getInsertSQL()等方法減少手寫SQL錯誤輕量級項目中,枚舉映射避免了ORM框架的學習成本與配置開銷,適合:
@Column註解整合JPA元數據ResultSetMapper自動映射查詢結果PreparedStatement參數綁定防注入這種模式將「數據庫結構」升級為「編程語言結構」,充分發揮Java靜態類型優勢。