Java框架:Hibernate操作API說明

1.獲取核心 配置文件對象,默認是加載src的hibernate.cfg.xm文件
Configuration cfg = new Configuration().configure();

  • Configuration對象就是用來加載配置文件
  • new Configuration構造方法配置加載的是hibernate.properties
  • configre()方法加載的是hibernate.cfg.xml
  • 默認情況下,上面兩種配置文件都需要放在src目錄下
  • configure(String resource)這個方法可以指定配置文件路徑

Hibernate的核心配置文件的多種形式

  1. hibernate.cfg.xml        推薦使用,配置內容豐富
  2. hibernate.properties   配置形式key/value,key不能重複;配置有侷限性;可以進入hibernate包\project\etc目錄看

加載映射文件方式

1.在hibernate.cfg.xml配置
                  <!-- 2、配置JavaBean與表的映射文件 -->
                  <mapping resource="路徑/User.hbm.xml" />
2.代碼設置調用Configuration對象addResource方法
                 
 cfg.addResource("路徑/User.hbm.xml");
3.調用Configuration對象的addClass方法
                  
cfg.addClass(User.class     javabean類名);

常見異常

  1. 重複了映射文件

 

2.創建   會話工廠 == 數據庫  連接池
SessionFactory factory = cfg.buildSessionFactory();

       

  • SessionFactory 相當於java web連接池,用於管理所有session
  • 獲得SessionFactory 方式:config.buildSessionFactory();
  • sessionFactory 還用於緩存配置信息 (數據庫配置信息、映射文件,預定義HQL語句 等)
  • SessionFactory線程安全,多個線程同時訪問時,不會出現線程併發訪問問題。
     

3.創建會話
Session session = factory.openSession();

1.factory.openSession()                獲取一個全新的session
2.factory.getCurrentSession()      獲取一個與當前線程綁定的session

  • a.要使用這個方法必須在hibernate.cfg.xml中配置<property name="hibernate.current_session_context_class">thread</property>
  • b.hibernate支持,將創建的session綁定到本地線程中,底層使用ThreadLocal,在程序之間共享session。
  • c.如果提交或者回滾事務,底層將自動關閉session

3.1開啓事務

 Transaction trans = sessoin.getTransaction();
 trans.begin();

    事務也可以在hibernate.cfg.xml配置文件中設置
        <!--  是否自動提交事務 -->
        <property name="hibernate.connection.autocommit">true</property>

3.2session.操作    

session的api(方法)

save 保存,需要提交事務

  • 執行save方法前,設置的OID將忽略;執行save方法,立即觸發insert語句,從數據庫獲得主鍵的值(OID值)
  • persist保存的對象,在保存前,不能設置id,否則會報錯

get   通過id查詢,如果沒有 null
load 通過id查詢,如果沒有拋異常

get和load方法的區別:

  • get方法是直接加載數據庫   直接操作
  • load的設計是懶加載,load方法返回的是的一個代理對象,用到時代理對象去查詢數據庫
  • load執行原理圖


update 更新

  • 方式一.通過get獲取數據,調用set方法,事務提交,自動執行update語句
  • 方式二.自己封裝User對象,設置id,這個時候,需要調用update方法
  • session.update(user);//有id會更新,update時,一定要有id
  • session.save(user);  //有id會更新
  • session.saveOrUpdate(user);//判斷user有沒有id,有id,更新數據,沒有id的插入數據

delete 刪除

  • 刪除數據兩種方式
  • 第一方式:先獲取要刪除對象,然後再調用delete方法
  • 第二方式:創建一個User,設置id,然後再調用delete方法
  • session.getTransaction().begin();
    
    //方式1
    User user = (User) session.get(User.class實體名,id);
    session.delete(user);
    
    //方式2
    User user = new User();
    user.setUid(8 要刪除的id);//
    session.delete(user);
    
    session.getTransaction().commit();

查詢對象 :三種

  • HQL:Hibernate Query Language,Hibernate查詢語言,面向對象查詢語言,最終底層要轉成面向數據庫查詢語言.
  • SQL:直接面向數據庫查詢語言

1.Query 查詢對象

Query query = session.createQuery("from User where username=? and password=?");
query.setParameter(0, "zjc");
query.setParameter(1, "123");

//執行查詢
User user = (User) query.uniqueResult();  //一條結果
System.out.println(user);
分頁查詢 limit ?,? 

//查詢對象
Query query = session.createQuery("from User");

//分頁查詢 limit?,?      【limit 3,3】
query.setFirstResult(3); //啓始位置
query.setMaxResults(3); //返回的數據條數

//返回多行數據
List<User> list = query.list();
for(User obj : list){
	System.out.println(obj);
}

2.Criteria    hibernate提供

  • QBC(query by criteria),hibernate提供純面向對象查詢語言,提供直接使用PO對象進行操作。
//創建Criteria查詢對象
Criteria criteria = session.createCriteria(User.class);

//加條件zjc,123    eq =
criteria.add(Restrictions.eq("username", "zjc"));
criteria.add(Restrictions.eq("password", "123"));
System.out.println(criteria.uniqueResult());

// 【gt 大於>】【 ge大於等於>=】【lt 小於>】【 le小於等於>=】
criteria.add(Restrictions.ge("uid", 10));

// 【模糊查詢】
criteria.add(Restrictions.like("username", "%y%"));
  • PO:persistent object ,用於與數據庫交互數據。    --dao層  (JavaBean + hbm )
    BO:Business object ,業務數據對象。                   --service層
    VO:Value Object 值對象。                                        --web層 

3.SQLQuery    原生sql查詢語言

// 創建SQLQuery查詢對象
SQLQuery query = session.createSQLQuery("select * from t_user");

// 返回數據封裝到集合,集合裝的數組
List<Object[]> list = query.list();
// 遍歷結果
for (Object[] objs : list) {
	for (Object o : objs) {
		System.out.println(o);
	}
}

3.3提交事務
trans.commit();

//trans.rollback();  
try{
   //開啓
   //session操作
   //提交
} catch(e){
   //回滾
}

4.關閉會話
session.close();

5.關閉工廠,釋放資源
factory.close();


hibernate工具類   HibernateUtils.java   (整理借用)

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {

	private static SessionFactory factory;
	static {
		// 1.獲取核心 配置文件對象
		Configuration cfg = new Configuration().configure();

		// 2.創建會話工廠
		factory = cfg.buildSessionFactory();

		// 監聽程序關閉
		Runtime.getRuntime().addShutdownHook(new Thread() {
			@Override
			public void run() {
				System.out.println("程序關閉...");
				// 關閉會話工廠
				factory.close();
			}
		});

	}

	public static Session openSession() {
		return factory.openSession();
	}

	public static Session getCurrentSession() {
		return factory.getCurrentSession();
	}

}

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章