簡介:
Hibernate 不僅僅管理Java類到資料庫表的映射(包括Java資料類型到SQL資料類型的映射),還提供資料查詢和擷取資料的方法,可以大幅度減少開發時人工使用SQL和JDBC處理資料的時間。
快速配置
(1)導包
Hibernate5.x 基本開發 部分包在下載下傳的hibernate/lib/required 中(要全導)
Hibernate5.x 基本開發 下面幾個包無或出現錯誤
(2)總src目錄
Hibernate5.x 基本開發 (3)User.java(開發持久化類,可由POJP+持久化注解組成)
Hibernate5.x 基本開發 運用注解可以不用下面的User.hbm.xml,而上面User.java隻是POJO
(4)hibernate.cfg.xml
Hibernate5.x 基本開發 (5)User.hbm.xml
Hibernate5.x 基本開發 (6)HibernateDemo.java
Hibernate5.x 基本開發 可以寫個工具類來友善初始化session
(7)成功效果圖
Hibernate5.x 基本開發 詳解過程(對應HibernateDemo.java)
為了使用Hibernate進行持久化操作,通常有如下操作步驟。
①開發持久類
②擷取Configuration
Hibernate5.x 基本開發 ③擷取SessionFactory
Hibernate5.x 基本開發 ④擷取Session,打開事務
Hibernate5.x 基本開發 ⑤用面向對象的方式操作資料庫
⑥關閉事務,關閉session
Hibernate5.x 基本開發 PO與Session的關聯關系,PO可有如下三種狀态:
(1)瞬态:如果PO執行個體從未與Session關聯過,該PO執行個體處于瞬态狀态
Hibernate5.x 基本開發 (2)持久化:如果PO執行個體與Session關聯起來,且該執行個體對應到資料庫記錄,則該執行個體處于持久化狀态。
Hibernate5.x 基本開發 (3)脫管:如果PO執行個體曾經與Session關聯過,但因為Session的關閉等原因,PO執行個體脫離了Session的管理,這種狀态被稱為脫管狀态。
Hibernate5.x 基本開發
Hibernate5.x 基本開發
Hibernate5.x 基本開發
Hibernate5.x 基本開發 HibernateUtils
//這個項目是使用這個的(但會提示過時了,對于Hibernate5.x)
package utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* Created by Donald on 2016/11/5.
*/
public class HibernateUtils
private static final Configuration cfg;
private static final SessionFactory sessionFactory;
//靜态代碼塊實作
static{
//加載核心配置檔案
cfg = new Configuration().configure();
sessionFactory = cfg.buildSessionFactory();
}
//提供傳回本地線程綁的session的方法
public static Session getSessionObject(){
return sessionFactory.getCurrentSession();
}
//提供方法傳回sessionFactory
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
public static void main(String[] args) {
}
}
這個是做大作業時候寫的(可使用于Hibernate5.X,不提示過時)
//隻寫了部分,其他參照即可
package utils;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
final public class HibernateUtil
private static SessionFactory sessinotallow=null;
private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();
private HibernateUtil(){};
static {
sessinotallow=new Configuration().configure().buildSessionFactory();
}
public static Session openSession(){
return sessionFactory.openSession();
}
public static Session getCurrentSession(){
Session sessinotallow=threadLocal.get();
if(sessinotallow==null){
sessinotallow=sessionFactory.openSession();
threadLocal.set(session);
}
return session;
}
public static void closeCurrentSession(){
Session s=getCurrentSession();
if(s!=null&& s.isOpen() ){
s.close();
threadLocal.set(null);
}
}
/**
* 查找單一
* @param hql
* @param parameters
* @return
public static Object uniqueQuery(String hql,String [] parameters){
Session s = null;
Object obj = null;
try {
s = openSession();
Query query = s.createQuery(hql);
//先判斷是否有參數要綁定
if(parameters != null && parameters.length > 0){
for(int i=0 ; i < parameters.length; i++){
query.setParameter(i, parameters[i]);
}
}
/**
* 若使用query.getSingleResult()
* 如果查詢到的object為null 則會直接異常
*/
obj = query.uniqueResult();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{
if(s!=null&&s.isOpen()){
s.close();
}
}
return obj;
}
public static List executeQuery(String hql,String [] parameters){
Session s = null;
List list = null;
try {
s = openSession();
Query query = s.createQuery(hql);
//先判斷是否有參數要綁定
if(parameters!=null&& parameters.length>0){
for(int i=0;i<parameters.length;i++){
query.setParameter(i, parameters[i]);
}
}
list = query.list();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
// TODO: handle exception
}finally{
if(s!=null&&s.isOpen()){
s.close();
}
}
return