Jfinal學(xué)習(xí)筆記-DB與Model

Jfinal學(xué)習(xí)筆記

DB 類:

1、DB類是對數(shù)據(jù)庫進(jìn)行豐富sql操作的工具類。

2、DB類中的方法都是調(diào)用配置好 config 屬性的 DbPro 類中的方法。

3、DB類中 query、queryFirst、queryXXX方法都是查詢數(shù)據(jù)庫表值,返回具體一列數(shù)據(jù)或者某一類型的數(shù)據(jù)。query 和queryFirst使用泛型接收,queryXXX使用方法對應(yīng)數(shù)據(jù)類型接收,適用于聚合函數(shù)。在DbPro的實現(xiàn)中最終調(diào)用的都是queryColumn方法,而queryColumn方法最終調(diào)用的是query方法。

public <T> List<T> query(String sql, Object... paras)

4、DB類中 find、findFirst、findXXX方法都是查詢數(shù)據(jù)庫映射對象,將返回值一律封裝到 Record 對象中,返回具體一個或一列 Record對象值。在DbPro的實現(xiàn)中最終調(diào)用的都是find方法。

List<Record> find(Config config, Connection conn, String sql, Object... paras) throws SQLException {
   PreparedStatement pst = conn.prepareStatement(sql);
   config.dialect.fillStatement(pst, paras);
   ResultSet rs = pst.executeQuery();
   List<Record> result = config.dialect.buildRecordList(config, rs);  // RecordBuilder.build(config, rs);
   DbKit.close(rs, pst);
   return result;
}

5、DB類中 paginate 方法是查詢多列數(shù)據(jù)分頁使用,在DbPro中實現(xiàn)最用使用 doPaginateByFullSql 方法。

Model 類:

1、Model 類是用于被具體映射對象集成的抽象類。

2、通過集成 Model類建立起對象到數(shù)據(jù)庫的映射,可以通過 Model類中的 dao方法可以創(chuàng)建當(dāng)前映射的操作對象,用于更加方便的操作數(shù)據(jù)庫。
private static User dao = new User().dao();

3、Model類中 findXXX 系列方法是查詢具體一個或一組映射對象的方法,通過傳入類似 id 的數(shù)據(jù)庫列表參數(shù)或者 sql 語句獲取映射對象。這些方法最終都是通過構(gòu)建 sql語句 調(diào)用 find 方法實現(xiàn)功能。

private List<M> find(Config config, Connection conn, String sql, Object... paras) throws Exception {
   PreparedStatement pst = conn.prepareStatement(sql);
   config.dialect.fillStatement(pst, paras);
   ResultSet rs = pst.executeQuery();
   List<M> result = config.dialect.buildModelList(rs, _getUsefulClass()); // ModelBuilder.build(rs, getUsefulClass());
   DbKit.close(rs, pst);
   return result;
}

4、Model 類中 getXXX 系列方法查詢具體映射對象中具體屬性的值,根方法返回值類型的不同適用于不同類型的屬性。此系列方法中取用的是 Model類中定義為 Map類型的 attrs 屬性。此屬性在 find方法中的 config.dialect.buildModelList 代碼中通過 Dialect 調(diào)用 ModelBuilder 類的 build 方法,build方法通過查詢結(jié)構(gòu)構(gòu)建了映射對象,并在中填充了 attrs 屬性。

public <T> List<T> build(ResultSet rs, Class<? extends Model> modelClass) throws SQLException, ReflectiveOperationException 

DB 與 Model 比較:

相同點:
1、兩者都提供了增刪改查的數(shù)據(jù)庫操作功能,兩者查詢相關(guān)功能最終都是通過 sql 查詢操作。
2、兩者都具有查詢映射對象、查詢屬性、分頁查詢、緩存查詢功能。
3、在 findXXX系列的方法中通過 ModelBuilder類和 RecordBuilder類 中的 build方法將查詢結(jié)構(gòu)構(gòu)建成映射對象,DB構(gòu)建成 Record通用的映射對象,Model構(gòu)建成了具體集成此類的映射對象。在查詢中最終基本是構(gòu)建查詢sql、執(zhí)行sql獲取結(jié)果集、構(gòu)建映射對象結(jié)果集同一套流程。

不同點:
1、DB 在使用中面向數(shù)據(jù)庫,通過 sql 進(jìn)行簡單靈活的數(shù)據(jù)操作。Model 在使用中面向映射對象,直接操作對象進(jìn)行更豐富和復(fù)雜的操作。
2、DB 中查詢方法返回單個類型值或者 Record 類型,Model 中查詢方法返回單個類型值或者繼承此類的對象類型。
3、DB 比 Model 中多了批量處理的一系列方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容