Jfinal中Db類的的使用


Jfinal提供了兩種操作數據庫的組件,分別是Model類和DB類,可以極大地減少代碼量,提高開發效率。

Db類提供了在Model類之外更豐富的的數據庫操作能力,使用Db類以及嵌套的Record類時,無需對數據庫表進行映射,Record類相當於一個通用的Model。

以下為Db+Record的常見用法:

什么時候選擇用Db類?

1. 沒有創建 Model,不得不使用

2. 由於Active Record 限制一個model對象對應一條記錄,當需要批量操作表中的記錄時需要使用Db + Record,例如,需要對 account 表中的 cash 字段統一加上 100 塊錢:Db.update("update account set cash=cash+100"),這種情況下 Model 只能一條一條地處理數據,而 Db 可以利用 sql 去批量處理

3. 在某些非常需要高度靈活性、通用性的系統之下使用 Db.find(...),例如做一個報表系統,其中絕大部分業務都是跨多表的聯合查詢的數據展現,用 Db.find(sql) 更加方便,以及擁有更大自由度。比如:

1 List<A> list = A.dao.find("select A.a,B.b from A  left join (select a,b from B) B on A.a = B.a")

這個時候如果需要對list中的數據進行處理,list.get(index).get("b")將會出錯,因為list初始化是A類型的,而實體類A即數據庫A中沒有字段b。

這個時候采用Db類:

1 List<Record> list = Db.use(configname).find("select A.a,B.b from A  left join (select a,b from B) B on A.a = B.a")

4. 在一些刪除、更新語句使用的時候,比如:

 a. Model類在執行刪除語句的時候可以使用deleteById()方法,該方法的使用需要數據庫字段具有主鍵(當然,好的數據庫設計每張表都具有一個主鍵)。如果沒有主鍵,Model方法執行刪除語句就無法進行了。當然我們可能會想到利用model.dao.find(sql)方法去執行delete操作,這樣是不可以的。這個時候可以使用Db類的update方法:

1 Db.use("User").update("delete from tablename where para = ?", para);

 "User"是數據庫配置configname:

public static final String CONFIG_NAME = "User";

   b.批量插入、更新、刪除時,可以使用Db類的batch方法:

public static int[] batch(java.lang.String sql,
          java.lang.String columns,
          java.util.List modelOrRecordList,
          int batchSize)
  • sql 參數是指 insert into 或者 update 語句,動態參數使用問號占位,例如:String sql = "insert into user(name, cash) values(?, ?)";上面這個 sql 其中要插入   name、cash 兩個字段,而 values 中用了兩個問號,這兩個問號中的值從后續的 modelOrRecordList 中獲取
  • columns 是指前面 sql 中問號占位的地方的參數名稱,jfinal 在填充字段值的時候會根據這個名稱去 modelOrRecordList 中去取數據
  • modelOrRecordList 是指 List < User > 或者 List < Record> 或者這種列表
  • batchSize 是指多少條數據寫一次數據庫
1 Db.use("User").batch("delete from tablename where para = ?",  new Object[][] {{para}}, 1);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM