剛剛看了一篇關(guān)于IBM的pureQuery的介紹。
結(jié)合工作中的實際情況。忽然發(fā)現(xiàn),大部分的模塊都會有查詢功能。盡管很多項目都使用了hibernate,但是,查詢結(jié)果頁面上的數(shù)據(jù)一般都不會是單純某個hibernate entity object所具備的,很多都是幾張表的數(shù)據(jù)湊起來的。要是再加上分頁要求的話,使用HQL查詢似乎有困難。使用純SQL,JDBC查詢的話相對簡單,但是,每個地方都會編寫幾乎雷同的代碼。而這種情況出現(xiàn)多次的話,大家都會去COPY,PASTE。很快,各種小問題就跟著來了。
所以,寫一個實現(xiàn)如標題的小工具應(yīng)該很有實用性。
public class SQLResults2POJOUtil {
public SQLResults2POJOUtil (java.sql.Connection queryConnection) {
...
}
public List query(String sql, Object[] params, Class pojoClass) throws java.sql.SQLException {
/* 第一步:執(zhí)行SQL查詢,得到結(jié)果集。
* 第二步:將結(jié)果集中的每個column的name和pojoClass中的相關(guān)屬性的set方法關(guān)聯(lián)起來。
* 第三步:遍歷結(jié)果集的每個數(shù)據(jù),設(shè)置到pojoClass的實例。
* 最后:返回pojoClass集合。
* 這里面有2個關(guān)鍵點,第一是column name和屬性名稱匹配時要忽略大小寫,忽略下劃線
* 第二點是實際設(shè)置pojoClass實例的值時還要記得類型轉(zhuǎn)換(常規(guī)轉(zhuǎn)化就那么幾種,可以考慮建立轉(zhuǎn)化注冊機制,方便實際使用中特殊類型轉(zhuǎn)化的擴展需要)。
*/
}
public List query(String sql, Class pojoClass) throws java.sql.SQLException {
return (query(sql, null, pojoClass));
}
}
結(jié)合工作中的實際情況。忽然發(fā)現(xiàn),大部分的模塊都會有查詢功能。盡管很多項目都使用了hibernate,但是,查詢結(jié)果頁面上的數(shù)據(jù)一般都不會是單純某個hibernate entity object所具備的,很多都是幾張表的數(shù)據(jù)湊起來的。要是再加上分頁要求的話,使用HQL查詢似乎有困難。使用純SQL,JDBC查詢的話相對簡單,但是,每個地方都會編寫幾乎雷同的代碼。而這種情況出現(xiàn)多次的話,大家都會去COPY,PASTE。很快,各種小問題就跟著來了。
所以,寫一個實現(xiàn)如標題的小工具應(yīng)該很有實用性。
public class SQLResults2POJOUtil {
public SQLResults2POJOUtil (java.sql.Connection queryConnection) {
...
}
public List query(String sql, Object[] params, Class pojoClass) throws java.sql.SQLException {
/* 第一步:執(zhí)行SQL查詢,得到結(jié)果集。
* 第二步:將結(jié)果集中的每個column的name和pojoClass中的相關(guān)屬性的set方法關(guān)聯(lián)起來。
* 第三步:遍歷結(jié)果集的每個數(shù)據(jù),設(shè)置到pojoClass的實例。
* 最后:返回pojoClass集合。
* 這里面有2個關(guān)鍵點,第一是column name和屬性名稱匹配時要忽略大小寫,忽略下劃線
* 第二點是實際設(shè)置pojoClass實例的值時還要記得類型轉(zhuǎn)換(常規(guī)轉(zhuǎn)化就那么幾種,可以考慮建立轉(zhuǎn)化注冊機制,方便實際使用中特殊類型轉(zhuǎn)化的擴展需要)。
*/
}
public List query(String sql, Class pojoClass) throws java.sql.SQLException {
return (query(sql, null, pojoClass));
}
}