Hibernate框架學習筆記01
1:hibernate是什么
(1)框架是什么
1.框架是用來提高開發效率的
2.封裝好了一些功能.我們需要使用這些功能時,調用即可.不需要再手動實現.
3.所以框架可以理解成是一個半成品的項目.只要懂得如何駕馭這些功能即可.
(2)hibernate框架是什么
(3)hibernate的好處
操作數據庫的時候,可以以面向對象的方式來完成.不需要書寫SQL語句
(4)hibernate是一款orm框架
orm:object relationg mapping. 對象關系映射
(5)orm分4級
hibernate屬于4級:完全面向對象操作數據庫
mybatis屬于2級
dbutils屬于1級
2:hibernate框架的搭建
(1)導包(包括驅動包)
(2)創建數據庫hibernate_32(不能省略),準備表(可以省略)
CREATE TABLE `cst_customer` (
`cust_id` bigint(20) NOT NULL auto_increment,
`cust_name` varchar(255) default NULL,
`cust_source` varchar(255) default NULL,
`cust_industry` varchar(255) default NULL,
`cust_level` varchar(255) default NULL,
`cust_linkman` varchar(255) default NULL,
`cust_phone` varchar(255) default NULL,
`cust_mobile` varchar(255) default NULL,
PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
(3)書寫orm元數據(對象與表的映射配置文件)Customer.htm.xml
a.導入約束 hibernate-mapping-3.0.dtd
<?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">
b.實體
package cn.itheima.domain;
public class Customer {
private Long cust_id;
private String cust_name;
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()方法
//toString()方法
}
c.orm元數據
<?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">
<!-- 配置表與實體對象的關系 -->
<!-- package屬性:填寫一個包名.在元素內部凡是需要書寫完整類名的屬性,可以直接寫簡答類名了. -->
<hibernate-mapping package="cn.itheima.domain">
<!--
class元素: 配置實體與表的對應關系的
name: 完整類名
table:數據庫表名
-->
<class name="Customer" table="cst_customer">
<!-- id元素:配置主鍵映射的屬性
name: 填寫主鍵對應屬性名
column(可選): 填寫表中的主鍵列名.默認值:列名會默認使用屬性名
type(可選):填寫列(屬性)的類型.hibernate會自動檢測實體的屬性類型.
每個類型有三種填法: java類型|hibernate類型|數據庫類型
not-null(可選):配置該屬性(列)是否不能為空. 默認值:false
length(可選):配置數據庫中列的長度. 默認值:使用數據庫類型的最大長度
-->
<id name="cust_id" column="cust_id">
<!-- generator:主鍵生成策略 -->
<generator class="native"></generator>
</id>
<!-- property元素:除id之外的普通屬性映射
name: 填寫屬性名
column(可選): 填寫列名
type(可選):填寫列(屬性)的類型.hibernate會自動檢測實體的屬性類型.
每個類型有三種填法: java類型|hibernate類型|數據庫類型
not-null(可選):配置該屬性(列)是否不能為空. 默認值:false
length(可選):配置數據庫中列的長度. 默認值:使用數據庫類型的最大長度
-->
<!-- <property name="cust_name" column="cust_name" type="java.lang.String"></property> -->
<!-- <property name="cust_name" column="cust_name" type="string"></property> -->
<property name="cust_name" column="cust_name">
<!-- <column name="cust_name" sql-type="varchar"></column> -->
</property>
<property name="cust_source" column="cust_source"></property>
<property name="cust_industry" column="cust_industry"></property>
<property name="cust_level" column="cust_level"></property>
<property name="cust_linkman" column="cust_linkman"></property>
<property name="cust_phone" column="cust_phone"></property>
<property name="cust_mobile" column="cust_mobile"></property>
</class>
</hibernate-mapping>
(4)書寫主配置文件hibernate.cfg.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>
<session-factory>
<!--
#hibernate.dialect org.hibernate.dialect.MySQLDialect
#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
#hibernate.connection.driver_class com.mysql.jdbc.Driver
#hibernate.connection.url jdbc:mysql:///test
#hibernate.connection.username gavin
#hibernate.connection.password
-->
<!-- 數據庫驅動 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 數據庫url -->
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_32</property>
<!-- 數據庫連接用戶名 -->
<property name="hibernate.connection.username">root</property>
<!-- 數據庫連接密碼 -->
<property name="hibernate.connection.password">root</property>
<!-- 數據庫方言
不同的數據庫中,sql語法略有區別. 指定方言可以讓hibernate框架在生成sql語句時.針對數據庫的方言生成.
sql99標準: DDL 定義語言 庫表的增刪改查
DCL 控制語言 事務 權限
DML 操縱語言 增刪改查
注意: MYSQL在選擇方言時,請選擇最短的方言.
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- #hibernate.show_sql true
#hibernate.format_sql true
-->
<!-- 將hibernate生成的sql語句打印到控制臺 -->
<property name="hibernate.show_sql">true</property>
<!-- 將hibernate生成的sql語句格式化(語法縮進) -->
<property name="hibernate.format_sql">true</property>
<!--
## auto schema export 自動導出表結構. 自動建表
#hibernate.hbm2ddl.auto create 自動建表.每次框架運行都會創建新的表.以前表將會被覆蓋,表數據會丟失.(開發環境中測試使用)
#hibernate.hbm2ddl.auto create-drop 自動建表.每次框架運行結束都會將所有表刪除.(開發環境中測試使用)
#hibernate.hbm2ddl.auto update(推薦使用) 自動生成表.如果已經存在不會再生成.如果表有變動.自動更新表(不會刪除任何數據).
#hibernate.hbm2ddl.auto validate 校驗.不自動生成表.每次啟動會校驗數據庫中表是否正確.校驗失敗.
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 引入orm元數據 mapping-映射
路徑書寫: 填寫src下的路徑
-->
<mapping resource="cn/itheima/domain/Customer.htm.xml"/>
</session-factory>
</hibernate-configuration>
(5)代碼測試
package cn.itheima.hello;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import cn.itheima.domain.Customer;
/*
* 測試hibernate框架是否搭建成功
*/
public class Demo {
@Test
public void fun1(){
Configuration conf = new Configuration().configure();
SessionFactory sessionFactory = conf.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
//-----------------------------------------
Customer cus = new Customer();
cus.setCust_name("google11111");
session.save(cus);
//-----------------------------------------
tx.commit();
session.close();
sessionFactory.close();
}
}
3.hibernate API詳解
(1).Configuration
a.創建
//1創建,調用空參構造
Configuration conf = new Configuration();
b.加載主配置
//2讀取指定主配置文件--》空參加載方法,加載src下的hibernate.cfg.xml文件
conf.configure();
c.加載orm元數據(擴展|了解)
//3讀取指定orm元數據(擴展),如果主配置中已經引入了映射配置,不需要手動加載
//conf.addResource(resourceName);
//conf.addClass(persistentClass);
d.創建sessionFactory
//4 根據配置信息,創建 SessionFactory對象
SessionFactory sessionFactory = conf.buildSessionFactory();
(2).SessionFactory
a. 學習SessionFactory對象
* SessionFactory功能:用戶創建操作數據庫核心對象session對象的工廠,簡單說功能就一個----》創建session對象
* 注意:1.sessionFactory負責保存和使用所有的配置信息,消耗內存資源非常大
* 2.sessionFactory屬于線程安全的對象設計
* 結論:保證在web項目中只創建一個sessionFactory
//打開一個新的session對象
Session session = sessionFactory.openSession();
//獲得一個與線程綁定的session對象
Session currentSession = sessionFactory.getCurrentSession();
(3).session
a.學習session對象
* session對象功能:表達hibernate框架和數據庫之間的連接(會話)。session類似于JDBC年代的connection對象。
* 還可以完成對數據庫中數據的增刪改查操作,session是hibernate操作數據庫的核心對象
b.獲得事務
//session獲得操作事務的Transaction對象,
//獲得操作事務的tx對象
Transaction tx1 = session.getTransaction();
//開啟事務并獲得操作事務的tx對象(建議使用)
Transaction tx = session.beginTransaction();
c.增
Customer cus = new Customer();
cus.setCust_name("google11111");
session.save(cus);
d.查
Customer customer = session.get(Customer.class, 1l);
System.out.println(customer);
e.改
//1.獲得要修改的對象
Customer customer = session.get(Customer.class, 1l);
//2.設置
customer.setCust_name("完美");
//3.更新操作
session.update(customer);
d.刪
//1.獲得要刪除的對象
Customer customer = session.get(Customer.class, 1l);
//2.刪除
session.delete(customer);
(4).Transaction
//打開事務
tx.begin();
//提交事務
tx.commit();
//回滾事務
tx.rollback();
智能推薦
Hibernate框架學習筆記03
1.一對多|多對一 (1)關系表達 (2)操作 (3)進階操作 在保存時.兩方都會維護外鍵關系.關系維護兩次,冗余了. 多余的維護關系語句,顯然是客戶這一端在維護關系 2.多對多 (1)關系表達 (2)操作 (3)進階操作...
【學習筆記-SSH框架】Hibernate高級-筆記01-類級別檢索策略
Hibernate高級-筆記01-類級別檢索策略 目錄 檢索策略簡介 類級別立即加載 類級別延遲加載 0. 檢索策略簡介 在Hibernate中,Session主要有兩種檢索方法:get()和load(),這兩個方法都是用來從數據庫中檢索對象,并按照參數指定的對象標識符OID來加載一個持久化對象。 【示例】 檢索策略主要有以下兩種: 類級別檢索策略 使用Session的load()或get()方法...
框架學習筆記之Hibernate框架基礎——Hibernate入門實例
一、簡介: 面向java環境的對象/關系數據庫映射工具 不僅管理java類到庫的映射們還提供數據查詢和獲取數據的方法 對于開發者通常的數據持久化關于的編程任務,解放95% Hibernate對于中間層應用最好的場合。 相對于以數據操作的應用來說可能不是最好的選擇。 可以幫助開發者消除或者包裝那些針對特定廠商的sql代碼。建立跨越數據庫的應用平臺。 二、能做什么: 減少乏味的編碼,獲取...
Java進階學習筆記(二)Hibernate框架
Hibernate框架 一、概述 二、入門案例——使用Hibernate 1.安裝Hibernate插件到eclipse環境 1)下載hibernate tools插件:http://hibernate.org/ 2)安裝 注意取消勾選 Contact all update sites 2.導入Hibernate的jar包 3.創建持久化Java類 這里創建的持久化Java...
JavaWeb學習筆記 (十三) Hibernate框架
1.什么是Hibernate Hibernate框架是當今主流的Java持久層框架之一,是一個開源的ORM(Object Relational Mapping,對象關系映射)框架。對JDBC進行了輕量級的封裝,使得Java開發人員可以使用面向對象的編程思想來操作數據庫。 傳統JDBC的缺陷 使用傳統的JDBC開發系統時,對于一些小的應用時,sql語句比較簡單。但對于大型應用系統的開發,sql語句可...
猜你喜歡
Hibernate框架筆記01_環境搭建_API_CRUD
文章目錄 1. Hibernate框架的概述 1.1 什么是框架 1.2 經典三層架構 1.3 Hibernate框架 2 Hibernate入門 2.1 下載Hibernate的開發包 2.2 創建項目,引入jar包 2.3 創建表 2.4 創建實體類 2.5 創建映射(***) 2.6 創建一個Hibernate的核心配置文件(***) 1.2.7 編寫測試代碼 3 hibernate的常見配...
【學習筆記-SSH框架】Hibernate入門-筆記01-搭建Hibernate應用環境及實現增刪查改功能、以及Query、Criteria查詢
Hibernate入門-筆記01-搭建Hibernate應用環境及實現增刪查改功能、以及Query、Criteria查詢 目錄 使用Maven搭建Hibernate項目 自頂向下開發Hibernate應用步驟 封裝Hibernate工具類 實現增刪查改功能 使用Query進行HQL查詢 使用Criteria進行條件查詢 POJO狀態 1. 使用Maven搭建Hibernate項目 在IDE中創建m...
Spring框架學習筆記——01
Spring概念 spring是開源的輕量級框架 spring核心主要兩部分: (1)aop:面向切面編程,擴展功能不是修改源代碼實現 (2)ioc:控制反轉 控制反轉:比如有一個類,在類里面有方法(不是靜態的方法),調用類里面的方法,創建類的對象,使用對象調用方法,創建類對象的過程,需要new出來對象 把對象的創建不是通過new方式實現,而是交給spring配置創建類對象 spring是一站式框...
Spring框架學習筆記01
1.spring介紹 (1)三層架構中spring位置 (2)spring一站式框架 2.spring搭建 (1)導包 logging是日志包 log4j可選 (2)創建一個對象 (3)書寫配置注冊對象到容器 (4)代碼測試 3.spring概念 (1)思想 (2)applicationContext&BeanFactory 4.spring配置詳解 (1)Bean元素 (2)Bean元素...