~~~
package cn.b_api;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import domain.Customer;
//學習Session對象
//session對象功能: 表達hibernate框架與數據庫之間的連接(會話).session類似于
// JDBC年代的connection對象. 還可以完成對數據庫中數據的增刪改查操作.
// session是hibernate操作數據庫的核心對象
public class Demo3 {
@Test
//事務操作
public void fun1(){
//1 創建,調用空參構造
Configuration conf = new Configuration().configure();
//2 根據配置信息,創建 SessionFactory對象
SessionFactory sf = conf.buildSessionFactory();
//3 獲得session
Session session = sf.openSession();
//4 session獲得操作事務的Transaction對象
//獲得操作事務的tx對象
//Transaction tx = session.getTransaction();
//開啟事務并獲得操作事務的tx對象(建議使用)
Transaction tx2 = session.beginTransaction();
//----------------------------------------------
//----------------------------------------------
tx2.commit();//提交事務
tx2.rollback();//回滾事務
session.close();//釋放資源
sf.close();//釋放資源
}
@Test
//session的新增
public void fun2(){
//1 創建,調用空參構造
Configuration conf = new Configuration().configure();
//2 根據配置信息,創建 SessionFactory對象
SessionFactory sf = conf.buildSessionFactory();
//3 獲得session
Session session = sf.openSession();
//4 session獲得操作事務的Transaction對象
//獲得操作事務的tx對象
//Transaction tx = session.getTransaction();
//開啟事務并獲得操作事務的tx對象(建議使用)
Transaction tx2 = session.beginTransaction();
//----------------------------------------------
Customer c = new Customer();
c.setCust_name("jdxia");
session.save(c);
//----------------------------------------------
tx2.commit();//提交事務
session.close();//釋放資源
sf.close();//釋放資源
}
@Test
//session的查詢
//查詢id為1的customer對象
public void fun3(){
//1 創建,調用空參構造
Configuration conf = new Configuration().configure();
//2 根據配置信息,創建 SessionFactory對象
SessionFactory sf = conf.buildSessionFactory();
//3 獲得session
Session session = sf.openSession();
//4 session獲得操作事務的Transaction對象
//獲得操作事務的tx對象
//Transaction tx = session.getTransaction();
//開啟事務并獲得操作事務的tx對象(建議使用)
Transaction tx2 = session.beginTransaction();
//----------------------------------------------
Customer customer = session.get(Customer.class, 1l);
System.out.println(customer);
//----------------------------------------------
tx2.commit();//提交事務
session.close();//釋放資源
sf.close();//釋放資源
}
@Test
//session的修改
//修改id為1的customer對象的name屬性為黑馬程序員
public void fun4(){
//1 創建,調用空參構造
Configuration conf = new Configuration().configure();
//2 根據配置信息,創建 SessionFactory對象
SessionFactory sf = conf.buildSessionFactory();
//3 獲得session
Session session = sf.openSession();
//4 session獲得操作事務的Transaction對象
//獲得操作事務的tx對象
//Transaction tx = session.getTransaction();
//開啟事務并獲得操作事務的tx對象(建議使用)
Transaction tx2 = session.beginTransaction();
//----------------------------------------------
//1 獲得要修改的對象
Customer c = session.get(Customer.class, 1l);
//2 修改
c.setCust_name("jdxia");
//3 執行update
session.update(c);
//----------------------------------------------
tx2.commit();//提交事務
session.close();//釋放資源
sf.close();//釋放資源
}
@Test
//session的刪除
//刪除id為1的customer對象
public void fun5(){
//1 創建,調用空參構造
Configuration conf = new Configuration().configure();
//2 根據配置信息,創建 SessionFactory對象
SessionFactory sf = conf.buildSessionFactory();
//3 獲得session
Session session = sf.openSession();
//4 session獲得操作事務的Transaction對象
//獲得操作事務的tx對象
Transaction tx = session.getTransaction();
tx.begin();
//開啟事務并獲得操作事務的tx對象(建議使用)
Transaction tx2 = session.beginTransaction();
//----------------------------------------------
//1 獲得要修改的對象
Customer c = session.get(Customer.class, 1l);
//2 調用delete刪除對象
session.delete(c);
//----------------------------------------------
tx2.commit();//提交事務
session.close();//釋放資源
sf.close();//釋放資源
}
}
~~~
**session常用方法**
~~~
save 保存對象
update 修改操作
delete刪除
get/load 根據id進行查詢
savenOrUpdate 執行save或update操作
createQuery()獲取一個Query對象
CreateSQLQUery()獲取一個可以操作sql的SQLQuery對象
createCriteria() 獲取一個Criteria它可以完成條件查詢
~~~
**Transaction**
Transaction接口主要用于管理事務,它是hibernate的事務接口,對底層的事務進行了封裝。使用它可以進行事務操作。
commit 事務提交
rollback 事務回滾
問題:如果獲取一個Transaction對象
Session.beginTransaction();
問題:如果在程序中沒有開啟事務,是否存在事務?
有事務,session的每一個操作就會開啟一個事務。

