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):指定一次最多查詢的對象數量。

 

查詢所有記錄:

 

/**
  * 查詢所有的記錄
  */
 public static List selectAll() {
  List list = null;
  try {
   session = HibernateSessionFactory.getSession();
   Transaction tran = session.beginTransaction();
   Query q = session.createQuery("from User1");
   list = q.list();
   tran.commit();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   HibernateSessionFactory.closeSession();
  }
  return list;
 } 

 


免責聲明!

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



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