1. 程式人生 > >使用物件-關係對映 ORM 系統中介軟體提升軟體開發效率及質量

使用物件-關係對映 ORM 系統中介軟體提升軟體開發效率及質量

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                一、什麼是物件-關係對映(ORM)?  

  物件-關係對映(Object/Relation Mapping,簡稱ORM),是隨著面向物件的軟體開發方法發展而產生的。面向物件的開發方法是當今企業級應用開發環境中的主流開發方法,關係資料庫是企業級應用環境中永久存放資料的主流資料儲存系統。物件和關係資料是業務實體的兩種表現形式,業務實體在記憶體中表現為物件,在資料庫中表現為關係資料。記憶體中的物件之間存在關聯和繼承關係,而在資料庫中,關係資料無法直接表達多對多關聯和繼承關係。因此,物件-關係對映(ORM)系統一般以中介軟體的形式存在,主要實現程式物件到關係資料庫資料的對映。
     
二、為什麼要引入物件-關係對映中介軟體?
   在開發關係資料庫的系統時,可以通過SQL語句讀取及操作關係資料庫資料。在Java領域,可以直接通過JDBC程式設計來訪問資料庫。JDBC可以說是JAVA訪問關係資料庫的最原始、最直接的方法。這種方式的優點是執行效率高,缺點是在Java程式程式碼中嵌入大量SQL語句,冗餘是不可避免的,開發人員常常發現自己在一次又一次地編寫相同的普通程式碼,如獲得連線、準備語句、迴圈結果集以及其他一些 JDBC 特定元素,使得專案難以維護。特別是當涉及到非常多的關係資料表、需要在多個不同型別的關係資料庫系統中使用時,通過在程式中使用JDBC開發實施起來更加困難。
   在開發基於資料應用為主的軟體系統時,引入物件-關係對映中介軟體是提高開發效率、提升軟體產品的可維護、擴充套件性的現實需要。實踐表明,在基於資料處理為主的企業級應程式開發中,通過引入物件-關係對映中介軟體,可以節省與物件持久化有關的差不多35%的程式設計工作量,同時提升軟體產品可維護及易擴充套件性,提升軟體產品質量。
   因此,在開發企業級應用時,有必要通過引入物件-關係對映系統中介軟體,實現資料庫的快速開發。企業可以通過JDBC程式設計來開發單獨的持久化層,把資料庫訪問操作封裝起來,提供簡潔的API,供業務層統一呼叫,實現自己的ORM系統中介軟體。
   當然,一個成熟的物件-關係對映中介軟體產品,不只是簡單的把記憶體中的物件持久化到資料庫、把資料庫中的關係資料載入到記憶體中,還要保證系統頻繁地訪問資料庫的效能,降低訪問資料庫的頻率,需要引入多執行緒、快取、事務管理等很多細節,涉及到的技術比較複雜,因此,我們更多是使用市場上優秀的ORM系統中介軟體產品。
   
三、當前JAVA主流的物件-關係對映中介軟體產品?
   物件關係對映程式(Object Relational Mappers,ORM)有多種形式。在 Java領域,大多數流行的 ORM 都可以實現完整的域模型對映,它的目標是將整層的物件和行為對映到資料庫表。當前主流的 ORM 中介軟體產品主要有:
   Hibernate(重點推薦)
   JDO
iBatis
   EJB Entities 3
   EJB Entity Beans 2.x
   TopLink
   在眾多的ORM中介軟體產品中,Hibernate是筆者重點推薦的。Hibernate是一個基於Java的開放原始碼的持久化中介軟體,它對JDBC做了輕量級封裝,不僅提供ORM對映服務,還提供資料查詢和資料快取功能,Java開發人員可以方便地通過Hibernate API來操縱資料庫。現在,越來越多的Java開發人員把Hibernate作為企業應用和關係資料庫之間的中介軟體。

