、Hibernate中Query的API:
1 基本API: Query query = session.createQuery("hql"); query.setXXX(); query.list(); query.iterate(); query.uniqueResult();執行單個對象的查詢
2 分頁查詢方法: Query query = session.createQuery("hql"); query.setFirstResult(1); qurey.setMaxResult(3); query.list(); 注意:query分頁結果集result從0開始。 3 BulkUpdate 批量更新: Query query = session.createQuery("hql"); query.executeUpdate(); 例如:
Query qurey = session.createQuery ("update Employee as e set e.name = 'xiaohei' "); query.executeUpdate(); Query query = session.createQuery("delete from Employee as e where e.id = 1 "); query.executeUpdate(); BulkUpdate批量更新的特點: 1、不操作緩存 2、不涉及級聯操作 3、不維護樂觀鎖
4 命名query (NameQuery): a在 xxx.hbm.xml中加入: <query name=""> <!CDATA[ HQL ]]> </query> b java中(DAO層)通過name獲取HQl,並執行: Query query = session.getNamedQuery(); 5 SQL Query直接寫sql語句(類似jdbc中的操作): SQLQuery query = session.createSQLQuery("sql");
qurey.addEntity(類.class); qurey.addEntity(“表別名”,類.class); query.list();
Hibernate鎖機制
A樂觀鎖: 對多用戶併發訪問持有樂觀的態度。 開發步驟: 1實體對象(entity)中加入版本屬性; 2數據庫表(table)中加入版本列; 3 xxx.hbm.xml中加入<version />標籤。
B悲觀鎖: 對多用戶併發訪問持有悲觀觀的態度。 數據庫中鎖得實現: 1數據庫中查詢操作加鎖:select * from t_account for update; 2數據庫中插入等操作加鎖insert update delete db默認加鎖。 Hibernate中鎖的實現: 查詢操作加鎖(設置鎖模式): Account account =(Account) session.get(Account.class, 111,LockMode.UPGRADE); Account account1 =(Account) session.load(Account.class, 111,LockMode.UPGRADE); Query query = session.createQuery("from Account as a where a.id = 111 "); query.setLockMode("a", LockMode.UPGRADE); Account account = (Account)query.uniqueResult(); Hibernate鎖模式: LockMode.UPGRADE:
如果別的用戶先於我爲數據庫加鎖,等待用戶釋放鎖後,在加鎖。 LockMode.UPGRADE_NOWAIT: 如果別的用戶先於我爲數據庫加鎖,放棄操作,並拋出異常。