Hibernate 框架的查詢方法
除了通過 session.get() 方法進行查詢外,Hibernate 框架還提供了其他的查詢方式
Query 查詢對象
query 查詢對象可以通過設置查詢條件進行查詢,使用 HQL 語言(Hibernate Query Language),是 Hibernate 的面向對象查詢語言,最終底層要轉成面向數據庫查詢語言
//1.查詢所有用戶
Query query = session.createQuery("From User");
//2.查詢符合條件得用戶【username 和 password 是 User 對象得屬性,而不是表的字段名】
Query query = session.createQuery("From User where username = ? and password = ?");
query.setParameter(0, "lmh");
query.setParameter(1, "123");
//3.分頁查詢
Query query = session.creatQuery("From User");
query.setMaxResults(3);
query.setFirstResult(3);
Criteria 查詢對象
QBC(query by criteria),是 hibernate 提供純面向對象查詢得語言,提供直接使用 PO 對象進行操作
PO:persistent object,用於與數據庫交互數據——dao 層(JavaBean + hbm)
BO:business object,業務數據對象——service 層
VO:value object 值對象——web 層
//Criteria:hibernate 獨創的查詢對象,全程無 hql 語言
Criteria criteria = session.createCriteria(User.class);
//等於 =
criteria.add(Restriction.eq("lmh", "123"));
//like
criteria.add(Restriction.like("lmh", "%123%"));
//..........
SQLQuery 查詢對象
SQLQuery:使用原生的 SQL 語句查詢
並不是所有的 sql 都能轉成 hql
SQLQuery query = session.createSQLQuery("select * from t_user");
文件邏輯優化
使用工具類
將重複代碼封裝進工具類中
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static SessionFactory sf;
static{
//1.加載配置
Configuration cfg = new Configuration().configure();
//2.創建一個sessionFactory
sf = cfg.buildSessionFactory();
//3.在虛擬機關閉時,釋放SessionFactory
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run() {
sf.close();
System.out.println("釋放資源");
}
});
}
public static Session openSession(){
return sf.openSession();
}
public static Session getCurrentSession(){
return sf.getCurrentSession();
}
}