1. 程式人生 > >hibernate學習筆記(2)------------使用criteria進行查詢

hibernate學習筆記(2)------------使用criteria進行查詢

1、讀取配置檔案獲得連線
   讀取hibernate.cfg.xml配置檔案,hibernate.cfg.xml檔案放在Classpath下,使用下面的方式讀入該檔案
      //Configuration 負責管理hibernate配置資訊
      Configuration config=new Configuration().configure();
      //根據config建立SessionFactory
      //SessionFactory用於建立Session
      SessionFactory sessionFactory=config.buildSessionFactory();
      //開啟session,相當於jdbc的Connection

      session = sessionFactory.openSession();

2、Criteria 基本資料查詢
(1)標準查詢:
      //建立查詢標準
      Criteria criteria=session.creteCriteria(User.class);
      //查詢條件
      criteria.add(Expression.eq("name","caterpillar"));
************************************************************************************
Expression.eq(String s1,String s2)---------->相等s1=s2
Expression.allEq(Map map)    --------------->多個屬性-值對應關係,多個Expression.eq疊加
Expression.gt(String s1,String s2)----------->大於s1>s2
Expression.ge(String s1,String s2)----------->大於等於s1>=s2
Expression.lt(String s1,String s2)------------>小於s1<s2
Expression.le(String s1,String s2)------------>小於等於s1<=s2
Expression.between(String s1,int s2,int s3)--->s2<s1<s3
Expression.like(String s1,String s2)------------>s1 like s2
比較2個屬性
Expression.eqProperty(String s1,String s2)--->s1=s2
Expression.gtProperty(String s1,String s2)---->s1>s2
Expression.geProperty(String s1,String s2)---->s1>=s2
Expression.ltProperty(String s1,String s2)----->s1<s2
Expression.leProperty(String s1,String s2)----->s1<=s2
Expression.and()----->Expression.and(Expression.eq("String s1,String s2"),Expression.eq(String s3,String s4))
Expression.or()
************************************************************************************
(2)高階查詢
一、可以使用Criteria進行查詢,並用order對結果進行排序。
//設定從第幾條開始取的記錄
criteria.setFirstResult(100);
//最多取的幾條記錄
criteria.setMaxResults(20);
//對結果進行排序
criteria.addOrder(Order.asc(String s1));
criteria.addOrder(Order.desc(String s2));

二、可以對查詢結果進行統計操作,使用Projections的rowCount(),count(),max(),min
(),countDistinct()等方法:
例如:criteria.setProjection(Projections.max("age"));

三、還可以用Projections的groupProperty()來對結果進行分組
例如:criteria.setProjection(Projections.groupProperty("age"));

(***)四、結合統計與分組的功能,可以用ProjectionList
例如:ProjectionList projectionList =Projections.projectionList();
            projectionList.add(Projections.groupProperty("age"));
            projectionList.add(Projections.rowCount());
            criteria.setProjection(projectionList);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      //查詢所有記錄
      List users=criteria.list();
      Iterator iterator=users.iterator();
      while(iterator.hasNext()){
         User user=(User)iterator.next();
         System.out.println(user.getId()+"\t"+user.getName()+"/"+user.getAge());
}
3、criteria的增、刪、改(還不完善)
在用到增、刪、改時,必須先宣告事務
增加:
  Transaction tx = session.beginTransaction();//Transaction表示一組會話操作
  session.save(user);//將事物對映到資料庫進行儲存
  tx.commit();
  session.close();
刪除:
  Session session=this.getSession();
  User user=(User)session.get(User.class, new Integer(1));
  Transaction tx = session.beginTransaction();//Transaction表示一組會話操作
  session.delete(user);//將事物對映到資料庫進行儲存
  tx.commit();
  session.close();

修改:
  Session session=this.getSession();
  User user =(User)session.get(User.class,new Integer(2));//建立持久化的事物
  user.setName("wyqqqqqqqqqq");
  user.setAge(new Integer(30));
  Transaction tx = session.beginTransaction();//Transaction表示一組會話操作
  session.update(user);//將事物對映到資料庫進行儲存
  tx.commit();
  session.close();