- 基礎
- 編譯和安裝
- scanner類(鍵盤錄入)
- Random類(隨機數)
- 數組
- 方法
- 類
- ArrayList集合
- char與int
- eclipse
- IDEA
- 變量與常量
- 常用API
- String,StringBuffer,StringBuilder
- 正則,Date,DateFormat,Calendar
- 包裝類,System,Math,Arrays,BigInteger,BigDecimal
- 集合,迭代器,增強for,泛型
- List,set,判斷集合唯一
- map,Entry,HashMap,Collections
- 異常
- IO
- File
- 遞歸
- 字節流
- 字符流
- IO流分類
- 轉換流
- 緩沖流
- 流的操作規律
- properties
- 序列化流與反序列化流
- 打印流
- commons-IO
- IO流總結
- 多線程
- 線程池
- 線程安全
- 線程同步
- 死鎖
- lock接口
- ThreadLoad
- 等待喚醒機制
- 線程狀態
- jdbc
- DBUtils
- 連接池DBCP
- c3p0連接池
- 網絡編程
- 多線程socket上傳圖片
- 反射
- xml
- 設計模式
- 裝飾器模式
- web service
- tomcat
- Servlet
- response
- request
- session和cookie
- JSP
- EL
- JSTL
- 事務
- 監聽器Listener
- 過濾器Filter
- json
- linux安裝軟件
- 反射詳解
- 類加載器和注解
- 動態代理
- jedis
- Hibernate
- 簡介
- 創建映射文件
- Hibernate核心配置文件
- 事務和增刪改查
- HibernateUtils
- 持久化對象的三種狀態
- 檢索方式
- query
- Criteria
- SQLQuery
- 持久化類
- 主鍵生成策略
- 緩存
- 事務管理
- 關系映射
- 注解
- 優化
- struts2
- 搭建
- 配置詳解
- Action
- 結果跳轉方式
- 訪問ServletAPI方式
- 如何獲得參數
- OGNL表達式
- valueStack 值棧
- Interceptor攔截器
- spring
- 導包
- IOC和DI
- Bean獲取與實例化
- Bean屬性注入
- spring注解
- 注解分層
- junit整合
- aop
- 動態代理實現
- cglib代理實現
- aop名詞
- spring的aop
- aop-xml詳解
- aop-注解詳解
- 代理方式選擇
- jdbcTemplate
- spring事務管理
- 回滾注意
- 事務傳播屬性
- MyBatis
- MyBatis簡介
- 入門程序
- 與jdbc hibernate不同
- 原始Dao開發
- Mapper動態代理方式
- SqlMapConfig.xml配置文件
- 輸入參數pojo包裝類
- resultMap
- 動態sql
- 一對一關聯
- 一對多
- 整合spring
- 逆向工程
- maven
- maven簡介
- 倉庫
- maven目錄結構
- maven常用命令
- 生命周期
- eclipse中maven插件
- 入門程序
- 整合struct
- 依賴范圍
- 添加插件
- idea配置
- jar包沖突
- 分模塊開發
- 構建可執行的jar包(包含依賴jar包)
- springMVC
- 處理流程
- java面試
- java版本升級
- java1-8版本變更
- java9新特性
- 鎖
- java資料
- idea
- jdk版本切換
- log4j
- 入門實例
- 基本使用方法
- Web中使用Log4j
- spring中使用log4j
- java代碼優化