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的條件查詢的幾種方式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.