Hibernate 查詢數據庫中的數據


1.Criteria介紹

Criteria與Session綁定,其生命周期跟隨着Session結束而結束,使用Criteria時進行查詢時,每次都要於執行時期動態建立物件,並加入各種查詢條件,隨着Session的回收,Criteria也跟着回收。

org.hibernate.Criteria實際上是個條件附加的容器,如果想要設定查詢條件,則要使用org.hibernate.criterion.Restrictions的各種靜態方法傳回org.hibernate.criterion.Criteria實例,傳回的每個org.hibernate.criterion.Criteria實例代表着一個條件。

2.Criterion介紹

Criterion 是 Criteria 的查詢條件。Criteria 提供了 add(Criterion criterion) 方法來添加查詢條件。Criterion 的實例可以通過 Restrictions 工具類來創建,Restrictions 提供了大量的靜態方法,如 eq (等於)、 ge (大於等於)、 between 等來方法的創建 Criterion 查詢條件。除此之外, Restrictions 還提供了方法來創建 conjunction 和disjunction 實例,通過往該實例的 add(Criteria) 方法來增加查詢條件形成一個查詢條件集合。

3.Restrictions的幾個常用限定查詢方法如下表所示:

Restrictions.eq --> equal,等於.

Restrictions.allEq --> 參數為Map對象,使用key/value進行多個等於的比對,相當於多個Restrictions.eq 的效果

Restrictions.gt --> great-than > 大於

Restrictions.ge --> great-equal >= 大於等於

Restrictions.lt --> less-than, < 小於

Restrictions.le --> less-equal <= 小於等於

Restrictions.between --> 對應SQL的between子句

Restrictions.like --> 對應SQL的LIKE子句

Restrictions.in --> 對應SQL的in子句

Restrictions.and --> and 關系

Restrictions.or --> or 關系

Restrictions.isNull --> 判斷屬性是否為空,為空則返回true  相當於SQL的 is null

Restrictions.isNotNull --> 與isNull相反     相當於SQL的 is not null

Restrictions.sqlRestriction --> SQL限定的查詢

Order.asc --> 根據傳入的字段進行升序排序

Order.desc --> 根據傳入的字段進行降序排序

MatchMode.EXACT --> 字符串精確匹配.相當於"like 'value'"

MatchMode.ANYWHERE --> 字符串在中間匹配.相當於"like '%value%'"

MatchMode.START --> 字符串在最前面的位置.相當於"like 'value%'"

MatchMode.END --> 字符串在最后面的位置.相當於"like '%value'"

4.實例應用

(1)多個條件("與"的方式進行查詢)

//利用hibernate對數據庫中的StudentEntity表進行查詢,將查詢結果放入一個集合返回
    public static List<StudentEntity> queryStudentByUserInput(String studentname, String realAddress, String riskrank){
        //1.創建一個session對象
        Session session1=HibernateTools.getSession();
        //2.通過session的createCriteria創建一個Criteria 對象
        Criteria criteria=session1.createCriteria(StudentEntity.class);
        //3. Criteria.add 增加約束(連續加入兩個條件,達到"與"的效果),Restrictions.like()方法中的參數1為數據庫表的實體類的成員變量,參數2為篩選內容,參數3為匹配方式
        criteria.add(Restrictions.like("name",studentname,MatchMode.ANYWHERE))
        .add(Restrictions.like("address","天",MatchMode.ANYWHERE));
        //4.調用list()方法返回查詢結果的集合
        List<StudentEntity> studentinfolist=criteria.list();
        //開啟一個新的事務Transaction
        session1.beginTransaction();
        //提交事務,此處才是真正與數據庫交互的語句
        session1.getTransaction().commit();
        HibernateTools.closeSession();
        return studentinfolist;
    }

(2)多個條件("或"的方式進行查詢)

//利用hibernate對數據庫中的StudentEntity表進行查詢,將查詢結果放入一個集合返回
    public static List<StudentEntity> queryStudentByUserInput(String studentname, String realAddress, String riskrank){
        //1.創建一個session對象
        Session session1=HibernateTools.getSession();
        //2.通過session的createCriteria創建一個Criteria 對象
        Criteria criteria=session1.createCriteria(StudentEntity.class);
        //3. Criteria.add 增加約束(連續加入兩個條件,達到"或"的效果)[篩選條件為:name屬性中有"l"的,或address屬性中有"天"或"金"]
        criteria.add(Restrictions.or(Restrictions.like("name", "l",MatchMode.ANYWHERE),
                Restrictions.or(Restrictions.like("address", "天",MatchMode.ANYWHERE),Restrictions.like("address", "金",MatchMode.ANYWHERE))));
        //4.調用list()方法返回查詢結果的集合
        List<StudentEntity> studentinfolist=criteria.list();
        //開啟一個新的事務Transaction
        session1.beginTransaction();
        //提交事務,此處才是真正與數據庫交互的語句
        session1.getTransaction().commit();
        HibernateTools.closeSession();
        return studentinfolist;
    }

 參考文獻:https://my.oschina.net/u/2266102/blog/425601(極具參考價值)


免責聲明!

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



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