前言
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)事務四個特性
原子性、一致性、隔離性、持久性
原子性: 事務要麼都執行要麼都不執行,不可分割的工作單位(一個成功一個失敗結果失敗)
一致性:事務操作前後數據總量不變。
隔離性:多個事務操作同一條記錄,相互之間沒有影響。
持久性:事務提交,對數據庫的改變是永久的,不會因爲數據庫系統故障而丟失提交的事務。