四、使用EasyDBO實現簡單的物件-關係對映
   EasyDBO是由簡易java框架網(
www.easyjf.com )開發的一個適合中小型軟體資料庫開發的java資料持久層框架,系統參考hibernate、JDO等,結合中小專案軟體的開發實際,實現簡單的Java物件到關係資料的對映。EasyDBO由於比較簡單,比較適合於中小企業及個人開發使用,EasyDBO當前還處於測試階段、是一個簡易但不太成熟的物件-關係對映開源中介軟體。
  EasyDBO的原始碼非常簡單,有一點Java知識的人基本上都能讀懂,因此,選擇EasyDBO作本文的示例主要目的在於讓讀者快速進入ORM系統的世界,理解物件-關係資料庫實質及實現原理。
   EasyDBO考慮的是最簡單的物件-關係對映,簡單到可以不使用任何配置檔案就實現物件-關係的對映。EasyDBO原始碼主要包括com.easyjf.dbo、com.easyjf.dbo.config、com.easyjf.dbo.sql三個包。其中com.easyjf.dbo是框架的核心、實現了物件-關係的轉換、JDBC API的封裝以及使用者介面支援等,com.easyjf.dbo.config實現配置檔案的管理,com.easyjf.dbo.sql實現資料庫的簡單Sql語句的生成及多資料庫支援的擴充套件。
   在當前推出的測試版本中,程式設計師使用EasyDBO操作資料庫主要關注EasyJDO類提供的方法及原資料物件DBObject類、IObject介面即可。

五、使用EasyDBO的開發資料庫應用程式示例
   下面我們看看使用EasyDBO是怎麼樣實現資料庫的開發。
   假設一個留言版系統存放留言資訊關係資料表(message)的結構為:
   cid: varchar 16 主鍵
   title: varchar 50
   content: text 
   inputUser: varchar 16
   inputTime: datetime 
   status: int 
   
