Hibernate的條件查詢的幾種方式

1、  第一種,用?佔位符,如:
//登錄(用?佔位符)
 public List<UserPO> LoginUser(UserPO up)throws Exception{
  Session session = HibernateSessionFactory.getSession();
  String hql = "from UserPO where name = ? and pwd= ?";
  Query query = session.createQuery(hql);
  query.setString(0, up.getName());
  query.setString(1, up.getPwd());
  List<UserPO> list = query.list();
  session.close();
  return list;
 }

2、用“:+命名”佔位符,如:
//登錄(用":命名"佔位符)
 public List<UserPO> LoginUser2(UserPO up)throws Exception{
  Session session = HibernateSessionFactory.getSession();
  String hql = "from UserPO where name = :n and pwd= :p";
  Query query = session.createQuery(hql);
  query.setString("n", up.getName());
  query.setString("p", up.getPwd());
  List<UserPO> list = query.list();
  session.close();
  return list;
 }
 
2.1、使用這種佔位符還可以這樣設值,如:
 
//登錄(用":命名"佔位符,用setParameter設值)
 public List<UserPO> LoginUser3(UserPO up)throws Exception{
  Session session = HibernateSessionFactory.getSession();
  String hql = "from UserPO where name = :n and pwd= :p";
  Query query = session.createQuery(hql);
  query.setParameter("n", up.getName());
  query.setParameter("p",up.getPwd());
  List<UserPO> list = query.list();
  session.close();
  return list;
 }
   使用這種方式不需要寫明映射的類型,Hibernate會通過配置自動給我們轉,但是由於Hibernate有兩種日期格式:Date和TIMESTAMP,所以對於日期類型必須寫明映射的類型。寫法: 
 
3、按照對象進行參數綁定,如:
 
 //登錄(用":命名"佔位符,用setProperties設值,命名參數必須要與被綁定的屬性名相同)
 public List<UserPO> LoginUser4(UserPO up)throws Exception{
  Session session = HibernateSessionFactory.getSession();
  String hql = "from UserPO where name = :name and pwd= :pwd";
  Query query = session.createQuery(hql);
  query.setProperties(up);
  List<UserPO> list = query.list();
  session.close();
  return list;
 }
4、使用條件查詢(Criteria),如:


 //登錄(用條件查詢 Criteria)完全脫離sql語句和hql語句
 public List<UserPO> LoginUser5(UserPO up)throws Exception{
  Session session = HibernateSessionFactory.getSession();
  Criteria cri = session.createCriteria(UserPO.class);
  cri.add(Restrictions.eq("name", up.getName()));
  cri.add(Restrictions.eq("pwd", up.getPwd()));
  List<UserPO> list = cri.list();
  session.close();
  return list;
 }
 
 
5、離線條件查詢,如:
//登錄(用離線條件查詢 DetachedCriteria)
 public List<UserPO> LoginUser6(UserPO up)throws Exception{
  Session session = HibernateSessionFactory.getSession();
  DetachedCriteria dc = DetachedCriteria.forClass(UserPO.class);
  dc.add(Restrictions.eq("name", up.getName()));
  dc.add(Restrictions.eq("pwd", up.getPwd()));
  Criteria cri = dc.getExecutableCriteria(session);
  List<UserPO> list = cri.list();
  session.close();
  return list;
 }
 使用離線可以將其寫在業務層,以參數的形式傳入,以減少DAO的代碼。
6、分頁查詢:分頁查詢是數據庫應用中的處理方式,query和criteria接口都提供了用於分頁查詢的方法:
1)  setFirstResult(int):指定從哪一個對象開始查詢,參數是索引位置,從0開始。
2)  setMaxResult(int):指定一次最多查詢的對象數量。

發佈了15 篇原創文章 · 獲贊 20 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章