hibernate框架總結
Hibernate
Hibernate課程安排
第一天 hibernate入門和基本操作
第二天 hibernate 概念和api使用
第三天 hibernate配置一對多和多對多
第四天 hibernate查詢操作
今天內容介紹
1.web內容回顧
*1.javaee三層架構
*2.mvc思想
2.hibenate概述
3.hibenate框架入門案例
4.hibenate 配置文件
5.hibenate的api使用
web回顧
javaEE三層結構
1.web層:struts2框架
2.service層業務邏輯層:spring框架
3.dao層:hibernate框架
*1對數據庫進行crud操作
MVC思想
MVC:m模型 v視圖 c控制器
Hibernate概述
什麼是框架
1.寫程序,使用框架之後,棒我們實現一部分功能,是有那個框架愛好處
,少寫一部分代碼實現功能
什麼是hiberbate框架(重點記住)
1.hibernate框架應用在javaee三層結構中dao層框架
2.在dao層裏面做對數據庫crud操作,使用hibernate實現crud操作,
hibernate底層代碼就是jdbc,hibernate對jdbc進行封裝,使用hibernate好處
不需要寫複雜的jdbc的代碼,不需要寫sql語句實現
3.hiberbate開源的 輕量級(不需要依賴於其他東西如jar包)的框架
4.hibernate版本
hibernate3.x
hiernate4.x:沒人用
hiernate5.x:(學習)現在使用的
lib:hibernate的jar包
什麼是orm思想
1.hibernate使用orm思想對數據庫進行crud操作
2.在web階段學習javabean,更正確的叫法 實體類
3.orm:o:object對象 r:relateional關係 m:mapping映射 對象關係映射
*1.文字描述
讓實體類和數據庫表進行一一對應關係,
讓實體類首先和數據庫表對應
讓實體類屬性和表裏字段對應
*2.不需要直接操作數據庫表,而操作表對應實體類對象
jdbc代碼
//加載驅動
Class.forName("com.mysql.jdbc.Driver");
//創建連接
Connection conn=DriverManager.getConnerction
(url,username,password);
String sql="select * from student";
//對sql進行預編譯操作
PreparedStatment psmt=conn.prepareStatement(sql);
//執行sql 查詢sql
ResultSet rs=pstm.executeQuery();
//遍歷結果集
.........
//釋放資源
.............
Hibernate入門
搭建hibenate環境
第一步
因爲使用hibernate時候,有日誌信息輸出,hibernate本身沒有日誌輸出的
jar包,就需要導入其他日誌jar包
不要忘記masql驅動jar包
*使用hibernate時候,不需要自己手動創建表,hibernate棒你把表創建好
第三步,配置實體類和數據庫表,一一對應的關係(映射關係)
*創建xml合適的配置文件
映射配置文件名稱和位置沒有固定要求
建議:在實體類所在包裏面創建,實體類名稱。bm.xml
*2配置是xml格式,在配置文件中首先引入xml約束
學過的約束dtd、schema、
*3配置映射關係
class標籤 name屬性:實體類的全路徑
table屬性:數據庫表的名稱
<class name="cn.itcast.entity.User" table="user">
hibernate要求實體類有一個屬性唯一值
hibernate要去表於字段作爲唯一值
id標籤
有兩個屬性 name屬性:實體類裏面id屬性名稱
column屬性:生成的表字段名稱
<id name="uid" column="uid">
<!--設置數據庫表id增長策略
native:生成表id值就是主鍵自動增長
-->
<generator class="native"></generator>
</id>
<!--配置其他屬性和標的字段對應-->
<property name="username" column="username"></property>
<property name="password" column="password"></property>
<property name="address" column="address"></property>
</class>
第四步 創建hibernate核心配置文件
*1.核心配置文件安格式xml,歹勢核心配置文件名稱和位置固定的位置
的位置:必須src下面
名稱:必須hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
第一部分:配置數據庫必須的
<property name="hibernate.connection.url">com.mysql.jdbc.Driver></property>
<property name="">jdbc:mysql://hibernate></property>
<property name="">root</property>
<property name="">123</property>
第二部分:配置hibernage信息 可選的
輸出底層sql語句
<property name="hibernate.show_sql">true</property>
輸出底層sql語句格式
<property name="hibernate.format_sql">true</property>
hiberbate幫創建表,需要配置之後
update:如果說已經有表,更新,如果沒有 創建
<property name="hibernate.hbm2ddl.quto update"></property>
配置數據庫方言
在mysql裏面實現分頁關鍵字limit只能使用mysql裏面
在ooracle數據庫,實現分頁rownum
讓hibernate框架識別不同數據庫的語句
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
第三部分:把映射文件放到核心配置文件中 必須的
<mapping resource="cn/itcast/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configurateion>
實現添加操作
第一步 加載hiberbate核心配置文件
在hiberbate裏面封裝對象
Configuration cfg =new Configuration();
cfg.configure();
第二步 創建SessionFactory對象
SessionFactory sessionFactory=cfg.buildSessionFactory();
讀取hibernate核心配置文件內容創建sessionFactory
第三步 使用SessionFactory創建對象
Session session=sessionFactory.openSession();
第四步 開啓事務
Transaction tx=session.beginTransaction();
第五步 寫具體邏輯crud操作
//添加功能
User u=new User();
user.setUsername="小王";
user.setPassword="123";
user.setAddress="中共";
//調用session的方法實現添加
session.save(user);
第六步 提交事務
tx.commit();
第七步 關閉資源
session.close();
sessionFactory.close();
hibernage核心api
Configuration
1.到src下面找到名稱hibernate.cfg.xml配置文件,創建對象,把配置問問文件放到對象裏面
(加載核心配置文件)
SessionFactory(重點)
1.使用configuration對象創建sessionFactory對象
創建sessionfactory過程中做事情
根據核心配置文件中,有數據庫配置,有映射文件部分,到數據庫里根據映射
把表創建
2.創建sessionFactory過程中,這個過程特別耗資源的
*在hibernate操作中,建議一個項目一般創建一個sessionFactory對象
3.具體實現
*寫工具類,寫靜態代碼塊實現
靜態代碼塊在類加載時候執行,執行一次
session(重點)
1.session類似於jdbc中connection
2.調用session裏面不同的方法實現crud操作
*1.添加save方法
*2.修改update方法
*3.刪除delete方法
*4.根據id查詢get方法
3.session對象單線程對象
*1.session對象不能共用,只能自己使用
Transaction
1.事務對象
2.事務提交回滾
tx.commit();//提交
tx.rollback();//回滾
3.事務
*事務四個特性
原子性:事務是數據庫的邏輯工作單位,事務中包括的諸操作要麼全做,要麼全不做
一致性;事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態。
一致性與原子性是密切相關的。
隔離性:一個事務的執行不能被其他事務干擾
持久性:一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的
解決配置文件沒有提示問題
1.可以上網
2.把約束文件引入到eclipse中
window pr..... 搜鎖 xml c 點擊add 選擇url 路徑 最後重啓eclipse
+++++++++++++++++++++++++++++++++
=================================
+++++++++++++++++++++++++++++++++
Hibernate第二天
1.實體類的編寫規則
2.hibernate主鍵生成策略
3.實體類操作
*1.crud操作
*2.實體類對象狀態
4.hibernate的一級緩存
5.hibernate的事務操作
*1事務代碼規則寫法
6.hibernate其他的api(查詢)
實體類編寫規則
1.實體類裏面屬性私有的
2.私有屬性使用get set方法操作
3.要有實體類屬性作爲唯一值(一般使用id值)
4.實體類屬性建議不實用基本數據類型,使用基本數據類型對應的包裝類
1.八個基本數據類型對應的包裝類
int Integer
char Character
其他的都是首字母大寫比如 double Double
2.比如 表示學生的分數,加入int score;
比如學生得了0分,int score=0;
如果表示學生沒有參加考試,int score=0;不能準確表示學生是否參加考試
解決:使用包裝類可以了,Integer score=0;表示學生得了0風,
表示學生沒有參加考試,Integer score=null;
hibernate主鍵生成策略
1.hibernate要求實體類裏面有一個屬性作爲唯一值,對應表主鍵,,
主鍵可以不同生成策略
2.hibernate主鍵生成策略有很多值
3.class標籤屬性裏面有
native:根據好似用的數據庫幫選擇那個值
uuid:之間web階段寫代碼生成uuid值,hibernate幫我們生成uuid值
increment增值爲1
identity只能用在mysql
實體類crud操作
1.調用session的方法實現添加
2.根據id查詢
實體類對象狀態(概念)
1.實體類的三種狀態
*.瞬時態:對象裏面沒有id值,對象與session沒有關聯
User user = new User();
user.setName("小明");
user.setPasswrod(123);
user.setAddress("烏魯木齊");
*.持久態;對象裏面有id值,對象與session有關聯
User user = session.get(User.class,1);
*.託管態:對象裏面有id值,對象與session沒有關聯
User user = new User();
user.setUid(3);
持久態會自動更新,update
如果實體類的狀態是瞬時態 則做添加 session.saveOrUpdate(user);
如果實體類的狀態是託管態 則做修改 session.saveOrUpdate(user);
如果實體類的狀態是持久態 則做修改 session.saveOrUpdate(user);
hibernate的一級緩存
什麼是緩存
1.數據存到數據庫裏面,數據庫本身是文件系統,使用流方式操作文件效率不是很高
1.把數據存到內存裏面,不需要使用流方式,可以直接讀取內存中數據
2.把數據放發哦內存中,提供讀取效果
hibernate緩存
1.hibernate框架中提供很多有話發那個是,hibernate的緩存就是iyige優化方式
2.hibernate緩存特點:
第一類 hibernate的一級緩存
*1.hibernate的一級緩存默認打開的
*2.hibernate的一級緩存使用範圍,是session的範圍
*3.hibernate的一級緩存中,存儲數據必須是持久態
第二類 hibernate的二級緩存
*1.目前已經不使用了,替代技術 redis
*2.二級緩存默認不是打開的,需要配置
*3.二級緩存使用範圍,是sessionFactory範圍
第一步執行get方法後,發送sql語句查詢數據庫
第二步執行get方法之後,沒有發送sql語句,查詢一級緩存內容
*一級緩存是session範圍的
*二級緩存是sessionFactory範圍的
一級緩存持久態執行過程
第一次查詢會把查詢結果存到持久態中同時存在一級緩存和快照區中,
然後做修改操作user.setUsername("lilei");
修改的同時把一級緩存中的數據修改了,但是快照區沒有改
最後提交事務的時候,比較一級緩存的內容和快照區的內容是否相同
如果不相同,把一級緩存內容更新到數據庫中
Hibernate事務的操作
1.什麼是事務
2.事務特性
3.不考慮隔離性產生問題
*1.髒讀
*2.幻讀、虛讀
*3.不可重複讀
4.設置事務隔離級別
*1.mysql默認隔離級別repeatable read
hibernate事務代碼規範寫法
1.代碼結果
try{
開啓事務
提交事務
}catch(){
回滾事務
}finally{
關閉
}
Hibernate綁定session
1.session類似於jdbc的connection
2.幫實現與本地綁定session
3.獲取與本地線程session
*1.在hibernate核心配置文件中配置
*2.調用sessionFactory裏面的方法得到
Hibernate 的api使用
Query對象
1.使用query對象,不需要寫sql語句,但是寫hql語句
*1.hql:hibernate query language ,
hibernate提供查詢語言,這個hql語句和普通sql語句很相似
*2.hql和sql語句的區別
使用sql操作表和表字段
使用hql操作表和表字段
2.查詢所有hql語句:
*1. from 實體類名稱
3.Query對象使用
*1.創建Query對象
*2.調用Query對象裏面的方法得到結果
Criteria對象
1.使用這個對象查詢操作,但是使用這個對象時候,不需要寫語句,值金額調用方法實現
2.實現過程
*1.創建citeria對象
*2.調用對象裏面的發那個發得到結果
SQLQuery對象
1.使用hibernate時候,調用底層sql實現
2.實現過程
*1.創建對象
*2.調用對象的方法得到結果
MVC
它不是java獨有,所有的B/S結構的項目都在使用它!
M -- model模型(自己寫代碼)
V -- View視圖 (jsp)
C -- Cotroller控制器 (Servlet)
javaweb三層架構
web層 -->與web相關的內容(Servlet)
業務層 -->業務對象(Service)
數據層 --> 操作數據庫(DAO Data Access Object)
+++++++++++++++++++++++++++++++++++++++++++++
*********************************************
+++++++++++++++++++++++++++++++++++++++++++++
hibernate第三天
表與表之間關係回顧
1.一對多
*分類和商品關係,一個分類裏面有多個商品,一個商品只屬於一個分類
2.多對多
*訂單和商品的關係,一個訂單裏面有多個商品,一個商品屬於多個訂單
3.一對一
*在中國,一個男人只能有一個妻子,一個女人也只有一個老公
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.