Hibernate的條件查詢的幾種方式+查詢所有的記錄
阿新 • • 發佈:2018-04-21
數據庫 rop query 寫法 OS 由於 AC 對象 tst
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):指定一次最多查詢的對象數量。
Hibernate的條件查詢的幾種方式+查詢所有的記錄