一、HibernateUtils.class
public class HibernateUtils {
public static final Configuration cfg;
public static final SessionFactory sf;
static{
cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
}
public static Session openSession(){
return sf.openSession();
}
/*用了此方法,session不用關閉,getCurrentSession是線程實現*/
public static Session getCurrentSession(){
return sf.getCurrentSession();
}
}
二、增(save)、刪(delete)、改(update)、查(get、load)、保存更新(saveOrUpdate)等操作。
固定形式:
Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); /*要執行的操作*/ tx.commit(); session.close();
例如:插入一條記錄。
public void demo(){
/*session不是線程安全,不能設置它爲全局對象*/
Session session = HibernateUtils.openSession();//獲取Session對象
Transaction tx = session.beginTransaction();//開啓事務
Customer customer = new Customer();
customer.setCust_name("小明");
Serializable id = session.save(customer);
tx.commit();
session.close();
}
三、hibernate 利用Query Criteria 實現簡單查詢、條件查詢、分頁查詢
注:這裏面所用查詢的SQL是屬於Hibernate面對象的查詢語句,如要實現更爲複雜的查詢應使用SQLQuery
a. Query 使用Query對象,不需要寫sql語句,但是要寫hql語句
b. Criteria 使用這個對象查詢操作不需要寫查詢語句,直接調用方法就可以實現
c. SQLQuery 查詢使用SQLQuery時候,調用底層sql實現
注 :hql和sql語句的區別
-使用sql語句是操作數據庫表和字段的
-使用hql語句是操作實體類和屬性的
1、Query
public void demo(){
/*.getCurrentSession()方法要配置當前事務綁定session*/
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
/*hibernate 原生SQL語句查詢
* from tableName 查詢表中所有的數據 簡單查詢
*
* from Customer where cust_name like ? 按條件查詢
*
* 分頁查詢 下面的兩個方法相當於mysql中的limit指令
* query.setFirstResult(0);
* query.setMaxResults(2);
* */
/*String hql = "from Customer where cust_name like ?";
Query query = session.createQuery(hql);
query.setParameter(0,"小%");*/
String hql = "from Customer";
Query query = session.createQuery(hql);
/*分頁查詢*/
query.setFirstResult(0);
query.setMaxResults(2);
List<Customer> list = query.list();
for(Customer customer:list){
System.out.println(customer);
}
tx.commit();
}
2、Criteria
public void demo(){
/*.getCurrentSession()方法要配置當前事務綁定session*/
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
/*
* 簡單查詢
Criteria criteria = session.createCriteria(Customer.class);*/
/*條件查詢*/
/*Criteria criteria = session.createCriteria(Customer.class);
criteria.add(Restrictions.like("cust_name","王%"));*/
/*分頁查詢*/
Criteria criteria = session.createCriteria(Customer.class);
criteria.setFirstResult(0);
criteria.setMaxResults(2);
List<Customer> list = criteria.list();
for(Customer customer:list){
System.out.println(customer);
}
tx.commit();
}