相應java中的類Message定義為
   import java.util.Date;
   import java.util.List;
   import com.easyjf.dbo.EasyJDB;
   import com.easyjf.dbo.IObject;
   //實現com.easyjf.dbo.IObject介面從而使得你的物件無需要配置檔案即可與關係資料表對映
   public class Message implements IObject {
   private String cid;
   private String title;
   private String content;
   private String inputUser;
   private Date inputTime;
   private Integer status;
   public String getTableName() { 
   return "message";
   }
   public String getKeyField() {

   return "cid";
   }
   public String getKeyGenerator() { 
   return "com.easyjf.dbo.IdGenerator";
   }
   public String getCid() {
   return cid;
   }
   public void setCid(String cid) {
   this.cid = cid;
   }
   public String getContent() {
   return content;
   }
   public void setContent(String content) {
   this.content = content;
   }
   public java.util.Date getInputTime() {
   return inputTime;
   }
   public void setInputTime(java.util.Date inputTime) {
   this.inputTime = inputTime;
   }
   public String getInputUser() {
   return inputUser;
   }
   public void setInputUser(String inputUser) {
   this.inputUser = inputUser;
   }
   public Integer getStatus() {
   return status;
   }
   public void setStatus(Integer status) {
   this.status = status;
   }
   public String getTitle() {
   return title;
   }
   public void setTitle(String title) {
   this.title = title;
   }

   //把物件持久化(儲存)到關係資料庫中
   public boolean save()
   {
   EasyJDB db=new EasyJDB();
   return db.saveOrUpdate(this);
   }
   //從持久化儲存裝置資料庫系統中永久刪除物件
   public boolean del()
   {
   EasyJDB db=EasyJDB.getInstance();
   return db.del(this);
   }
   //通過主鍵id從資料庫系統中讀取資料,返回一個物件
   public static Message read(String cid)
   {
   EasyJDB db=EasyJDB.getInstance();
   return (Message)db.get(Message.class,cid);
   }
   //通過sql從資料庫中查詢符合條件的資料,返回物件列表
   public static List query(String sql)
   {
   EasyJDB db=EasyJDB.getInstance(); 
   return db.query(Message.class,sql);
   }
   //應用演示程式碼
   public static void main(String[] args) {
   Message m=new Message();
   m.setTitle("標題");
   m.setContent("內容");
   m.setInputTime(new Date());
   m.setInputUser("test");
   m.setStatus(new Integer(1));
   if(m.save())
   {
   System.out.print("成功把物件儲存到關係資料庫中"); 
   }
   else
   {
   System.out.println("儲存資料出錯!");
   }
   //查詢資料
   List list=Message.query("1=1");
   if(list!=null){
   for(int i=0;i<list.size();i++)
   {
   Message message=(Message)list.get(i); 
   System.out.println("--------");
   System.out.println("cid:"+message.getCid());
   System.out.println("title:"+message.getTitle());
   System.out.println("inputUser:"+message.getInputUser());
   System.out.println("inputTime:"+message.getInputTime());
   System.out.println("status:"+message.getStatus()); 
   }
   }
   }
   }

   如上面的程式碼所示,程式只需要通過EasyJDB的getInstance()方法得到一個例項,然後就可以通過EasyJDB物件的save、update、del、get、query等類似的方法進行資料庫的操作了。而程式設計師不用管具體的資料庫系統型別、不用管資料庫連線的獲取、資料庫資源的釋放、不用構造煩瑣無味的Sql添、刪、改、查語句。
   關於資料來源及配置檔案:使用者可以通過EasyDBO的配置檔案easyjf-dbo.xml檔案配置資料庫連線資料來源,也可以程式中設定資料來源,還可通過IOC容器設定資料來源。下面我們看看EasyDBO的資料來源配置檔案easyjf-dbo.xml的內容。
   <easyjf-dbo>
   <datasource id="bbs" type="org.apache.commons.dbcp.BasicDataSource">
   <property name="easydbo.connection.driver_class">org.gjt.mm.mysql.Driver</property>
   <property name="easydbo.connection.password">yourpassword</property>
   <property name="easydbo.connection.url">jdbc:mysql://127.0.0.1:3306/easyjf</property>
   <property name="easydbo.connection.username">root</property>
   <property name="easydbo.dialect">com.easyjf.dbo.sql.MySqlQuery</property>
   <property name="easydbo.optimize">true</property>
   <property name="esyydbo.show_sql">true</property>
   </datasource>
   <tables>
   <class>
   </class>
   </tables>
   </easyjf-dbo>

  假如使用者使用的是MS Sql Server資料為,把上面的的配置檔案修改成如下的內容即可:
   <easyjf-dbo>
   <datasource id="bbs" type="org.apache.commons.dbcp.BasicDataSource">
   <property name="easydbo.connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
   <property name="easydbo.connection.password">sa</property>
   <property name="easydbo.connection.url">jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=easyjf;SelectMethod=cursor</property>
   <property name="easydbo.connection.username">yourpassword</property>
   <property name="easydbo.dialect">com.easyjf.dbo.sql.MSSqlServerQuery</property>
   </datasource>
   <tables>
   <class>
   </class>
   </tables>
   </easyjf-dbo>

六、選擇適合你的物件-關係對映中介軟體
   不是功能最全,用得最多的中介軟體就一定適合您,當前流行的各種ORM中介軟體產品中,hibernate無疑是最為出色的產品,從系統的構架、效能及功能上都非常好。在大型分佈市群集伺服器運用領域,EJB Entity Beans是首選,因為其有廣泛的市場及運用基礎。當然,在小型的資料庫應用軟體領域,如一個新聞網站、一個簡單的網上商店、論壇系統等,筆者也推薦大家不防試試EasyDBO。作為初學者,筆者推薦大家使用EasyDBO,閱讀EasyDBO的原始碼,可以讓你快速掌握及瞭解ORM中介軟體的實質及工作原理,從而為學習及使用功能更加強大物件-關係對映中介軟體產品打下基礎。
   更多完整的有關EasyDBO應用例項程式碼,請通過官方網站www.easyjf.com下載。
           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述