hibernate基礎01概述_環境搭建

                                                  前言

1.web內容

(1)javaee三層結構

a.web層/表現層(UI) struts2框架

b.service層/業務邏輯(BLL) spring框架

c.dao層/數據訪問(DAL) hibernate框架——對數據庫進行crud操作

(2)MVC思想

a.M模型

b.V視圖

c.C控制器

(3)區別

三層架構和MVC是有明顯區別的,MVC應該是展現模式(三個加起來纔是三層架構中的UI層)。

三層架構就是將整個業務應用劃分爲:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。區分層次的目的即爲        了“高內聚,低耦合”的思想。

a、表現層(UI):通俗講就是展現給用戶的界面,即用戶在使用一個系統的時候他的所見所得。   

b、業務邏輯層(BLL):針對具體問題的操作,也可以說是對數據層的操作,對數據業務邏輯處理。   

c、數據訪問層(DAL):該層所做事務直接操作數據庫,針對數據的增添、刪除、修改、更新、查找等。 

MVC是 Model-View-Controller,嚴格說這三個加起來纔是三層架構中的UI層,MVC把三層架構中的UI層再度進行了分化,     分成了控制器、視圖、實體三個部分,控制器完成頁面邏輯,通過實體來與界面層完成通話;而C層直接與三層中的BLL進行      對話。

MVC可以是三層中的一個表現層框架。三層和MVC可以共存。 三層是基於業務邏輯來分的,而MVC是基於頁面來分的。     MVC主要用於表現層,3層主要用於體系架構,3層一般是表現層、中間層、數據層。

 

2.hibernate概述

(1)dao層框架

對JDBC進行封裝,不需要寫sql

開源(免費)的輕量級(單獨使用,所需jar包較少)的框架

 

(2)orm思想:

a.對數據庫進行操作

b.實體類

c.object(對象),relational(關係),mapping(映射)

文字描述:

①讓實體類和數據庫表進行一一對應關係

讓實體類首先和數據庫表對應

讓實體類屬性 和 表裏面字段對應

②不需要直接操作數據庫表,而是操作表所對應實體類的對象

(3)jdbc:

a.加載驅動 Class.forName("");

b.創建連接 Connection conn =

DriverManager.getConnection(url,username,passeord);

c.sql編寫 String sql = "select * from user";

PreparedStatement psmt = conn.prepareStatement(sql);

d.執行sql ResultSet rs = psmt .executeQuery();

e.遍歷結果集

f.關閉連接

(4)hibernate

在lib下放入jar包

 

 

a.實體類

public class User {

private int uid;

private String username;

private String password;

private String address;

//get、set方法

}

 

b.創建實體類對應的配置文件(User.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>

<!-- 配置類與表的對應 -->

<class name="cn.entiey.User" table="t_user">

<!-- 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-mapping>

 

c.創建hibernate配置文件(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>

<!-- 1. 配置數據庫信息 -->

<property name="hibernate.connection.driver_class">

com.mysql.jdbc.Driver</property>

<!-- hibday1數據庫名稱 -->

<property name="hibernate.connection.url">

jdbc:mysql:///hibday1?characterEncoding=utf-8</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">root</property>

<!--2. 配置hibernate信息 可選的-->

<!-- 輸出底層sql語句 -->

<property name="hibernate.show_sql">true</property>

<!-- 輸出底層sql語句格式 -->

<property name="hibernate.format_sql">true</property>

<!-- hibernate創建表,需要配置之後

update: 如果已經有表,更新,如果沒有,創建

-->

<property name="hibernate.hbm2ddl.auto">update</property>

<!-- 3. 配置數據庫方言

在mysql裏面實現分頁 關鍵字 limit,只能使用mysql裏面

在oracle數據庫,實現分頁rownum

讓hibernate框架識別不同數據庫的自己特有的語句

-->

<property name="hibernate.dialect">

org.hibernate.dialect.MySQLDialect</property>

<!-- 4. 把映射文件放到核心配置文件中 -->

<mapping resource="cn/entiey/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

 

d.測試

public class test {

@Test

public void add() {

// 第一步 加載hibernate核心配置文件

Configuration cfg = new Configuration();

cfg.configure();

// 第二步 創建SessionFactory對象

//讀取hibernate核心配置文件內容,創建sessionFactory

//在過程中,根據映射關係,在配置數據庫裏面把表創建

// SessionFactory sessionFactory = cfg.buildSessionFactory();

SessionFactory sessionFactory = HibernateUtils.getSessionFactory();

// 第三步 使用SessionFactory創建session對象

Session session = sessionFactory.openSession();

// 第四步 開啓事務

Transaction tx = session.beginTransaction();

// 第五步 寫具體邏輯 crud操作

//添加功能

User user = new User();

user.setUsername("111");

user.setPassword("111");

user.setAddress("111");

//調用session的方法實現添加

session.save(user);

// 第六步 提交事務

tx.commit();

// 第七步 關閉資源

session.close();

sessionFactory.close();

}

}

e.相應的util

public class HibernateUtils {

static Configuration cfg = null;

static SessionFactory sessionFactory = null;

static {

//加載核心配置文件

cfg = new Configuration();

cfg.configure();

sessionFactory = cfg.buildSessionFactory();

}

//提供方法返回sessionFactory

public static SessionFactory getSessionFactory() {

return sessionFactory;

}

}

 

代碼解析:

Configuration

Configuration cfg = new Configuration();

cfg.configure();

1.到src下面找到名稱hibernate.cfg.xml配置文件,創建對象,把配置文件放到對象裏面(加載核心配置文件)

 

SessionFactory

SessionFactory sessionFactory = HibernateUtils.getSessionFactory();

1 使用configuration對象創建sessionFactory對象

(1)創建sessionfactory過程中做事情:

數據庫配置,映射文件部分,到數據庫裏面根據映射關係把表創建

2 創建sessionFactory過程中,這個過程特別耗資源的

3 具體實現

(1)工具類,靜態代碼塊實現

 

Session

1 session類似於jdbc中connection

2 調用session裏面不同的方法實現crud操作

(1)添加 save方法

(2)修改 update方法

(3)刪除 delete方法

(4)根據id查詢 get方法

3 session屬於單線程對象

 

Transaction

1 事務對象

2 事務提交和回滾方法 

3 事務概念

(1)事務四個特性

原子性、一致性、隔離性、持久性

原子性: 事務要麼都執行要麼都不執行,不可分割的工作單位(一個成功一個失敗結果失敗)

一致性:事務操作前後數據總量不變。

隔離性:多個事務操作同一條記錄,相互之間沒有影響。

持久性:事務提交,對數據庫的改變是永久的,不會因爲數據庫系統故障而丟失提交的事務。

 

 

 

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