本文包括:
1、CRM 項(xiàng)目的整體介紹
2露戒、Hibernate 框架概述
3、Hibernate 快速入門
4、Hibernate 常用的配置文件
5拥坛、Hibernate 常用的接口和類
1、CRM 項(xiàng)目的整體介紹
-
什么是 CRM
CRM(Customer Relationship Management)客戶關(guān)系管理,是利用相應(yīng)的信息技術(shù)以及互聯(lián)網(wǎng)技術(shù)來協(xié)調(diào)企業(yè)與顧客間在銷售螃成、營銷和服務(wù)上的交互,向客戶提供創(chuàng)新式的個(gè)性化的客戶交互和服務(wù)的過程
其最終目標(biāo)是將面向客戶的各項(xiàng)信息和活動(dòng)集成起來启摄,組建一個(gè)以客戶為中心的企業(yè)帽驯,實(shí)現(xiàn)對面向客戶的活動(dòng)的全面管理
-
CRM 的模塊
CRM 系統(tǒng)實(shí)現(xiàn)了對企業(yè)銷售梳侨、營銷择示、服務(wù)等各階段的客戶信息、客戶活動(dòng)進(jìn)行統(tǒng)一管理迄本。
CRM 系統(tǒng)功能涵蓋企業(yè)銷售、營銷抓韩、用戶服務(wù)等各各業(yè)務(wù)流程,業(yè)務(wù)流程中與客戶相關(guān)活動(dòng)都會(huì)在 CRM 系統(tǒng)統(tǒng)一管理相恃。
-
下邊列出一些基本的功能模塊,包括:
客戶信息管理
聯(lián)系人管理
商機(jī)管理
統(tǒng)計(jì)分析等
-
模塊的具體功能
-
客戶信息管理
- 對客戶信息統(tǒng)一維護(hù)倦挂,客戶是指存量客戶或擬營銷的客戶,通過員工錄入形成公司的“客戶庫”是公司最重要的數(shù)據(jù)資源呀非。
-
聯(lián)系人管理
- 對客戶的聯(lián)系人信息統(tǒng)一管理艺糜,聯(lián)系人是指客戶企業(yè)的聯(lián)系人边涕,即企業(yè)的業(yè)務(wù)人員和客戶的哪些人在打交道。
-
客戶拜訪管理
- 業(yè)務(wù)員要開發(fā)客戶需要去拜訪客戶美浦,客戶拜訪信息記錄了業(yè)務(wù)員與客戶溝通交流方面的不足、采取的策略不當(dāng)摊滔、有待改進(jìn)的地方或值得分享的溝通技巧等方面的信息棒妨。
-
綜合查詢
- 客戶相關(guān)信息查詢陪腌,包括:客戶信息查詢、聯(lián)系人信息查詢杂拨、商機(jī)信息查詢等
-
統(tǒng)計(jì)分析
- 按分類統(tǒng)計(jì)客戶信息亏狰,包括:客戶信息來源統(tǒng)計(jì)宫仗、按行業(yè)統(tǒng)計(jì)客戶滩褥、客戶發(fā)展數(shù)量統(tǒng)計(jì)等
-
系統(tǒng)管理
系統(tǒng)管理屬于crm系統(tǒng)基礎(chǔ)功能模塊驹针,包括:數(shù)據(jù)字典、賬戶管理嚎货、角色管理、權(quán)限管理玄组、操作日志管理等
-
-
SSH 框架
-
Hibernate 的開發(fā)位置
學(xué)習(xí)路線:
Hibernate 入門:主要是學(xué)習(xí)框架的入門延曙,自己搭建框架趴荸,完成增刪改查的操作
Hibernate 一級(jí)緩存:主要學(xué)習(xí)一級(jí)緩存孵淘、事務(wù)管理和基本的查詢
Hibernate 進(jìn)階:主要學(xué)習(xí)一對多和多對多的操作等
Hibernate 查詢優(yōu)化:基本查詢和查詢的優(yōu)化
2惧财、Hibernate 框架概述
-
Hibernate 框架的概述
Hibernate 是一個(gè)開放源代碼的對象關(guān)系映射(ORM)框架仰迁,它對 JDBC 進(jìn)行了非常輕量級(jí)的對象封裝恰起,使得 Java 程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫东羹。
Hibernate 可以應(yīng)用在任何使用 JDBC 的場合恕酸,既可以在 Java 的客戶端程序使用了讨,也可以在 Servlet/JSP 的 Web 應(yīng)用中使用。
Hibernate 是輕量級(jí) JavaEE 應(yīng)用的持久層解決方案侧巨,是一個(gè)關(guān)系數(shù)據(jù)庫ORM框架
記追痹:Hibernate 是一個(gè)持久層的 ORM 框架@蚵!寺庄!
-
什么是ORM(對象關(guān)系映射)
-
ORM映射:Object Relational Mapping
- O:面向?qū)ο箢I(lǐng)域的 Object(JavaBean 對象)
- R:關(guān)系數(shù)據(jù)庫領(lǐng)域的 Relational(表的結(jié)構(gòu))
- M:映射 Mapping(XML 的配置文件)
簡單一句話:Hibernate 使程序員通過操作對象的方式來操作數(shù)據(jù)庫表記錄
-
-
Hibernate 優(yōu)點(diǎn):
Hibernate 對 JDBC 訪問數(shù)據(jù)庫的代碼做了封裝宪彩,大大簡化了數(shù)據(jù)訪問層繁瑣的重復(fù)性代碼留晚。
Hibernate 是一個(gè)基于 jdbc 的主流持久化框架隆判,是一個(gè)優(yōu)秀的 ORM 實(shí)現(xiàn),它很大程度的簡化了 DAO 層編碼工作。
Hibernate 的性能非常好,因?yàn)樗且粋€(gè)輕量級(jí)框架趁窃。映射的靈活性很出色呻征。它支持很多關(guān)系型數(shù)據(jù)庫,從一對一到多對多的各種復(fù)雜關(guān)系领突。
3、Hibernate 快速入門
-
下載Hibernate 5的運(yùn)行環(huán)境
-
下載相應(yīng)的 jar 包等
解壓后對目錄結(jié)構(gòu)有一定的了解
-
-
創(chuàng)建表結(jié)構(gòu)
-
建表語句如下
Create database hibernate_day01; Use hibernate_day01; CREATE TABLE `cst_customer` ( `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客戶編號(hào)(主鍵)', `cust_name` varchar(32) NOT NULL COMMENT '客戶名稱(公司名稱)', `cust_user_id` bigint(32) DEFAULT NULL COMMENT '負(fù)責(zé)人id', `cust_create_id` bigint(32) DEFAULT NULL COMMENT '創(chuàng)建人id', `cust_source` varchar(32) DEFAULT NULL COMMENT '客戶信息來源', `cust_industry` varchar(32) DEFAULT NULL COMMENT '客戶所屬行業(yè)', `cust_level` varchar(32) DEFAULT NULL COMMENT '客戶級(jí)別', `cust_linkman` varchar(64) DEFAULT NULL COMMENT '聯(lián)系人', `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定電話', `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移動(dòng)電話', PRIMARY KEY (`cust_id`) ) ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=utf8;
-
-
搭建 Hibernate 的開發(fā)環(huán)境
-
創(chuàng)建 WEB 工程,引入 Hibernate 開發(fā)所需要的 jar 包
MySQL的驅(qū)動(dòng)jar包
Hibernate開發(fā)需要的jar包(資料/hibernate-release-5.0.7.Final/lib/required/所有jar包)
日志jar包(資料/jar包/log4j/所有jar包)
-
-
編寫 JavaBean 實(shí)體類
-
Customer 類的代碼如下:
public class Customer { // 以后都使用包裝類扫夜,默認(rèn)值為 null private Long cust_id; private String cust_name; private Long cust_user_id; private Long cust_create_id; private String cust_source; private String cust_industry; private String cust_level; private String cust_linkman; private String cust_phone; private String cust_mobile; // 省略get和set方法 }
-
-
創(chuàng)建 類與表結(jié)構(gòu)的 映射:
-
在 JavaBean 所在的包下創(chuàng)建映射的配置文件
默認(rèn)的命名規(guī)則為:實(shí)體類名.hbm.xml
-
在 實(shí)體類名.hbm.xml 配置文件中引入約束(引入的是 hibernate3.0 的 dtd 約束谨娜,不要引入 4 的約束)
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
如果不能上網(wǎng)辫封,編寫配置文件是沒有提示的雏逾,需要自己來配置
復(fù)制 http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd --> window --> preferences --> 搜索 xml --> 選擇 xml catalog --> 點(diǎn)擊 add --> 選擇 URI --> 粘貼復(fù)制的地址 --> 選擇 location蠢正,選擇本地的 DTD 的路徑
-
編寫映射的配置文件:實(shí)體類名.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- 配置類和表結(jié)構(gòu)的映射 --> <class name="com.itheima.domain.Customer" table="cst_customer"> <!-- 配置 id 見到 name 屬性,JavaBean 的屬性 見到 column 屬性神汹,是表結(jié)構(gòu)的字段 --> <id name="cust_id" column="cust_id"> <!-- 主鍵的生成策略 --> <generator class="native"/> </id> <!-- 配置其他的屬性 --> <property name="cust_name" column="cust_name"/> <property name="cust_user_id" column="cust_user_id"/> <property name="cust_create_id" column="cust_create_id"/> <property name="cust_source" column="cust_source"/> <property name="cust_industry" column="cust_industry"/> <property name="cust_level" column="cust_level"/> <property name="cust_linkman" column="cust_linkman"/> <property name="cust_phone" column="cust_phone"/> <property name="cust_mobile" column="cust_mobile"/> </class> </hibernate-mapping>
-
-
編寫 Hibernate 核心的配置文件
在 src 目錄下宪摧,創(chuàng)建名稱為 hibernate.cfg.xml 的配置文件
-
在 XML 中引入 DTD 約束
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
-
打開:資料/hibernate-release-5.0.7.Final/project/etc/hibernate.properties造锅,可以查看具體的配置信息
-
必須配置的4大參數(shù)
#hibernate.connection.driver_class com.mysql.jdbc.Driver #hibernate.connection.url jdbc:mysql:///test #hibernate.connection.username gavin #hibernate.connection.password
-
數(shù)據(jù)庫的方言(必須配置的)
#hibernate.dialect org.hibernate.dialect.MySQLDialect
-
可選的配置
#hibernate.show_sql true #hibernate.format_sql true #hibernate.hbm2ddl.auto update
-
引入映射配置文件(一定要注意,要引入映射文件,框架需要加載映射文件,如果不引入,則需要在 Java 代碼中手動(dòng)加載)
<mapping resource="com/itheima/domain/Customer.hbm.xml"/>
-
-
具體的配置如下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <!-- 記姿嗤怼:先配置SessionFactory標(biāo)簽户敬,一個(gè)數(shù)據(jù)庫對應(yīng)一個(gè)SessionFactory標(biāo)簽 --> <session-factory> <!-- 必須要配置的參數(shù)有5個(gè)骂维,4大參數(shù),數(shù)據(jù)庫的方言 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">liaohaolin</property> <!-- 數(shù)據(jù)庫的方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 可選配置 --> <!-- 顯示SQL語句,在控制臺(tái)顯示 --> <property name="hibernate.show_sql">true</property> <!-- 格式化SQL語句 --> <property name="hibernate.format_sql">true</property> <!-- 生成數(shù)據(jù)庫的表結(jié)構(gòu) update:如果沒有表結(jié)構(gòu)感耙,創(chuàng)建表結(jié)構(gòu)。如果存在,不會(huì)創(chuàng)建伞访,添加數(shù)據(jù) --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 映射配置文件辛馆,需要引入映射的配置文件 --> <mapping resource="com/itheima/domain/Customer.hbm.xml"/> </session-factory> </hibernate-configuration>
-
編寫 Hibernate 入門代碼
-
具體的代碼如下:
/** * 測試保存客戶 */ @Test public void testSave(){ /** * 1. 先加載配置文件 * 2. 創(chuàng)建SessionFactory對象映屋,生成Session對象 * 3. 創(chuàng)建session對象 * 4. 開啟事務(wù) * 5. 編寫保存的代碼 * 6. 提交事務(wù) * 7. 釋放資源 */ // 1. 先加載配置文件 // 簡寫的方法,默認(rèn)加載src目錄下hibernate.cfg.xml的配置文件 Configuration config = new Configuration().configure(); // 2. 創(chuàng)建SessionFactory對象 SessionFactory factory = config.buildSessionFactory(); // 3. 創(chuàng)建session對象 Session session = factory.openSession(); // 4. 開啟事務(wù) Transaction tr = session.beginTransaction(); // 5. 編寫保存的代碼 Customer c = new Customer(); // c.setCust_id(cust_id); // 主鍵是自動(dòng)遞增的葡缰,所以不用編寫 c.setCust_name("測試3"); c.setCust_level("2"); c.setCust_phone("110"); // 保存數(shù)據(jù)付燥,操作對象就相當(dāng)于操作數(shù)據(jù)庫的表結(jié)構(gòu) session.save(c); // 6. 提交事務(wù) tr.commit(); // 7. 釋放資源 session.close(); factory.close(); }
-
如果在 hibernate.cfg.xml 中不引入映射配置文件嗦嗡,則需要在上述代碼的第1點(diǎn)中這樣編寫:
// 1. 先加載配置文件 Configuration config = new Configuration(); // 默認(rèn)加載src目錄下hibernate.cfg.xml的配置文件 config.configure(); // 手動(dòng)加載(了解即可) config.addResource("com/itheima/domain/Customer.hbm.xml");
-
回憶:快速入門
1. 下載 Hibernate 框架的開發(fā)包
2. 編寫數(shù)據(jù)庫和表結(jié)構(gòu)
3. 創(chuàng)建WEB的項(xiàng)目,導(dǎo)入了開發(fā)的 jar 包
* MySQL 驅(qū)動(dòng)包饭玲、Hibernate 開發(fā)的必須要有的 jar 包侥祭、日志的 jar 包
4. 編寫 JavaBean,以后不使用基本數(shù)據(jù)類型茄厘,使用包裝類
5. 編寫映射的配置文件(核心)矮冬,先導(dǎo)入開發(fā)的約束,里面正常配置標(biāo)簽
6. 編寫 hibernate 的核心的配置文件次哈,里面的內(nèi)容是固定的
7. 編寫代碼欢伏,使用的類和方法
4、Hibernate 常用的配置文件
-
映射配置文件
-
映射文件亿乳,即 Customer.hbm.xml 的配置文件
-
<class>
標(biāo)簽 -- 用來將類與數(shù)據(jù)庫表建立映射關(guān)系- name -- 類的全路徑
- table -- 表名(如果類名與表名一致,那么 table 屬性也可以省略)
- catalog -- 數(shù)據(jù)庫的名稱,基本上都會(huì)省略不寫
-
<id>
標(biāo)簽 -- 用來將類中的屬性與表中的主鍵建立映射径筏,id 標(biāo)簽就是用來配置主鍵的葛假。- name -- 類中屬性名
- column -- 表中的字段名.(如果類中的屬性名與表中的字段名一致,那么 column 可以省略.)
- length -- 字段的程度,如果數(shù)據(jù)庫已經(jīng)創(chuàng)建好了滋恬,那么 length 可以不寫聊训。如果沒有創(chuàng)建好,生成表結(jié)構(gòu)時(shí)恢氯,length 最好指定带斑。
-
<property>
-- 用來將類中的普通屬性與表中的字段建立映射.- name -- 類中屬性名
- column -- 表中的字段名.(如果類中的屬性名與表中的字段名一致,那么 column 可以省略.)
- length -- 數(shù)據(jù)長度
- type -- 數(shù)據(jù)類型(一般都不需要編寫,如果寫需要按著規(guī)則來編寫)
- Hibernate的數(shù)據(jù)類型 type="string"
- Java的數(shù)據(jù)類型 type="java.lang.String"
- 數(shù)據(jù)庫字段的數(shù)據(jù)類型 <column name="name" sql-type="varchar"/>
-
-
-
核心配置文件
-
核心配置文件的兩種方式
-
第一種方式是屬性文件的形式勋拟,即properties的配置文件
- hibernate.properties
- hibernate.connection.driver_class=com.mysql.jdbc.Driver
- 缺點(diǎn)
- 不能加載映射的配置文件勋磕,需要手動(dòng)編寫代碼去加載
- hibernate.properties
-
第二種方式是 XML 文件的形式,開發(fā)基本都會(huì)選擇這種方式
- hibernate.cfg.xml
<property name="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</property>
- 優(yōu)點(diǎn)
- 格式比較清晰
- 編寫有提示
- 可以在該配置文件中加載映射的配置文件(最主要的優(yōu)點(diǎn))
- hibernate.cfg.xml
-
-
關(guān)于 hibernate.cfg.xml 的配置文件方式
-
必須有的配置
-
數(shù)據(jù)庫連接信息:
hibernate.connection.driver_class -- 連接數(shù)據(jù)庫驅(qū)動(dòng)程序
hibernate.connection.url -- 連接數(shù)據(jù)庫 URL
hibernate.connection.username -- 數(shù)據(jù)庫用戶名
hibernate.connection.password -- 數(shù)據(jù)庫密碼 -
方言:
hibernate.dialect -- 操作數(shù)據(jù)庫方言
-
-
可選的配置
- hibernate.show_sql -- 顯示 SQL
- hibernate.format_sql -- 格式化 SQL
- hibernate.hbm2ddl.auto -- 通過映射轉(zhuǎn)成 DDL 語句敢靡,常用: update
- create -- 每次都會(huì)創(chuàng)建一個(gè)新的表 --- 測試的時(shí)候
- create-drop -- 每次都會(huì)創(chuàng)建一個(gè)新的表挂滓,當(dāng)執(zhí)行結(jié)束之后,將創(chuàng)建的這個(gè)表刪除 --- 測試的時(shí)候
- update -- 如果有表,使用原來的表啸胧。沒有表,創(chuàng)建一個(gè)新的表赶站,同時(shí)更新表結(jié)構(gòu)(比如新增一個(gè)字段,但是不能刪除字段)
- validate -- 如果有表,使用原來的表纺念。同時(shí)校驗(yàn)映射文件與表中字段是否一致贝椿,如果不一致就會(huì)報(bào)錯(cuò)。
-
加載映射
-
如果XML方式:
<mapping resource="cn/itcast/hibernate/domain/User.hbm.xml" />
-
-
-
5陷谱、Hibernate 常用的接口和類
-
Configuration 類和作用
-
Configuration 類
Configuration 對象用于配置并且啟動(dòng) Hibernate烙博。
Hibernate 應(yīng)用通過該對象來獲得對象-關(guān)系映射文件中的元數(shù)據(jù),以及動(dòng)態(tài)配置 Hibernate 的屬性,然后創(chuàng)建 SessionFactory 對象习勤。
簡單一句話:加載 Hibernate 的配置文件踪栋,可以獲取 SessionFactory 對象。
-
Configuration 類的其他應(yīng)用(了解)
- 加載配置文件的種類图毕,Hibernate 支持 xml 和 properties 類型的配置文件夷都,在開發(fā)中基本都使用 XML 配置文件的方式。
-
如果采用的是 properties 的配置文件予颤,那么通過:
Configuration configuration = new Configuration();
就可以自動(dòng)配置文件囤官,但是還需要自己手動(dòng)加載映射文件(xxx.hbm.xml):
config.addResource("cn/itcast/domain/Student.hbm.xml");
-
如果采用的XML的配置文件,通過:
Configuration configuration = new Configuration().configure();
加載配置文件蛤虐。
-
- 加載配置文件的種類图毕,Hibernate 支持 xml 和 properties 類型的配置文件夷都,在開發(fā)中基本都使用 XML 配置文件的方式。
-
-
SessionFactory:重要
- SessionFactory 是工廠類党饮,是生成 Session 對象的工廠類
- SessionFactory 類的特點(diǎn)
由 Configuration 通過加載配置文件創(chuàng)建該對象。
-
SessionFactory 對象中保存了當(dāng)前的數(shù)據(jù)庫配置信息和所有映射關(guān)系以及預(yù)定義的 SQL 語句驳庭。同時(shí)刑顺,SessionFactory 還負(fù)責(zé)維護(hù) Hibernate 的二級(jí)緩存。
- 預(yù)定義SQL語句
- 使用 Configuration 類創(chuàng)建了 SessionFactory 對象是饲常,已經(jīng)在SessionFacotry 對象中緩存了一些 SQL 語句
- 常見的 SQL 語句是增刪改查(通過主鍵來查詢)
- 這樣做的目的是效率更高
- 預(yù)定義SQL語句
一個(gè) SessionFactory 實(shí)例對應(yīng)一個(gè)數(shù)據(jù)庫蹲堂,應(yīng)用從該對象中獲得 Session 實(shí)例。
SessionFactory 是線程安全的贝淤,意味著它的一個(gè)實(shí)例可以被應(yīng)用的多個(gè)線程共享柒竞。
SessionFactory 是重量級(jí)的,意味著不能隨意創(chuàng)建或銷毀它的實(shí)例播聪。如果只訪問一個(gè)數(shù)據(jù)庫朽基,只需要?jiǎng)?chuàng)建一個(gè) SessionFactory 實(shí)例,且在應(yīng)用初始化的時(shí)候完成离陶。
SessionFactory 需要一個(gè)較大的緩存稼虎,用來存放預(yù)定義的SQL語句及實(shí)體的映射信息。另外可以配置一個(gè)緩存插件招刨,這個(gè)插件被稱之為 Hibernate 的二級(jí)緩存渡蜻,被多線程所共享
-
總結(jié)
- 一般應(yīng)用使用一個(gè) SessionFactory,最好是應(yīng)用啟動(dòng)時(shí)就完成初始化。
-
編寫HibernateUtil的工具類
正因?yàn)?SessionFactory 比較特別计济,每次使用時(shí)都是固定的代碼茸苇,所以可以把代碼抽取出來,編寫工具類沦寂。
-
具體代碼如下
public class HibernateUtil { private static final Configuration cfg; private static final SessionFactory factory; static{ // 給常量賦值 // 加載配置文件 cfg = new Configuration().configure(); // 生成factory對象 factory = cfg.buildSessionFactory(); } // 獲取Session對象 public static Session openSession(){ return factory.openSession(); } }
-
Session 接口
-
概述
Session 是在 Hibernate 中使用最頻繁的接口学密。也被稱之為持久化管理器。它提供了和持久化有關(guān)的操作传藏,比如添加腻暮、修改彤守、刪除、加載和查詢實(shí)體對象
Session 是應(yīng)用程序與數(shù)據(jù)庫之間交互操作的一個(gè)單線程對象哭靖,是 Hibernate 運(yùn)作的中心
Session是線程不安全的
所有持久化對象必須在 session 的管理下才可以進(jìn)行持久化操作
Session 對象有一個(gè)一級(jí)緩存具垫,顯式執(zhí)行 flush 之前,所有的持久化操作的數(shù)據(jù)都緩存在 session 對象處
持久化類與 Session 關(guān)聯(lián)起來后就具有了持久化的能力
-
特點(diǎn)
不是線程安全的试幽。應(yīng)避免多個(gè)線程使用同一個(gè) Session 實(shí)例
Session 是輕量級(jí)的筝蚕,它的創(chuàng)建和銷毀不會(huì)消耗太多的資源。應(yīng)為每次客戶請求分配獨(dú)立的 Session 實(shí)例
Session 有一個(gè)緩存铺坞,被稱之為 Hibernate 的一級(jí)緩存起宽。每個(gè) Session 實(shí)例都有自己的緩存
-
常用的方法
-
save(obj)
/** * 測試工具類 */ @Test public void testSave2(){ // 使用工具類簡化代碼 Session session = HibernateUtils.getSession(); Transaction tr = session.beginTransaction(); Customer c = new Customer(); c.setCust_name("小風(fēng)"); session.save(c); // 提交事務(wù) tr.commit(); // 釋放資源 session.close(); }
-
get(Class,id)
2個(gè)參數(shù):class 表示要查詢的 JavaBean 的 class 對象,id 為主鍵的值济榨。
例如坯沪,需要查 Customer 對應(yīng)的表中主鍵值為7(Long 類型)的記錄,代碼如下:
Customer c = session.get(Customer.class, 7L);
-
delete(obj)
注意:在這里是對數(shù)據(jù)庫進(jìn)行操作擒滑,所以刪除的是數(shù)據(jù)庫的表中的某一行記錄腐晾,所以首先要調(diào)用上面的 get 方法,得到對象后丐一,再刪除赴魁。
Customer c = session.get(Customer.class, 7L); // 刪除客戶 session.delete(c);
-
update(obj)
Customer c = session.get(Customer.class, 95L); // 設(shè)置客戶的信息 c.setCust_name("小蒼"); c.setCust_level("3"); // 修改 session.update(c);
-
saveOrUpdate(obj) -- 保存或者修改(如果沒有數(shù)據(jù),保存數(shù)據(jù)钝诚。如果有,修改數(shù)據(jù))
-
保存
Customer c = new Customer(); // c.setCust_id(10L); 這是錯(cuò)誤做法榄棵!千萬不能自己設(shè)置主鍵去保存凝颇! c.setCust_name("測試"); session.saveOrUpdate(c);
-
修改
// 先查詢再改 Customer c = session.get(Customer.class, 6L); c.setCust_name("小澤"); session.saveOrUpdate(c);
-
-
createQuery() -- HQL語句的查詢的方式
// 創(chuàng)建查詢的接口 Query query = session.createQuery("from Customer"); // 查詢該表所有的數(shù)據(jù) List<Customer> list = query.list(); for (Customer customer : list) { System.out.println(customer); }
-
-
-
Transaction 接口
Transaction 是事務(wù)的接口
-
常用的方法
commit() -- 提交事務(wù)
rollback() -- 回滾事務(wù)
-
特點(diǎn)
Hibernate 框架默認(rèn)情況下事務(wù)不自動(dòng)提交.需要手動(dòng)提交事務(wù)
如果沒有開啟事務(wù),那么每個(gè) Session 的操作疹鳄,都相當(dāng)于一個(gè)獨(dú)立的事務(wù)
在如上的代碼中拧略,都開啟了事務(wù),并且手動(dòng)提交了事務(wù)瘪弓。
-
示例:
/** * 測試保存 */ @Test public void testSave3(){ Session session = null; Transaction tr = null; try { // 獲取session session = HibernateUtils.getSession(); // 開啟事務(wù) tr = session.beginTransaction(); // 執(zhí)行代碼 Customer c = new Customer(); c.setCust_name("哈哈"); // 保存 session.save(c); // 提交事務(wù)事務(wù) tr.commit(); } catch (Exception e) { // 回滾事務(wù) tr.rollback(); e.printStackTrace(); }finally{ // 釋放資源 session.close(); } }