『壹』 怎麼將ACCESS資料庫映射到C++程序中 急!!!希望大家幫忙
C++的用場
Bjarne Stroustrup清晰地回答了這個問題。以下文字摘編自D&E簡體中文版《C++語言的設計和演化》。
在以下領域,C++有著根本性的優勢:低級系統程序設計、高級系統程序設計、嵌入式程序設計、數值科學計算、通用程序設計以及混合系統設計等等。讓我們略微展開描述一下:
1. 低級系統程序設計:C++是迄今為止最好的低級程序設計語言。
2. 高級系統程序設計:包括操作系統核心、網路管理系統、編譯系統、電子郵件系統、文字排版系統、圖像和聲音的編排系統、通訊系統、用戶界面、資料庫系統等等。
3. 嵌入式系統:包括照相機、汽車、火箭、電話交換機、汽車等等。
4. 數值/科學計算:包括模擬、實時數據獲取和資料庫訪問等等。
Bjarne的個人主頁上,有一頁applications,那兒列出了一些(全部或大部分)使用C++編寫的系統、應用程序和庫。下面是一些例子:
1. Adobe Systems:所有主要應用程序都使用C++開發而成,比如Photoshop & ImageReady、Illustrator和Acrobat等。
2. Maya:知道「蜘蛛人」、「指環王」的電腦特技是使用什麼軟體做出來的嗎?沒錯,就是Maya。
3. Amazon.com:使用C++開發大型電子商務軟體。
4. Apple:部分重要「零件」採用C++編寫而成。
5. AT&T:美國最大的電訊技術提供商,主要產品採用C++開發。
6. Google:Web搜索引擎採用C++編寫。
7. IBM:OS/400。
8. Microsoft:以下產品主要採用C++(Visual C++)編寫:
Windows XP
Windows NT:NT4、2000
Windows 9x:95、98、Me
Microsoft Office:Word、Excel、Access、PowerPoint、Outlook
Internet Explorer,包括Outlook Express
Visual Studio:Visual C++、Visual Basic、Visual FoxPro
.NET Framework類庫採用C#編寫,但C#編譯器自身則使用C++編寫而成。
Exchange
SQL Server
FrontPage
Project
所有游戲
......
9. KDE:K Desktop Environment(linux)。
10. Symbian OS:最流行的蜂窩電話OS之一。
我通常使用C++進行高端程序開發。
「通常」一詞沒什麼好說的,有時只是出於公司文化或個人愛好方面的原因,選用了別的語言而不是C++,或者相反。我所說的「高端」是指:關鍵業務處理,效率要求極高,實時性要求高等等。
我看見幾乎所有嚴肅的工控系統軟體和實時數據採集、處理和表現(主要是圖形)軟體,都是採用C++(或C,少部分採用java)編寫而成的。
據我的了解,我原先所在的研究院幾乎每一個研究所都在不同程度地使用C++(以及一些別的語言)。
想想看,迄今為止,現代Unix操作系統的各種變體上,最常使用的是什麼樣的開發語言?(C/C++)
C++語言
C++語言是靈活,但首先要看看使用者能不能發揮它的靈活性;C++語言夠強大,但要看看使用者有沒有本事發揮它的強大功能。
使用C++語言和編譯器編寫一個快速的程序,並不難,不過編寫一個強健而高效的大型程序,就不是那麼容易了。
語言之間的區別,絕非只是大括弧和begin、end或Sub、End Sub之間的區別。選擇了一種語言,你就選擇了一種思維方式,一種程序設計思想。要想跳出語言的束縛,首先要對語言有著深刻的認識和透徹的把握。世界上一些大師級的人物,也常常毫不掩飾自己對某種語言(我並沒有專指C++)的偏愛。一些人對語言尚一知半解,就大談要跳出語言的束縛了 — 你無需跳出,因為你根本不曾深入。
純粹的技術性(學術性)研究,總能給人帶來純粹的快樂。C++語言復雜至極,可研究性極強,但一般來說,沒有3~5年的持續學習、思考、使用,是不可能真正掌握C++的。
我不是唯語言論或唯工具論者,但我反對抹殺不同語言、不同開發工具之間的區別。抱持這種觀點的人,若非無知,即是別有用心。這就好比雜牌筆記本電腦廠商最喜歡叫嚷「筆記本電腦已經進入同質時代」一樣,雜牌機怎麼能和IBM相比?
選擇C++或選擇Java,要看你個人愛好和對將來的打算。雖然只是語言上的差別,但由此決定的就業領域的確不一樣。
不管你走什麼樣的技術路線,不管你用不用它做開發,學習C++總會帶來長遠的好處。一名熟悉C++的開發人員,假如他不是一個偏執狂的話,再學習Java或C#,都要容易得多。
C++不過是一門編程語言,我們總是要用它來解決實際問題,所以要學習開發工具(比如Visual C++),了解操作系統(比如API),熟悉領域知識(比如電力系統),掌握其他軟體技術(比如資料庫),等等。編寫真正的代碼,解決實際問題的能力,才是衡量一名程序員是否有真水平的唯一標准。
設計模式和統一建模語言
設計模式(Design Patterns)和統一建模語言(Unified Modeling Language,UML)是兩個不同的概念。前者主要目標在於提供可重用的面向對象軟體設計方案,後者則是一種描繪軟體藍圖的標准語言。
當然了,可以使用UML來描述設計模式的結構。
UML所描述的模型可以映射成C++、C#、Java等語言代碼,甚至可以映射到關系型資料庫。映射過程可以是雙向的,一般都有相應的軟體工具(或插件)支持。
不同的語言,特性有所差別,這多少會影響設計模式在該語言中的實現(方式、難易)。比方說,假如使用C語言來描述設計模式,那麼,繼承、封裝和多態等特性就變成了需要研究的設計模式,但在任何一門面向對象的語言中,這都純屬多餘。
現在市面上還沒有看到象樣的以C#為手段講述設計模式的書(我沒有看到),但這並不打緊,倘若有興趣,完全可以讀一讀《Design Patterns: Elements of Reusable Object-Oriented Software》(中文版名《設計模式》機械工業出版社)這本書,盡管它主要以C++和Smalltalk語言為講解手段。
設計模式本身無所謂好壞,根據你要解決的目標問題,選擇適當的設計模式。
系統架構
在企業級軟體開發中,架構第一重要。架構有缺陷,系統就存在硬傷。優秀的架構來自於優秀的設計。這一點毋庸置疑。
任何成功的軟體,即使它沒有明確地使用建模思想、架構方法,但在骨子裡、潛意識中,大都具有良好的設計思想和架構。
只有寫過好多好多代碼以後,只有做過一些夠份量的企業級項目之後,才可能對軟體架構形成清晰的認識。很難想像一個連幾行像樣的代碼都沒有寫過的人,對程序思想和架構卻有著深刻的認識。這種人,十有八九屬於紙上談兵之輩。
我們時不時會看到這種情況,軟體的設計也不算太差,但程序員要麼不知道怎麼寫實現代碼,要麼是代碼寫得缺乏效率,或不夠強健,甚至有時連「架構師」自己對此都一籌莫展。
我們也常常聽到一些聲音,不要太拘泥於語言(技術)細節了,要從大處著眼,要有大局觀,架構怎麼怎麼重要,這些都是大實話。不過現實情況往往是,很多程序員不是太拘泥於語言(技術)細節了,而是對語言(技術)細節掌握得還遠遠不夠。
書本知識的重要性毋庸置疑,但絕不要以為讀了兩本書,自己就成了牛氣的架構師、設計師或者什麼建模專家。
從前的軟體開發埋頭實踐而缺乏必要的理論指導。現在越來越走向另外一個極端:設計文稿越來越圖文並茂,琳琅滿目,但開發出來的軟體卻比以前差很多。這種表面文章,意義何在?
資料庫
大多數軟體都要和資料庫打交道,並非只有MIS類軟體如此,資料庫知識幾乎是非掌握不可的,無非使用深度和廣度有別而已。迄今為止,我編寫的每一個項目軟體,都要訪問資料庫,有一個程序甚至同時要跟兩個資料庫打交道(Oracle和SQL Server)。
如果你上過任何一門資料庫基礎理論方面的課,或認真看過任何一本資料庫基礎理論方面的書,或許都不必再買更多的(類似的)書。二十多年以來,關系式資料庫理論之穩定,遠遠超過C++語言的穩定:)
本文來自CSDN博客,轉載請標明出處:
『貳』 EJB spring hibernate struc
EJB
EJB是sun的伺服器端組件模型,最大的用處是部署分布式應用程序,類似微軟的.com技術。憑借java跨平台的優勢,用EJB技術部署的分布式系統可以不限於特定的平台。
EJB (Enterprise JavaBean)是J2EE的一部分,定義了一個用於開發基於組件的企業多重應用程序的標准。其特點包括網路服務支持和核心開發工具(SDK)。
在J2EE里,Enterprise Java Beans(EJB)稱為Java 企業Bean,是Java的核心代碼,分別是會話Bean(Session Bean),實體Bean(Entity Bean)和消息驅動Bean(MessageDriven Bean)。
EJB實際上是SUN的J2EE中的一套規范,並且規定了一系列的API用來實現把EJB概念轉換成EJB產品.EJB是BEANS,BEANS是什麼概念,那就是得有一個容納她,讓她可勁造騰的地方,就是得有容器.EJB必須生存在EJB容器中.這個容器可是功能強大之極!她首先要包裝你BEAN,EJB的客戶程序實際上從來就不和你編寫的EJB直接打交道,他們之間是通過HOME/REMOTE介面來發生關系的.它負責你的BEAN的所有的吃喝拉薩睡,比如BEAN的持續化,安全性,事務管理...
什麼是 EJB?
一個技術規范:EJB 從技術上而言不是一種"產品"
EJB 架構
伺服器 (Server)
容器 (Container)
類 (Class) 和實例 (Instance)
Home 和 Remote 介面
客戶端 (Client)
簡化的編程模型
關注於業務邏輯實現:EJB 負責生命周期 (lifecycle), 數據存儲 (persistence), 事務處理語義 (transactional semantic), 安全(security), ...
通用的編程模型:各種服務的高層 API
spring
Spring是一個開源框架,它由Rod Johnson創建。它是為了解決企業應用開發的復雜性而創建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。
• 目的:解決企業應用開發的復雜性
• 功能:使用基本的JavaBean代替EJB,並提供了更多的企業應用功能
• 范圍:任何Java應用
簡單來說,Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。
輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小隻有1MB多的JAR文件里發布。並且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的對象不依賴於Spring的特定類。
控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了松耦合。當應用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。你可以認為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。
面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務()管理)進行內聚性的開發。應用對象只實現它們應該做的——完成業務邏輯——僅此而已。它們並不負責(甚至是意識)其它的系統級關注點,例如日誌或事務支持。
容器——Spring包含並管理應用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創建——基於一個可配置原型(prototype),你的bean可以創建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關聯的。然而,Spring不應該被混同於傳統的重量級的EJB容器,它們經常是龐大與笨重的,難以使用。
框架——Spring可以將簡單的組件配置、組合成為復雜的應用。在Spring中,應用對象被聲明式地組合,典型地是在一個XML文件里。Spring也提供了很多基礎功能(事務管理、持久化框架集成等等),將應用邏輯的開發留給了你。
所有Spring的這些特徵使你能夠編寫更干凈、更可管理、並且更易於測試的代碼。它們也為Spring中的各種模塊提供了基礎支持。
Hibernate
Hibernate 是一個面向Java環境的對象/關系資料庫映射工具。用來把對象模型表示的對象映射到基於SQL 的關系模型結構中去。
Hibernate 不僅僅管理Java 類到資料庫表的映射,還提供數據查詢和獲取數據的方法,可以大幅度減少開發時人工使用SQL 和JDBC 處理數據的時間。Hibernate 的目標是對於開發者通常的數據持久化相關的編程任務,解放其中的95%。
是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱資料庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序實用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。
struts
Struts最早是作為Apache Jakarta項目的組成部分問世運作。項目的創立者希望通過對該項目的研究,改進和提高Java Server Pages、Servlet、標簽庫以及面向對象的技術水準。
Struts這個名字來源於在建築和舊式飛機中使用的支持金屬架。它的目的是為了減少在運用MVC設計模型來開發Web應用的時間。你仍然需要學習和應用該架構,不過它將可以完成其中一些繁重的工作。
Struts跟Tomcat、Turbine等諸多Apache項目一樣,是開源軟體,這是它的一大優點,使開發者能更深入的了解其內部實現機制。
除此之外,Struts的優點主要集中體現在兩個方面:Taglib和頁面導航。Taglib是Struts的標記庫,靈活動用,能大大提高開發效率。另外,就目前國內的JSP開發者而言,除了使用JSP自帶的常用標記外,很少開發自己的標記,或許Struts是一個很好的起點。
關於頁面導航,我認為那將是今後的一個發展方向,事實上,這樣做,使系統的脈絡更加清晰。通過一個配置文件,即可把握整個系統各部分之間的聯系,這對於後期的維護有著莫大的好處。尤其是當另一批開發者接手這個項目時,這種優勢體現得更加明顯。
MVC即Model-View-Controller的縮寫,是一種常用的設計模式。MVC 減弱了業務邏輯介面和數據介面之間的耦合,以及讓視圖層更富於變化。Struts 是MVC的一種實現,它將 Servlet和 JSP 標記(屬於 J2EE 規范)用作實現的一部分。Struts繼承了MVC的各項特性,並根據J2EE的特點,做了相應的變化與擴展。Struts的工作原理,如圖所示:
Struts框架
struts框架具有組件的模塊化,靈活性和重用性的優點,同時簡化了基於MVC的web應用程序的開發。
本章詳細討論struts架構。我們將看到struts是如何清晰地區分控制,事務邏輯和外觀,從而簡化了開發應用程序過程的。我們還將介紹struts提供的類如何使得開發工作更加簡單,這些類包括:
控製程序流程的類
實現和執行程序事務邏輯的類
自定義的標記庫使得創建和驗證HTML表單更加容易
1. Struts壓縮包內容
文件夾jakarta-struts-1.0.2包含兩個目錄,lib和webapps。在lib目錄中有使用struts創建應用程序是所需的文件:
文件 描述
jdbc2_0-stdext.jar 包含JDBC2.0 Optional Package API類。如果我們要使用struts提供的數據資源,就需要將這個文件拷貝到WEB-INF\lib下
Struts.jar 包含struts中所有的java類。同樣也需要拷貝到WEB-INF\lib下
*.tld 標記庫描述器文件,描述了多個struts標記庫中的自定義標記。同樣要拷貝到WEB-INF\lib下
在webapps目錄下有如下文件:
Web應用程序 描述
Struts-blank.war 一個簡單的web應用程序
Struts-documentation.war 包含struts站點上所有struts文檔
Struts-example.war Struts很多特性的示範
Struts-exercisetaglib.war 主要用於對自定義標簽庫進行增加而使用的測試頁,但也可以示範如何使用struts標記
Struts-template.war 包含struts模板標記的介紹和範例
Struts-upload.war 一個簡單的例子,示範如何使用struts框架上傳文件
2.Struts體系結構
讓我們從MVC角度觀察struts框架中的組件
框架中三個部分:模型,視窗和控制器。
模型
在struts框架中,模型分為兩個部分:
系統的內部狀態
可以改變狀態的操作(事務邏輯)
內部狀態通常由一組ActinForm JavaBean表示。根據設計或應用程序復雜度的不同,這些Bean可以是自包含的並具有持續的狀態,或只在需要時才獲得數據(從某個資料庫)。
大型應用程序通常在方法內部封裝事務邏輯(操作),這些方法可以被擁有狀態信息的bean調用。比如購物車bean,它擁有用戶購買商品的信息,可能還有checkOut()方法用來檢查用戶的信用卡,並向倉庫發定貨信息。
小型程序中,操作可能會被內嵌在Action類,它是struts框架中控制器角色的一部分。當邏輯簡單時這個方法很適合。
建議用戶將事務邏輯(要做什麼)與Action類所扮演的角色(決定做什麼)分開。
視窗
由JSP建立,struts包含擴展自定義標簽庫,可以簡化創建完全國際化用戶界面的過程。
控制器
struts中,基本的控制器組件是ActionServlet類中的實例servelt,實際使用的servlet在配置文件中由一組映射(由ActionMapping類進行描述)進行定義。
3.Struts框架中的組件
(由於ROSE工具還未能下載,只能找來這幅圖,它說明了一定問題,特別是ActionErrors,但它並沒有將ActionMapping,JSP和Tag Library包含進來,有時間作完替換)
框架中所使用的組件:
ActionServlet 控制器
ActionClass 包含事務邏輯
ActionForm 顯示模塊數據
ActionMapping 幫助控制器將請求映射到操作
ActionForward 用來指示操作轉移的對象
ActionError 用來存儲和回收錯誤
Struts標記庫 可以減輕開發顯示層次的工作
『叄』 對象關系映射文件的配置信息
當今NoSQL領域中有很多有力的競爭者通過多種方式來處理海量數據問題。其中重要的解決方案之一就是MongoDB.MongoDB是面向文檔的弱結構化存儲方案,使用JSON格式來展現、查詢和修改數據。
MongoDB文檔相當完備,擴展規模與安裝一樣簡單。它提供冗餘、切片、索引以及map/rece等概念支持。MongoDB的開源社區非常大且非常活躍。MongoDB在很多大型產品中被實際運用,如:Disney, Craigslist, Foursquare, Github 和SourceForge.MongoDB是一個開源項目,由10gen.com建立並維護,該公司由DoubleClick的前任執行人員創立。同時,10gen也提供了極好的商業支持與參與建設。
MongoDB 與 NoSQL: 缺陷與優勢
MongoDB作為一個可用NoSQL方案具有很多優勢。我剛開始接觸nosql資料庫了解了一系列基於Java的方案,並且花了大量的時間來弄懂什麼是列家族,Hadoop與HBase的關系,ZooKeeper到底是什麼。當我終於全部清楚之後,發現Cassandra與HBase確實是對於NoSQL領域非常可靠、可信賴的解決方案。但與其他的解決方案相比,MongoDB讓我在能夠開始寫代碼之前,不用理解那麼多的概念。
與其他軟體相似,MongoDB也存在缺陷。經過一段時間使用MongoDB,我列舉經歷過並需要注意的一些事情,我成為"Gotchas":
● 不要按照關系型資料庫來思考。這很明顯,MongoDB使得構建和執行復雜查詢變得非常容易。當實際使用的時候,你會主要關注於效率問題(像我一樣)。
● MongoDB的索引是二進制的樹。如果你不是很熟悉B-tree,可能需要了解一下。這些都涉及到構建符合提供查詢條件需求的建立索引的方式。
● 小心的設計索引結構。這涉及到上面提到的B-tree.剛開始我的索引包含文檔中的很多欄位,以防我會使用到他們。不要犯同樣的錯誤。我有一個很小集合的索引(大約1千萬記錄)增長到超過17GB的空間,比集合本身還大。你應該不會想要索引一個包含成百上千個實體的列表欄位。
● MongoDB採用了非常有意思的方式來實現NoSQL:採用BSON作為存儲,JSON作為展示,JavaScript用於管理和Map/Rece.因此也引起了一些小問題比如這個 (破壞了Number和Long的相等操作),在MongoDB逐漸流行之後,可能會不斷的展示出來。
MongoDB, 命令行與驅動
MongoDB基本是使用JavaScript客戶端命令行程序來進行復雜任務管理的,如數據整合和簡單信息處理,編程都是完全使用JavaScript語言來的。本文中,我們會展示命令行的使用示例。現在有大量的MongoDB客戶端產品提供,並且由MongoDB社區來支持驅動。通常每種編程語言都有驅動,並且所有流行的語言都有包括,一些不那麼流行的也包含在內。這篇文章展示了使用MongoDB的Java驅動,並使用一個ORM庫(MJORM)與之進行比較。
介紹 MJORM: MongoDB的ORM方案
在解決的眾多有意思的問題中,最近NoSQL數據存儲在開發者中主要的問題趨勢就是對象關系映射。對象關系映射就是將傳統中保存在關系型資料庫中的持久化數據映射為在應用程序中使用的對象。這使得編程語言使用起來更加流暢和自然。
MongoDB面向文檔的架構使得它非常適合對象關系映射,因為文檔本身就是以對象形式存儲的。可惜沒有太多的MongoDB的Java對象關系映射庫,但是還是有一些,如morphia-(A type-safe Java library for MongoDB), spring-data(SpringData項目的MongoDB實現)
這些ORM庫大量使用了註解,因為一些原因對我不適合,其中最重要的就是這些被註解的對象在多個項目中的兼容性問題。這讓我開始了mongo-Java-orm 或者 "MJORM" (發音 me-yorm)項目,一個MongoDB的Java對象關系映射項目。MJORM是在MIT許可之下,並且在發布在了google code project.項目採用maven構建,並且maven構件倉庫託管於google code版本控制伺服器。MJORM的最新可用發布版本為0.15,已經由一些項目使用與生產環境中。
開始使用ORM
加入MJORM 庫
Maven的使用者首先應當在pom.xml中加入MJORM的maven倉庫,使得MJORM構件可用。
然後加入依賴:
這樣就可以在應用中引入MJORM代碼。假如沒有使用maven,則你需要手動下載MJORM的pom.xml中列舉的所有依賴。 建立 POJOs依賴已經導入,可以開始編碼了。我們從POJO開始:
我們在這個對象模型中的描述是,作者有ID、姓和名,書有ID、ISNB、標題、描述和作者。 你可能注意到書的id屬性是一個字元串,這是為了適應MongoDB的對象ID類型。MongoDB的ID是一個12位元組的二進制值顯示為一個十六進制的字元串。MongoDB要求集合中的每個文檔都必須有一個唯一id,但不要求一定要是ObjectId.目前MJORM只支持ObjectId,並且顯示為字元串。 你也可能注意到了Author沒有id欄位。這是因為Book是它的父文檔,因此不需要有id.記住,MongoDB只要求集合中的文檔在根級別的id. 創建XML映射文件 下一個步驟就是建立XML映射文件,MJORM能夠將MongoDB文檔轉換為對象。我們為每個文檔創建一個對象作為示範,無論將所有的映射放在一個XML文件中還是分開都是可以的。
Author.mjorm.xml:
Book.mjorm.xml:
這些映射文件能夠很好的自解釋。descriptors 元素是根元素,必須包含在每個映射文件中。在它下面是object元素定義了文檔與之對應的類。Object包含的property 元素主要用於描述POJO中的屬性以及這些屬性如何與MongoDB中的文檔想對應。property 元素至少必須包含一個name 屬性,這個元素就是POJO和MongoDB的文檔中的屬性名稱。column 屬性則是可選的,用於特定一個在MongoDB文檔中的可選屬性名稱。 property 元素當中的id屬性應該是對象的唯一識別。一個對象只能有一個property 元素包含id屬性。auto 的設置會使得MJORM在持久化時為該屬性自動生成一個值。 可以在google code的MJORM項目主頁中查看XML映射文件的更多細節描述。 整合POJO與XML我們創建了數據模型以及映射文件,使得MJORM可以從MongoDB序列號以及反序列號POJO.我們可以進行一些有意思的事情了,首先打開MongoDB的鏈接:
Mongo 對象是由10gen編寫的Java驅動提供的。示例中連接了一個本地的MongoDB實例中的mjormIsFun資料庫。接下來我們創建MJORM ObjectMapper .目前ObjectMapper 在MJORM中的唯一實現就是XmlDescriptorObjectMapper,使用XML結構描述信息。可能之後會增加對註解或其他結構定義的支持。
建立好了XmlDescriptorObjectMapper 並且加入了映射文件。接下來建立由MJORM提供的MongoDao 對象的實例。
首先我們要獲得10gen驅動提供的DB對象實例。然後使用DB和ObjectMapper 建立MongoDao .我們准備開始持久化數據,建立一個Book 然後保存到MongoDB中。
首先建立Book 對象並且填值,然後調用MongoDao 的 createObject 方法,將Book 對象傳入"books" 的集合中。MJORM會按照之前的xml映射文件將Book 轉換為DBObject (這是10gen的Java驅動使用的基本類型),並保存一個新的文檔進"books" 集合。MJORM返回Book對象時,id屬性會被填充。請注意,MongoDB默認是不需要在使用前建立資料庫或集合的,系統會在需要時自動創建,這可能會造成某些困擾。在MongoDB的命令行中查看Book對象大概如下:
我們來看看假如不用MJORM而直接使用10gen的Java驅動,如何使用createObject 方法:
下面進行對象的查詢:
readObject 方法根據給定文檔的id從指定的集合中讀取文檔,轉換為對象(再次使用映射文件)並返回。 敏銳的讀者會注意到Book還沒有指定Author,仍然保存了。這歸咎於MongoDB的結構不敏感的特性。我們不能要求集合中的文檔包含所有屬性(id屬性是必須的),所有在MongoDB中沒有Author的Book是可以的。我們現在為Book添加一個Author並且更新一下:
現在Book就包含了Author,並且在MongoDB中持久化了。現在在命令行查看了Book:
可以看到持久化的Book中已經包含了author.不使用MJORM來操作一遍:
對於MongoDao 方法的深入討論已經超出了本文的范圍。對於將MJORM有興趣用於實際項目中的用戶強烈建議了解一下MJORM項目提供的相關文檔,或者MongoDao 介面提供的相關用法。
『肆』 如何搭建交叉編譯環境
交叉編譯環境就是在Windows下的東西拿到Linux下編譯運行吧,我個人是在Linux啟動了samba伺服器,然後將文件夾映射到Windows下,在Windows下使用vc 6.0編程序然後到Linux下編譯的。不知道能不能對你有些幫助。
下載的rpm包,可以使用rpm -ivh 包路徑進行安裝
『伍』 c語言中如何把pcie物理地址映射到虛擬地址,在bc環境下而不是在linux下c編程環境
沒有什麼進入C語言編程的。
先用編輯器(vim,Emacs)寫好源代碼,再gcc編譯。
如,你要寫一個hello程序,
vim hello.c 進入編輯環境
gcc hello.c -o hello 寫好源代碼gcc編譯(相關的詳細應用,google一下)
前提要會用vim和安裝好gcc編譯環境。
運行程序就是,在文件所在的目錄下指令./hello
『陸』 powerdesigner 怎麼把對象模型裡面對象轉為java類
對於一個給定的應用環境,構造最優的資料庫模式,建立資料庫及其應用系統,使之能夠有效地存儲數據,滿足各種用戶的應用需求(信息要求和處理要求)。
在資料庫領域內,常常把使用資料庫的各類系統統稱為資料庫應用系統。
一、資料庫和信息系統
(1)資料庫是信息系統的核心和基礎,把信息系統中大量的數據按一定的模型組織起來,提供存儲、維護、檢索數據的
功能,使信息系統可以方便、及時、准確地從資料庫中獲得所需的信息。
(2)資料庫是信息系統的各個部分能否緊密地結合在一起以及如何結合的關鍵所在。
(3)資料庫設計是信息系統開發和建設的重要組成部分。
(4)資料庫設計人員應該具備的技術和知識:
資料庫的基本知識和資料庫設計技術
計算機科學的基礎知識和程序設計的方法和技巧
軟體工程的原理和方法
應用領域的知識
二、資料庫設計的特點
資料庫建設是硬體、軟體和干件的結合
三分技術,七分管理,十二分基礎數據
技術與管理的界面稱之為「干件」
資料庫設計應該與應用系統設計相結合
結構(數據)設計:設計資料庫框架或資料庫結構
行為(處理)設計:設計應用程序、事務處理等
結構和行為分離的設計
傳統的軟體工程忽視對應用中數據語義的分析和抽象,只要有可能就盡量推遲數據結構設計的決策早期的資料庫設計致力於數據模型和建模方法研究,忽視了對行為的設計
如圖:
三、資料庫設計方法簡述
手工試湊法
設計質量與設計人員的經驗和水平有直接關系
缺乏科學理論和工程方法的支持,工程的質量難以保證
資料庫運行一段時間後常常又不同程度地發現各種問題,增加了維護代價
規范設計法
手工設計方
基本思想
過程迭代和逐步求精
規范設計法(續)
典型方法:
(1)新奧爾良(New Orleans)方法:將資料庫設計分為四個階段
S.B.Yao方法:將資料庫設計分為五個步驟
I.R.Palmer方法:把資料庫設計當成一步接一步的過程
(2)計算機輔助設計
ORACLE Designer 2000
SYBASE PowerDesigner
四、資料庫設計的基本步驟
資料庫設計的過程(六個階段)
1.需求分析階段
准確了解與分析用戶需求(包括數據與處理)
是整個設計過程的基礎,是最困難、最耗費時間的一步
2.概念結構設計階段
是整個資料庫設計的關鍵
通過對用戶需求進行綜合、歸納與抽象,形成一個獨立於具體DBMS的概念模型
3.邏輯結構設計階段
將概念結構轉換為某個DBMS所支持的數據模型
對其進行優化
4.資料庫物理設計階段
為邏輯數據模型選取一個最適合應用環境的物理結構(包括存儲結構和存取方法)
5.資料庫實施階段
運用DBMS提供的數據語言、工具及宿主語言,根據邏輯設計和物理設計的結果
建立資料庫,編制與調試應用程序,組織數據入庫,並進行試運行
6.資料庫運行和維護階段
資料庫應用系統經過試運行後即可投入正式運行。
在資料庫系統運行過程中必須不斷地對其進行評價、調整與修改
設計特點:
在設計過程中把資料庫的設計和對資料庫中數據處理的設計緊密結合起來將這兩個方面的需求分析、抽象、設計、實現在各個階段同時進行,相互參照,相互補充,以完善兩方面的設計
設計過程各個階段的設計描述:
如圖:
五、資料庫各級模式的形成過程
1.需求分析階段:綜合各個用戶的應用需求
2.概念設計階段:形成獨立於機器特點,獨立於各個DBMS產品的概念模式(E-R圖)
3.邏輯設計階段:首先將E-R圖轉換成具體的資料庫產品支持的數據模型,如關系模型,形成資料庫邏輯模式;然後根據用戶處理的要求、安全性的考慮,在基本表的基礎上再建立必要的視圖(View),形成數據的外模式
4.物理設計階段:根據DBMS特點和處理的需要,進行物理存儲安排,建立索引,形成資料庫內模式
六、資料庫設計技巧
1. 設計資料庫之前(需求分析階段)
1) 理解客戶需求,詢問用戶如何看待未來需求變化。讓客戶解釋其需求,而且隨著開發的繼續,還要經常詢問客戶保證其需求仍然在開發的目的之中。
2) 了解企業業務可以在以後的開發階段節約大量的時間。
3) 重視輸入輸出。
在定義資料庫表和欄位需求(輸入)時,首先應檢查現有的或者已經設計出的報表、查詢和視圖(輸出)以決定為了支持這些輸出哪些是必要的表和欄位。
舉例:假如客戶需要一個報表按照郵政編碼排序、分段和求和,你要保證其中包括了單獨的郵政編碼欄位而不要把郵政編碼糅進地址欄位里。
4) 創建數據字典和ER 圖表
ER 圖表和數據字典可以讓任何了解資料庫的人都明確如何從資料庫中獲得數據。ER圖對表明表之間關系很有用,而數據字典則說明了每個欄位的用途以及任何可能存在的別名。對SQL 表達式的文檔化來說這是完全必要的。
5) 定義標準的對象命名規范
資料庫各種對象的命名必須規范。
2. 表和欄位的設計(資料庫邏輯設計)
表設計原則
1) 標准化和規范化
數據的標准化有助於消除資料庫中的數據冗餘。標准化有好幾種形式,但Third Normal Form(3NF)通常被認為在性能、擴展性和數據完整性方面達到了最好平衡。簡單來說,遵守3NF 標準的資料庫的表設計原則是:「One Fact in One Place」即某個表只包括其本身基本的屬性,當不是它們本身所具有的屬性時需進行分解。表之間的關系通過外鍵相連接。它具有以下特點:有一組表專門存放通過鍵連接起來的關聯數據。
舉例:某個存放客戶及其有關定單的3NF 資料庫就可能有兩個表:Customer 和Order。Order 表不包含定單關聯客戶的任何信息,但表內會存放一個鍵值,該鍵指向Customer 表裡包含該客戶信息的那一行。
事實上,為了效率的緣故,對表不進行標准化有時也是必要的。
2) 數據驅動
採用數據驅動而非硬編碼的方式,許多策略變更和維護都會方便得多,大大增強系統的靈活性和擴展性。
舉例,假如用戶界面要訪問外部數據源(文件、XML 文檔、其他資料庫等),不妨把相應的連接和路徑信息存儲在用戶界面支持表裡。還有,如果用戶界面執行工作流之類的任務(發送郵件、列印信箋、修改記錄狀態等),那麼產生工作流的數據也可以存放在資料庫里。角色許可權管理也可以通過數據驅動來完成。事實上,如果過程是數據驅動的,你就可以把相當大的責任推給用戶,由用戶來維護自己的工作流過程。
3) 考慮各種變化
在設計資料庫的時候考慮到哪些數據欄位將來可能會發生變更。
舉例,姓氏就是如此(注意是西方人的姓氏,比如女性結婚後從夫姓等)。所以,在建立系統存儲客戶信息時,在單獨的一個數據表裡存儲姓氏欄位,而且還附加起始日和終止日等欄位,這樣就可以跟蹤這一數據條目的變化。
欄位設計原則
4) 每個表中都應該添加的3 個有用的欄位
dRecordCreationDate,在VB 下默認是Now(),而在SQL Server • 下默認為GETDATE()
sRecordCreator,在SQL Server 下默認為NOT NULL DEFAULT • USER
nRecordVersion,記錄的版本標記;有助於准確說明記錄中出現null 數據或者丟失數據的原因 •
5) 對地址和電話採用多個欄位
描述街道地址就短短一行記錄是不夠的。Address_Line1、Address_Line2 和Address_Line3 可以提供更大的靈活性。還有,電話號碼和郵件地址最好擁有自己的數據表,其間具有自身的類型和標記類別。
6) 使用角色實體定義屬於某類別的列
在需要對屬於特定類別或者具有特定角色的事物做定義時,可以用角色實體來創建特定的時間關聯關系,從而可以實現自我文檔化。
舉例:用PERSON 實體和PERSON_TYPE 實體來描述人員。比方說,當John Smith, Engineer 提升為John Smith, Director 乃至最後爬到John Smith, CIO 的高位,而所有你要做的不過是改變兩個表PERSON 和PERSON_TYPE 之間關系的鍵值,同時增加一個日期/時間欄位來知道變化是何時發生的。這樣,你的PERSON_TYPE 表就包含了所有PERSON 的可能類型,比如Associate、Engineer、Director、CIO 或者CEO 等。還有個替代辦法就是改變PERSON 記錄來反映新頭銜的變化,不過這樣一來在時間上無法跟蹤個人所處位置的具體時間。
7) 選擇數字類型和文本類型盡量充足
在SQL 中使用smallint 和tinyint 類型要特別小心。比如,假如想看看月銷售總額,總額欄位類型是smallint,那麼,如果總額超過了$32,767 就不能進行計算操作了。
而ID 類型的文本欄位,比如客戶ID 或定單號等等都應該設置得比一般想像更大。假設客戶ID 為10 位數長。那你應該把資料庫表欄位的長度設為12 或者13 個字元長。但這額外占據的空間卻無需將來重構整個資料庫就可以實現資料庫規模的增長了。
8) 增加刪除標記欄位
在表中包含一個「刪除標記」欄位,這樣就可以把行標記為刪除。在關系資料庫里不要單獨刪除某一行;最好採用清除數據程序而且要仔細維護索引整體性。
3. 選擇鍵和索引(資料庫邏輯設計)
鍵選擇原則:
1) 鍵設計4 原則
為關聯欄位創建外鍵。 •
所有的鍵都必須唯一。 •
避免使用復合鍵。 •
外鍵總是關聯唯一的鍵欄位。 •
2) 使用系統生成的主鍵
設計資料庫的時候採用系統生成的鍵作為主鍵,那麼實際控制了資料庫的索引完整性。這樣,資料庫和非人工機制就有效地控制了對存儲數據中每一行的訪問。採用系統生成鍵作為主鍵還有一個優點:當擁有一致的鍵結構時,找到邏輯缺陷很容易。
3) 不要用用戶的鍵(不讓主鍵具有可更新性)
在確定採用什麼欄位作為表的鍵的時候,可一定要小心用戶將要編輯的欄位。通常的情況下不要選擇用戶可編輯的欄位作為鍵。
4) 可選鍵有時可做主鍵
把可選鍵進一步用做主鍵,可以擁有建立強大索引的能力。
索引使用原則:
索引是從資料庫中獲取數據的最高效方式之一。95%的資料庫性能問題都可以採用索引技術得到解決。
1) 邏輯主鍵使用唯一的成組索引,對系統鍵(作為存儲過程)採用唯一的非成組索引,對任何外鍵列採用非成組索引。考慮資料庫的空間有多大,表如何進行訪問,還有這些訪問是否主要用作讀寫。
2) 大多數資料庫都索引自動創建的主鍵欄位,但是可別忘了索引外鍵,它們也是經常使用的鍵,比如運行查詢顯示主表和所有關聯表的某條記錄就用得上。
3) 不要索引memo/note 欄位,不要索引大型欄位(有很多字元),這樣作會讓索引佔用太多的存儲空間。
4) 不要索引常用的小型表
不要為小型數據表設置任何鍵,假如它們經常有插入和刪除操作就更別這樣作了。對這些插入和刪除操作的索引維護可能比掃描表空間消耗更多的時間。
4. 數據完整性設計(資料庫邏輯設計)
1) 完整性實現機制:
實體完整性:主鍵
參照完整性:
父表中刪除數據:級聯刪除;受限刪除;置空值
父表中插入數據:受限插入;遞歸插入
父表中更新數據:級聯更新;受限更新;置空值
DBMS對參照完整性可以有兩種方法實現:外鍵實現機制(約束規則)和觸發器實現機制
用戶定義完整性:
NOT NULL;CHECK;觸發器
2) 用約束而非商務規則強制數據完整性
採用資料庫系統實現數據的完整性。這不但包括通過標准化實現的完整性而且還包括數據的功能性。在寫數據的時候還可以增加觸發器來保證數據的正確性。不要依賴於商務層保證數據完整性;它不能保證表之間(外鍵)的完整性所以不能強加於其他完整性規則之上。
3) 強制指示完整性
在有害數據進入資料庫之前將其剔除。激活資料庫系統的指示完整性特性。這樣可以保持數據的清潔而能迫使開發人員投入更多的時間處理錯誤條件。
4) 使用查找控制數據完整性
控制數據完整性的最佳方式就是限制用戶的選擇。只要有可能都應該提供給用戶一個清晰的價值列表供其選擇。這樣將減少鍵入代碼的錯誤和誤解同時提供數據的一致性。某些公共數據特別適合查找:國家代碼、狀態代碼等。
5) 採用視圖
為了在資料庫和應用程序代碼之間提供另一層抽象,可以為應用程序建立專門的視圖而不必非要應用程序直接訪問數據表。這樣做還等於在處理資料庫變更時給你提供了更多的自由。
5. 其他設計技巧
1) 避免使用觸發器
觸發器的功能通常可以用其他方式實現。在調試程序時觸發器可能成為干擾。假如你確實需要採用觸發器,你最好集中對它文檔化。
2) 使用常用英語(或者其他任何語言)而不要使用編碼
在創建下拉菜單、列表、報表時最好按照英語名排序。假如需要編碼,可以在編碼旁附上用戶知道的英語。
3) 保存常用信息
讓一個表專門存放一般資料庫信息非常有用。在這個表裡存放資料庫當前版本、最近檢查/修復(對Access)、關聯設計文檔的名稱、客戶等信息。這樣可以實現一種簡單機制跟蹤資料庫,當客戶抱怨他們的資料庫沒有達到希望的要求而與你聯系時,這樣做對非客戶機/伺服器環境特別有用。
4) 包含版本機制
在資料庫中引入版本控制機制來確定使用中的資料庫的版本。時間一長,用戶的需求總是會改變的。最終可能會要求修改資料庫結構。把版本信息直接存放到資料庫中更為方便。
5) 編制文檔
對所有的快捷方式、命名規范、限制和函數都要編制文檔。
採用給表、列、觸發器等加註釋的資料庫工具。對開發、支持和跟蹤修改非常有用。
對資料庫文檔化,或者在資料庫自身的內部或者單獨建立文檔。這樣,當過了一年多時間後再回過頭來做第2 個版本,犯錯的機會將大大減少。
6) 測試、測試、反復測試
建立或者修訂資料庫之後,必須用用戶新輸入的數據測試數據欄位。最重要的是,讓用戶進行測試並且同用戶一道保證選擇的數據類型滿足商業要求。測試需要在把新資料庫投入實際服務之前完成。
7) 檢查設計
在開發期間檢查資料庫設計的常用技術是通過其所支持的應用程序原型檢查資料庫。換句話說,針對每一種最終表達數據的原型應用,保證你檢查了數據模型並且查看如何取出數據。
另外,虛機團上產品團購,超級便宜