Hibernate實(shí)用技術(shù).ppt
《Hibernate實(shí)用技術(shù).ppt》由會員分享,可在線閱讀,更多相關(guān)《Hibernate實(shí)用技術(shù).ppt(107頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、程序設(shè)計(jì)實(shí)用技術(shù) - Hibernate 目標(biāo): 深入理解持久層框架 掌握 Hibernate配置方法、開發(fā)流程 掌握 Hiberate性能優(yōu)化 學(xué)習(xí)對象: 具備一定 Java編程能力的初級程序員 。 預(yù)備知識: 了解數(shù)據(jù)庫的基本概念 熟悉常用 SQL語言,具備一定的 Java編 程能力 課程內(nèi)容: 持久層和 ORM Hibernate基礎(chǔ) Hibernate性能優(yōu)化 程序設(shè)計(jì)實(shí)用技術(shù) JAVA方向 第一講 持久層和 ORM 章節(jié)目標(biāo): 理解持久層和 ORM 持久層概述: 什么是 持久化 ? 什么是 持久層 ? “ 持久化 ” 與 “ 持久層 ” 之間的 關(guān)系 ? 持久層概述: 什么是持久化?
2、 將數(shù)據(jù)保存到物理的儲存器(硬盤、磁帶 等)上的過程叫持久化。 什么是持久層? 專門負(fù)責(zé)處理與物理數(shù)據(jù)相關(guān)操作(持久化 數(shù)據(jù),以供日后使用)的獨(dú)立層次。 之間的關(guān)系? 持久化是動(dòng)詞,表示將內(nèi)存中的數(shù)據(jù)存儲到 數(shù)據(jù)庫或其他媒介。 持久層是名詞,實(shí)現(xiàn)數(shù)據(jù)持久化的一個(gè)相對 獨(dú)立的領(lǐng)域(層)。 消費(fèi)者 /前 端 倉庫 /數(shù)據(jù)庫系統(tǒng) 消費(fèi)者 /前 端 倉庫 /數(shù)據(jù)庫系統(tǒng) 商場 /業(yè)務(wù)類 消費(fèi)者 /前 端 倉庫 /數(shù)據(jù)庫系統(tǒng) 超市 /業(yè)務(wù)類 物流公司 /持久層 現(xiàn)實(shí)模型與持久層 ? Application上層應(yīng)用層 Transaction Layer 事務(wù)層 Data Access Logic 數(shù)據(jù)訪問邏
3、輯 Persistence Layer 持久層 Database 數(shù)據(jù)層 持久層邏輯邊界 ? View Control Model JSP Action 持久層 Database 業(yè)務(wù)邏輯 持久層在 MVC中: 持久層解決了 MVC什么問題? 當(dāng)發(fā)生以下三種情況: ( 1)表示層發(fā)生變化 ( 2)業(yè)務(wù)邏輯層發(fā)生變化 ( 3)底層數(shù)據(jù)格式或持久化機(jī)制發(fā)生變化 數(shù)據(jù) 持久化代碼 不需要重新編譯 為什么可以達(dá)到上述目標(biāo)?是什么來的? 解耦合 持久層概述: 什么是解耦合? 采用某種方法將緊密耦合的關(guān) 系轉(zhuǎn)換為松散耦合的關(guān)系的過程 什么是耦合度? 兩個(gè)事物之間的耦合程度 什么是耦合度適中? 事物之間的耦
4、合度符合實(shí)際情況 或要求 緊耦合 耦合適中 太松耦合 持久層概述: 現(xiàn)實(shí)中還有哪些解耦合的實(shí)例? 電腦 ,各個(gè)組件(顯示器、 CPU、硬盤、內(nèi)存)之間 相互獨(dú)立,組合在一起又能一起工作,連接它們的是 共同實(shí)現(xiàn)的標(biāo)準(zhǔn)接口;(思考集成顯卡、網(wǎng)卡?) 電腦上的 USB接口與原來的串口之間存在耦合度區(qū)別; 建筑中的磚混結(jié)構(gòu)、框架結(jié)構(gòu); 社會上各行各業(yè)的產(chǎn)生,也是一種解耦合的過程。發(fā) 電廠的建立,使工廠不必為了開動(dòng)機(jī)器去發(fā)電; 工程化也可以說就是一個(gè)解耦合的過程 。 現(xiàn)實(shí)中的解耦合的實(shí)例: 持久層概述: 軟件設(shè)計(jì)中解耦合的自然進(jìn)化 實(shí)例:記錄論壇用戶登錄次數(shù) public boolean addLogi
5、nCount(String id,int count) Connection conn = null; Statement stmt = null; try Class.forName(“oracle.jdbc.driver.OracleDriver”); conn = DriverManager.getConnection( “ jdbc:orcle:thin:dbServer:1521:forum”, “ MyUserName”, “ MyPassword”); String sqlStr = “update BBSUser set loginCount=loginCount+1” + “
6、 where id=”+id+”; stmt = conn.createStatement(); return stmt.execute(sqlStr); catch(ClassNotFoundException e) e.printStackTrace(); public boolean addLoginCount(String id,int count) Connection conn = null; Statement stmt = null; try Class.forName(Config.getValue(“JDBC_DRIVER”); conn = DriverManager.g
7、etConnection( Config.getValue(“DB_URL”), Config.getValue(“DB_USER”), Config.getValue(“DB_PWD”); String sqlStr = “update BBSUser set loginCount=loginCount+1” + “ where id=”+id+”; stmt = conn.createStatement(); return stmt.execute(sqlStr); catch(ClassNotFoundException e) e.printStackTrace(); 實(shí)例:記錄論壇用戶
8、登錄次數(shù) 從編寫代碼的角度看他們的優(yōu)點(diǎn): ()第一段代碼很容易掌握,容易理 解,直截了當(dāng),可以很好的執(zhí)行。 ()第二段代碼要引入一個(gè)外部文件, 用來保存數(shù)據(jù)庫連接信息,不大容易實(shí)現(xiàn), 但也比較好理解,也可以很好的執(zhí)行。 從耦合度的角度看,比較其優(yōu)缺點(diǎn)? 如數(shù)據(jù)庫密碼泄露,管理員要修改數(shù)據(jù)庫 密碼 : 第一段代碼: ()找到所有的與數(shù)據(jù)庫連接相關(guān)的代碼,修 改密碼; ()重新編譯修改后的文件; ()重新部署軟件。 第二段代碼: ()修改外部文件中配置的密碼; ()不需要重新編譯; ()不需要重新部署軟件。 進(jìn)一步改進(jìn)的方法? Connection conn = DBHelper.getConne
9、ction(); 再進(jìn)一步改進(jìn)的方法? ? 軟件設(shè)計(jì)中解耦合的目標(biāo) 為什么要解耦合? 從 MVC理解軟件設(shè)計(jì)中的解耦合 軟件系統(tǒng)解耦合的目標(biāo): 數(shù)據(jù)訪問 操作系統(tǒng) 數(shù)據(jù)庫系統(tǒng) 應(yīng)用系統(tǒng) 應(yīng)用邏輯 應(yīng)用程序?qū)觾?nèi)部解耦合? 業(yè)務(wù)邏輯與數(shù)據(jù)訪問邏輯分離 應(yīng)用程序與資源層解耦合? 應(yīng)用層邏輯與底層數(shù)據(jù)庫、操作系統(tǒng)結(jié)構(gòu)分離 程序設(shè)計(jì)實(shí)用技術(shù) JAVA方向 第二講 DAO模式解耦合 解耦合實(shí)例 : DAO模式 示例:銀行轉(zhuǎn)帳 現(xiàn)有 賬戶 A 賬戶 B 轉(zhuǎn)帳金額 amount 由賬戶 A轉(zhuǎn)給賬戶 B。 編寫一個(gè)方法,實(shí)現(xiàn)轉(zhuǎn)帳。 public boolean zhuanzhang(String user1,S
10、tring user2,int amount) Connection conn = DBHelper.getConnection(); /獲得數(shù)據(jù)庫連接 PrearedStatement stmt = conn.prepareStatement( “ select * from user where username=?”); stmt.setString(1,user1); ResultSet user1_Set = stmt.executeQuery(); if (user1_Set.next() /檢查 賬戶 A 余額是否夠轉(zhuǎn)帳 , 夠則減掉要轉(zhuǎn)帳的金額 if (user1_Set.ge
11、tInt(“amount”)=amount) PrearedStatement stmt = conn.prepareStatement( “ update user set amount = amount-“ stmt.executeUpdate(); else return false; /余額不足 else return false; /找不到 賬戶 A /將 賬戶 B 加上轉(zhuǎn)帳金額 PrearedStatement stmt = conn.prepareStatement( “ update user set amount=amount+” stmt.setString(1,user2
12、); stmt.executeUpdate(); return true; 示例:銀行轉(zhuǎn)帳 上例實(shí)現(xiàn)了三個(gè)操作: ()檢查賬戶 A的余額是否夠轉(zhuǎn)帳; ()在賬戶 A中減掉要轉(zhuǎn)帳的金額; ()在賬戶 B中加上要轉(zhuǎn)帳的金額。 最后 DAO模式下的代碼: public boolean zhuanzhang(String user1,String user2,int amount) User userA = UserProxy.getUser(user1); /分離數(shù)據(jù)訪問邏輯 User userB = UserProxy.getUser(user2); return userA. accord(us
13、erB , amount); Factory模式 Proxy模式 DAO模式: Data Accessor Object(數(shù)據(jù)訪問對象 DAO) Data 數(shù)據(jù) Data Accessor 數(shù)據(jù)訪問器 Domain Object 領(lǐng)域?qū)ο?(數(shù)據(jù)抽象 ) DAO模式分解 DAO模式解耦合的目標(biāo): Application 應(yīng)用邏輯 Data Accessor 數(shù)據(jù)訪問抽象 Domain Object業(yè)務(wù)對象 Database Accessor Abstract 數(shù)據(jù)訪問接口 Database Accessor Imp 數(shù)據(jù)訪問實(shí)現(xiàn) DAO模式實(shí)現(xiàn)的層次 數(shù)據(jù)存儲邏輯與業(yè)務(wù)邏輯分離 數(shù)據(jù)存儲邏輯與
14、數(shù)據(jù)底層實(shí)現(xiàn) 分離 ( 資源層解耦合 ) 封裝業(yè)務(wù)對象 Database 在 DAO模式中引入 Factory模式: 如何理解 Factory工廠模式 ? 根據(jù)給定的模具( 類名稱 ), 從倉庫里取出相應(yīng)原料( 類代碼 ), 加工成產(chǎn)品( 類實(shí)現(xiàn)或?qū)ο?)。 Factory模式: Factory模式: UserDAO userDAO = DAOFactory.getDAO(UserDAO.class); User userA = userDAO.getUser(User1); Factory在 DAO的作用? 根據(jù)需要加載相應(yīng)的實(shí)現(xiàn),具體點(diǎn)說就是: 給定 UserDAO.class類名,產(chǎn)生
15、UserDAO類實(shí)現(xiàn)。 之前的實(shí)現(xiàn) 完成銀行轉(zhuǎn)帳: public boolean zhuanzhang(String user1,String user2,int amount) UserDAO userDAO = DAOFactory.getDAO(UserDAO.class); User userA = UserDAO.getUser(user1); User userB = UserDAO.getUser(user2); return userA. accord(userB,amount); 最終版本 現(xiàn)實(shí)生活中的 Proxy代理? 軟件開發(fā)中的 Proxy代理? 在 DAO模式中引入
16、Proxy模式 在 DAO模式中引入 Proxy模式 public class UserProxy public static User getUser(String userid) UserDAO userDAO = (UserDAO)DAOFactory.getDAO(UserDAO.class); return userDAO.getUser(userid); public static void sava(User user) UserDAO userDAO = (UserDAO)DAOFactory.getDAO(UserDAO.class); userDAO.save(user);
17、 最終版本 為什么要引入 Proxy? 、使得代碼看起來更整潔 、為附加其他功能留接口 、? 為什么要引入 Proxy? 思考類比房屋建筑中的代理層? 最終版本 DAO模式總結(jié): Client DAOFactory UserDAO UserObject UserProxy UserData/Table DBHelper 應(yīng)用層 數(shù)據(jù)訪問層 數(shù)據(jù)層 對象 /關(guān)系映射 DAO模式總結(jié): 對象 描述 Client 業(yè)務(wù)邏輯,相對與數(shù)據(jù)庫層來說是客戶 UserProxy 執(zhí)行代理,執(zhí)行業(yè)務(wù)邏輯需要的針對數(shù)據(jù)庫的操作 DAOFactory DAO工廠,根據(jù)配置文件產(chǎn)生 DAO對象類 UserDAO DA
18、O對象,使用 DBHelper連接數(shù)據(jù)庫,加載數(shù)據(jù) /實(shí)例 化 DAO DBHelper 連接數(shù)據(jù)庫幫助類,使用配置文件連接數(shù)據(jù)庫 UserObject 數(shù)據(jù)封裝類,具有屬性和 get/set方法,對表 /關(guān)系數(shù) 據(jù)進(jìn)行封裝 UserDate/Table 數(shù)據(jù)庫表,表記錄是 UserObject的屬性,實(shí)例化 UserObject DAO模式總結(jié): Client Object/業(yè)務(wù)邏輯 DAOProxy/代理 DAOFactory/DAO工廠 Implementation/DAO實(shí)現(xiàn) DAOConfiguration 調(diào)用服務(wù)方法 獲得服務(wù)實(shí)現(xiàn)接口 獲得 DAO配置 獲得 DAO/服務(wù)實(shí)現(xiàn) 執(zhí)
19、 行 方 法 返回結(jié)果 ( 1) interface接口,在實(shí)現(xiàn)解耦合中的作用? ( 2) Java Class動(dòng)態(tài)加栽? ( 3) XML配置文件? 回顧與 DAO相關(guān)的知識: 提升持久層性能 軟件系統(tǒng)中有哪些性能指標(biāo)? 提升持久層性能: 數(shù)據(jù)庫容量 執(zhí)行某次業(yè)務(wù)的時(shí)間 同時(shí)并發(fā)訪問數(shù) 等等 軟件系統(tǒng)中有哪些性能指標(biāo)? 系統(tǒng)性能低下有哪些原因? 提升持久層性能: 硬件環(huán)境、網(wǎng)絡(luò)環(huán)境差 軟件配置環(huán)境低(操作系統(tǒng)、數(shù)據(jù)庫 系統(tǒng))達(dá)不到系統(tǒng)使用要求 設(shè)計(jì)本身存在缺陷 系統(tǒng)性能低下有哪些原因? 設(shè)計(jì)本身存在缺陷,主要表現(xiàn)在: 、算法不科學(xué)合理 、資源的管理和調(diào)配失當(dāng) 哪一個(gè)是最主要因素? 提升持久層
20、性能: 從前有一個(gè)鋼鐵工廠,有個(gè)車間,每個(gè)車間的 生產(chǎn)效率都很高(工人技能高、生產(chǎn)管理科學(xué)、設(shè)備 先進(jìn)); 每個(gè)車間都設(shè)立有自己的原料采購車隊(duì),以保障生產(chǎn) 所需的原料。 (存在的問題?如何解決?) 提升持久層性能: 從前有一個(gè) DAO模式的系統(tǒng),有個(gè)子過程,每 個(gè)子過程的執(zhí)行效率都很高(代碼非常簡練,并經(jīng)過 代碼優(yōu)化); 每個(gè)子過程都包含有自己的數(shù)據(jù)庫連接,以保障有效 的數(shù)據(jù)存取。 (存在的問題?如何解決?) 提升持久層性能: 問題出現(xiàn)的前提: “ 大量 ” 提升持久層性能: 市場對鋼鐵的需求 “ 大量 ” 增 長 用戶同時(shí)登陸的數(shù)量 “ 大量 ” 增 長 會出現(xiàn)什么大問題? 提升持久層性能:
21、 措施: Connection Pool 數(shù)據(jù)庫連接池 請求獲得連接 數(shù)據(jù)庫連接池 判斷是否 有 有 沒有 創(chuàng)建一個(gè)連接 移除返回連接 提升持久層性能: Connection Pool 數(shù)據(jù)庫連接池 請求返回連接 數(shù)據(jù)庫連接池 判斷是否滿 滿 不滿 加入到池中 關(guān)閉連接 提升持久層性能: 數(shù)據(jù)庫連接池技術(shù)帶來的優(yōu)勢? ( 1)資源重用 ( 2)更快的響應(yīng)速度 ( 3)控制資源分配 ( 4)避免連接泄露 提升持久層性能: 措施:緩存 計(jì)算機(jī)領(lǐng)域的緩存有哪些? 緩存什么東西?為什么要緩存?緩存 到什么地方? 軟件系統(tǒng)中的緩存主要緩存什么? 提升持久層性能總結(jié)回顧: 、數(shù)據(jù)庫連接池引入的原因? 提升
22、系統(tǒng)性能。 、數(shù)據(jù)庫連接池與持久層的關(guān)系? 持久層負(fù)責(zé)數(shù)據(jù)訪問。 數(shù)據(jù)庫連接池負(fù)責(zé)統(tǒng)一管理和調(diào) 度數(shù)據(jù)庫連接。 有了數(shù)據(jù)庫連接才能訪問數(shù)據(jù)。 提升持久層性能: 理解持久層、 DAO、數(shù)據(jù)庫連接池這些 概念的目的是什么? 是: 對現(xiàn)有持久層來歷和發(fā)展方向有深入的理解,為 應(yīng)用開發(fā)打下理論基礎(chǔ)。 不是: 使用這些理論知識實(shí)現(xiàn)軟件項(xiàng)目中的持久層。 因?yàn)椋?不必為了吃面包,就要去種小麥。無論是商業(yè)領(lǐng) 域還是開源社區(qū),都為我們提供了豐富的、久經(jīng) 考驗(yàn)的持久層組件,比如 Hibernate。 程序設(shè)計(jì)實(shí)用技術(shù) JAVA方向 第三講 Hibernate基礎(chǔ)開發(fā) 回顧 現(xiàn)有持久層框架: Hibernate A
23、pache OJB Cayenne Jaxor iBatis jRelationFramework mirage SMYLE TopLink( oracle,非 開 源 產(chǎn) 品) Hibernate是什么 : 持久層框架? ORM映射理論? 提供強(qiáng)大、高性能的對象到關(guān)系型數(shù)據(jù)庫持久化服務(wù) 的框架產(chǎn)品(開源) Hibernate的起源 : Hibernate的設(shè)計(jì)者: Gavin King 2001年末,正式發(fā)布第一個(gè)版本 2003年中,發(fā)布 Hibernate2 2003年末, Hibernate被開源組織 JBoss收納 2005年初,發(fā)布 Hibernate3 為什么如此快速的成功 : 快
24、速發(fā)布、即時(shí)響應(yīng) 全面的回歸測試 避免過渡設(shè)計(jì) 集權(quán) 文檔 避免標(biāo)準(zhǔn)化 5分鐘內(nèi)成功運(yùn)行 Hibernate 開發(fā)人員的責(zé)任感 快速起步 快速起步準(zhǔn)備工作 : 下載: Hibernate Hibernate-Extension Middlegen-Hibernate JUnit Mysql 準(zhǔn)備開發(fā)工具: Eclipse MyEclipse4 準(zhǔn)備數(shù)據(jù)庫環(huán)境: Mysql/Oracle Hibernate配置 : Hibernate日志 : 第一程序 : 代碼解釋 : ()初始化 Hibernate配置管理類: Configuration。 ()通過 Configuration類實(shí)例創(chuàng)建 Se
25、ssion的工廠類: SessionFactory。 ()通過 SessionFactory得到: Session。 圖釋 : Hibernate hibernate.hbm.xml SessionFactory Session Database Configuration 理解 : Hibernate完成了什么配置工作 ? 如何完成的 ? Hibernate在數(shù)據(jù)操作中起到了什么作用 ? 如何做的 ? 基礎(chǔ)語法 Configuration SessionFactory Session hibernate.hbm.xml hibernate.properties (myHibernate.hb
26、m.xml) Session.save(user) Session.close() User.hbm.xml H I B E R N A T E 基礎(chǔ)語法 : Configuration類 負(fù)責(zé)管理 Hibernate的配置信息 Configuration config = new Configuration().configure(); File file = new File(“D:oramyHibernate.hbm.xml”); Configuration config = new Configuration().configure(file); 基礎(chǔ)語法 : SessionFacto
27、ry類 負(fù)責(zé)創(chuàng)建 Session實(shí)例 。 是線程安全的 , 可并發(fā)同時(shí)訪問 。 Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory(); 基礎(chǔ)語法 : SessionFactory類 SessionFactory實(shí)例是 Configuration實(shí) 例 config根據(jù)當(dāng)前的配置信息構(gòu)造的 。 多個(gè)數(shù)據(jù)庫就有多個(gè) config實(shí)例,并構(gòu) 造不同的 SessionFactory。 SessionFactory中保存著數(shù)據(jù)庫配置的 所有
28、映射關(guān)系,也維護(hù)緩存等,消耗巨大, 應(yīng)重點(diǎn)考慮重用策略。 基礎(chǔ)語法 : Session類 持久化操作的基礎(chǔ) Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory(); Session session = factory.openSession(); 基礎(chǔ)語法 : Hibernate Session與 HttpSession的區(qū)別 ? 基礎(chǔ)語法 : Session數(shù)據(jù)持久化方法: Save Get/Load flush Delete Q
29、uery、 Criteria 基礎(chǔ)配置 基礎(chǔ)配置 : Hibernate基礎(chǔ)配置 主要針對 SessionFactory展開 Hibernate內(nèi)部配置 與應(yīng)用服務(wù)器(或容器)的相關(guān)配置 基礎(chǔ)配置 : Hibernate配置方法 主要針對 SessionFactory展開 使用配置文件 ( hibernate.hbm.xml/hibernate.propert ies) ,在 Hibernate啟動(dòng)時(shí)加栽配置屬性。 使用 Configuration類在程序中,指定 配置屬性。 基礎(chǔ)配置 : Hibernate配置屬性分類: 數(shù)據(jù)庫連接 數(shù)據(jù)庫連接池 事務(wù)屬性 對象 /關(guān)系映射文件 其他屬性 H
30、ibernate O/R Mapping Hibernate O/R Mapping? Hibernate O/R Mapper? 基本數(shù)據(jù)類型映射 : Java數(shù)據(jù)類型 數(shù)據(jù)庫字段類型 O/R映射定義 Hibernate類型轉(zhuǎn)換 基本實(shí)體映射 : Java對象與數(shù)據(jù)庫表關(guān)系之間的映射: 類名 表名 主鍵映射 字段 屬性 基本數(shù)據(jù)類型映射 : Java對象 /POJO 數(shù)據(jù)庫表關(guān)系 O/R映射定義 Hibernate數(shù)據(jù)交換 基本實(shí)體映射 : Id int (pk) Name varchar(20) sex varchar(4) group_id int (fk) 學(xué)生表 Id int (pk
31、) Code varchar(50) createTime time 學(xué)生證表 private int id; private String name; private String sex; private int group; Card card; Student private int id; private String code; private time createtime Student student; Card 自定義數(shù)據(jù)類型 映射 : Hibernate自定義數(shù)據(jù)類型,接口: UserType CompositeUserType 將數(shù)據(jù)庫中復(fù)雜的數(shù)據(jù)格式轉(zhuǎn)換成業(yè)務(wù)層 易于
32、操作的類型對象 復(fù)合主鍵 映射 : 注意:有駁于業(yè)務(wù)邏輯和數(shù)據(jù)邏輯分離的原則 復(fù)合主鍵類: 基于實(shí)體類屬性的復(fù)合主鍵 基于主鍵類的復(fù)合主鍵 需要實(shí)現(xiàn): Serializable接口及 equals、 hashCode方法 Blob、 Clob字段映射: 不同的數(shù)據(jù)庫對應(yīng)的大對象類型不同 實(shí)體映射策略 : Component組件映射 繼承映射 Component組件映射 : id int firstName vchar(20) lastName vchar(20) sex int age int homeAdd vchar(100) officeAdd vchar(100) telZone vc
33、har(4) telPhone vchar(11) telPerson vchar(4) Name對象 Tel對象 通過將復(fù)雜的表字段分類,實(shí)現(xiàn)面向?qū)ο蟮念I(lǐng)域劃分,使 系統(tǒng)邏輯更加清晰。 繼承映射 : 學(xué)生表 id 姓名 性別 年齡 班級 老師表 id 姓名 性別 年齡 職務(wù) Person類 Student類 Teacher類 繼承映射 : 用戶表 id 姓名 性別 年齡 班級 學(xué)生表 id Person類 Student類 Teacher類 老師表 id 職務(wù) 繼承映射 : 用戶表 id 姓名 性別 年齡 班級 用戶類別 Person類 Student類 Teacher類 職務(wù) 級聯(lián)關(guān)系 關(guān)
34、系映射類別 : 一對一關(guān)聯(lián) /one-to-one 一對多關(guān)聯(lián) /one-to-many 多對一關(guān)聯(lián) /many-to-one 多對多關(guān)聯(lián) /many-to-many ORM(對象 /關(guān)系映射),不但包括對單獨(dú)的數(shù)據(jù)庫表和對象 的映射,還包括對表之間的關(guān)聯(lián)的影射。 一對一關(guān)聯(lián) : 主鍵關(guān)聯(lián) Id int (pk) Name varchar(20) sex varchar(4) group_id int (fk) 學(xué)生表 Id int (pk) Code varchar(50) createTime time 學(xué)生證表 private int id; private String name; p
35、rivate String sex; private int group; Card card; Student private int id; private String code; private time createtime Student student; Card 一對一關(guān)聯(lián) : 外鍵關(guān)聯(lián) Id int (pk) Name varchar(20) sex varchar(4) group_id int (fk) 學(xué)生表 Id int (pk) name varchar(50) 組表 private int id; private String name; private Stri
36、ng sex; private Group group; Student private int id; private String name; Group Student.hbm.xml Group.hbm.xml 一對多關(guān)聯(lián) : Id int (pk) Name varchar(20) sex varchar(4) group_id int (fk) 學(xué)生表 Id int (pk) address varchar(50) zipcode varchar(6) userid int 地址表 private int id; private String name; private Strin
37、g sex; private Group group; private Set address; Student private int id; private String address; private String zipcode; private int userid; private Student student; Address Student.hbm.xml Address.hbm.xml 多對多關(guān)聯(lián) : Id int (pk) role varchar(20) 角色表 Id int (pk) group varchar(20) 組 (崗位 )表 private int id; private String role; private Set groups; Role private int id; private String group; private Set roles; Group Role.hbm.xml Group.hbm.xml Role_id Group_id 角色 _組表
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。