很久都沒有使用hibernate做開發了,好多東西都有點生疏了。今天忽然想到了順便自己就復習了一下,覺得hibernate還是很方便的至少他提供了統一的分頁。開發就不會為換了數據庫而去修改大量的代碼了。
hibernate的查詢有這麼2種,一種是hql查詢,Criteria查詢。2種我覺得使用起來都比較方便
1.hql的帶參數查詢有一個小小的技巧,可以不用索引的方式
- Query q=session.createQuery("update StudentInfo set username=? where fid=?");
- q.setString(0, "劉若英");
- q.setInteger(1, 3);
上面的這個是原始的寫法,還有一種更好使的就是把問號的地方換成 :參數的名稱 ,這樣就不用怕記錯順序了。
- Query q=session.createQuery("update StudentInfo set username=:username where fid=:fid");
- q.setString("username", "劉若英");
- q.setInteger("fid", 3);
2.使用Criteria查詢數據,這種方式不需要寫hql語句,個人覺得簡單的使用這種方法也是足夠了。Restrictions帶有很多的查詢條件如or,in都有相應支持
- public void otherQuery() {
- Session session = null;
- Transaction tra = null;
- // 通過工具類取得session
- try {
- session = HibernateUtil.getSession();
- tra = session.beginTransaction();
- Criteria c=session.createCriteria(StudentInfo.class);
- //c.add(Restrictions.eq("username", "潘玮柏"));
- c.add(Restrictions.or(Restrictions.lt("fid", 5)));
- //從第一條開始查詢
- c.setFirstResult(0);
- //每次查詢10條數據
- c.setMaxResults(10);
- List<StudentInfo> all = c.list();
- //查詢單條數據
- //StudentInfo info=(StudentInfo)c.uniqueResult();
- for (StudentInfo studentInfo : all) {
- System.out.println("姓名:"+studentInfo.getUsername());
- }
- tra.commit();
-
- } catch (HibernateException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } finally {
- if (session != null) {
- session.close();
- }
- }
- }
同樣的查詢單條數據也可以使用get方法,大家可以自己試試,下面的分頁面試中經常有被問到,大家可以著重記錄依一下
- //從第一條開始查詢
- c.setFirstResult(0);
- //每次查詢10條數據
- c.setMaxResults(10);