1.原型設計: 將頁面的模塊、元素、人機交互的形式,利用線框描述的方法,將產品脫離皮膚狀態下更加具體跟生動的進行表達. 2.下麵的是使用PowerDesigner進行設計的持久層的層次結構圖: 虛線三角表示的是“實現介面” 實線三角表示的“繼承” 其中,下圖使用了依賴倒置的原則:高層模塊不應該依賴與 ...
將頁面的模塊、元素、人機交互的形式,利用線框描述的方法,將產品脫離皮膚狀態下更加具體跟生動的進行表達.
2.下麵的是使用PowerDesigner進行設計的持久層的層次結構圖:
虛線三角表示的是“實現介面” 實線三角表示的“繼承”
其中,下圖使用了依賴倒置的原則:高層模塊不應該依賴與底層
其中AbstractBaseDao抽象類是為了有選擇性的實現特定功能,採用了設計模式中的模版模式。
上圖採用的是門面模式。
3. Hibernate(ORM,即Object-Relational Mapping)對象關係映射:
作用就是在關係型資料庫和對象之間做了一個映射。從對象(Object)映射到關係(Relation),再從關係映射到對象。這樣,我們在操作資料庫的時候,不需要再去和複雜SQL打交道,只要像操作對象一樣操作它就可以了(把關係資料庫的欄位在記憶體中映射成對象的屬性)。
從上圖中,我們可以看出Hibernate六大核心介面,兩個主要配置文件,以及他們直接的關係。Hibernate的所有內容都在這了。那我們從上到下簡單的認識一下,每個介面進行一句話總結。
1、Configuration介面:負責配置並啟動Hibernate
2、SessionFactory介面:負責初始化Hibernate
3、Session介面:負責持久化對象的CRUD操作
4、Transaction介面:負責事務
5、Query介面和Criteria介面:負責執行各種資料庫查詢
註意:Configuration實例是一個啟動期間的對象,一旦SessionFactory創建完成它就被丟棄了。
其中:hibernate.cfg.xml事例代碼如下:
1 <!DOCTYPE hibernate-configuration PUBLIC 2 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 4 5 <hibernate-configuration> 6 <session-factory> 7 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 8 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 9 <property name="hibernate.connection.url">jdbc:mysql://localhost/XXX</property> //XXX為本地資料庫名稱 10 <property name="hibernate.connection.username">root</property> //連接資料庫賬號 11 <property name="hibernate.connection.password">root</property> //連接數據密碼 12 <property name="hibernate.show_sql">true</property> 13 <property name="hibernate.hbm2ddl.auto">update</property> 14 <mapping resource="com/djdj/entity/Order.hbm.xml"/> //mapping 為實體代碼到資料庫的映射 15 </session-factory> 16 </hibernate-configuration>
//Order.hbm.xml代碼如下:
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6 <class name="com.djdj.entity.Order" table="tb_order"> //name為實體類 ,table 為在資料庫建的表名稱 7 <id name="id"> 8 <generator class="native"></generator> 9 </id> 10 <property name="orderNo"></property> 11 12 <set name="item"> 13 <key column="orderNo"></key> //其中key中column的值要跟many-to-one中column的值相等 14 <one-to-many class="com.djdj.entity.OrderItem"></one-to-many> //one-to-many 代表一對多的關係 many-to-one 多對一 many-to-many 代表多對多的關係 15 16 </set> 17 </class> 18 </hibernate-mapping>
實體類Order的代碼如下:
package com.djdj.entity; import java.io.Serializable; import java.util.Set; public class Order implements Serializable{ private int id; private int orderNo; private Set<OrderItem> item; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getOrderNo() { return orderNo; } public void setOrderNo(int orderNo) { this.orderNo = orderNo; } public Set<OrderItem> getItem() { return item; } public void setItem(Set<OrderItem> item) { this.item = item; } }
Hibernate調用配置文件創建資料庫表的代碼如下:
public class CreateTable { public static void main(String[] args) { //讀配置 Configuration cfg = new Configuration().configure(); SchemaExport export = new SchemaExport(cfg); export.create(true, true); } }
測試代碼如下:
public class Test { public static void main(String[] args) { //讀取配置 Configuration cfg = new Configuration().configure(); //獲取SessionFactory SessionFactory factory =cfg.buildSessionFactory(); //獲取session Session session=null; try{ session =factory.openSession(); //開啟事務 session.beginTransaction();
// //中間進行數據操作代碼的編寫
//
session.getTransaction().commit(); }catch (Exception e) { e.printStackTrace(); }finally{ session.close(); //離線不更改 //u.setName("1"); } } }
以User為例,實現增刪查改的代碼如下:
//設置user // User user = new User(); // user.setName("st2"); // user.setPwd("1112"); //save 之前是瞬時對象 ,之後為持久化對象:和資料庫數據相關 // session.save(user); //查詢對象 // User u=(User)session.get(User.class, 2); //load獲取代理對象,效率高,只有真正在使用過程中獲取真實對象,get直接獲取真實對象。 // User u=(User)session.load(User.class, 2); // System.out.println(u.getName()); //刪除對象 // User u=(User)session.get(User.class, 2); // System.out.println(u.getName()); // session.delete(u); //修改對象 User u=(User)session.get(User.class, 2); System.out.println(u.getName()); u.setName("sys"); session.update(u);
級聯操作:
Casade用來說明當對主對象進行某種操作時是否對其關聯的從對象也作類似的操作,常用的cascade:
none,all,save-update,delete, lock,refresh,evict,replicate,persist,
merge,delete-orphan(one-to-many)。一般對many-to-one,many-to-many不設置級聯,在<one-to-one>和<one-to-many>中設置級聯。
sagacity_shen
初定於 2017-09-20 00:58:34