iBATIS快速創(chuàng)建應(yīng)用淺析
iBATIS框架實際上非常簡單,要開始使用它也同樣非常簡單。那么究竟有多簡單呢?事實上,它是如此簡單,以至于你可以用iBATIS在5分鐘之內(nèi)創(chuàng)建一個完整的應(yīng)用——不是一個大型的企業(yè)資源規(guī)劃(Enterprise Resource Planning,ERP)方案或者一個大型電子商務(wù)網(wǎng)站,而是一個簡單的命令行工具,用于執(zhí)行一個SQL映射文件中的一條SQL語句并且向控制臺輸出執(zhí)行結(jié)果。下面將要給出的例子將配置一條簡單的靜態(tài)SQL語句,用于查詢一個簡單的數(shù)據(jù)庫表格,并且把它以如下形式輸出到控制臺:
這種數(shù)據(jù)輸出方式并不是最漂亮的,但是由此你可以了解該應(yīng)用到底要做些什么。在下面幾節(jié)中,我們將逐步從無到有地實現(xiàn)此功能。
iBATIS快速創(chuàng)建應(yīng)用1:安裝數(shù)據(jù)庫
為了滿足示例應(yīng)用的目的,我們將使用MySQL數(shù)據(jù)庫。iBATIS框架可以使用任何數(shù)據(jù)庫,只要該數(shù)據(jù)庫具有符合規(guī)范的JDBC驅(qū)動。你只需要在配置文件中提供驅(qū)動的全限定類名以及一個JDBC URL即可。
安裝數(shù)據(jù)庫服務(wù)器超出了本書所討論的范圍,因此我們假設(shè)數(shù)據(jù)庫服務(wù)器已經(jīng)安裝好并且可用了,然后告訴你在此基礎(chǔ)之上需要做些什么。以下的MySQL腳本用于構(gòu)造了我們將要使用的表格,并且在其中添加了一些示例數(shù)據(jù):
如果你已經(jīng)安裝了一個不同的數(shù)據(jù)庫服務(wù)器,其中包含一些其他數(shù)據(jù),并且你想要在這些數(shù)據(jù)上執(zhí)行某些SQL查詢,你可以大膽地在本例子中使用它。你只需要修改SqlMap.xml文件中的查詢語句,以包含你的SQL,同時還需要修改SqlMapConfig.xml文件以配置iBATIS使用你的數(shù)據(jù)庫。為使整個例子成功運(yùn)行,你還需要知道驅(qū)動的名稱、JDBC URL、以及連接時的用戶名和密碼。
iBATIS快速創(chuàng)建應(yīng)用2編寫代碼
由于本例是我們給出的***個完整的例子,同時也只是對使用iBATIS的一個介紹,因此它的代碼將會比真正的應(yīng)用要簡單得多。類型安全和異常處理我們以后將會詳細(xì)討論,因而在此處對于這些話題我們將不予考慮。代碼清單2-4給出了完整的代碼:
代碼清單2-4 Main.java
就是這些了!我們在大約10行Java代碼中就完成了對iBATIS的配置,執(zhí)行了SQL語句,并且打印了結(jié)果。以上就是一個功能完整的iBATIS應(yīng)用所需要的全部Java代碼。稍后,我們將對其進(jìn)行改進(jìn),但是現(xiàn)在我們將繼續(xù)討論有關(guān)iBATIS配置的基礎(chǔ)知識。
iBATIS快速創(chuàng)建應(yīng)用3配置iBATIS(預(yù)覽)
考慮到我們將在下一章中深入介紹如何配置iBATIS,所以此處我們將只是簡單介紹一下。此處你不會找到有關(guān)配置選項的過多解釋,但是我們將給出最重要的信息。
首先,讓我們來研究SqlMapConfig.xml文件。它是使用iBATIS的起點(diǎn),負(fù)責(zé)把所有的SQL映射文件組合在一起。代碼清單2-5給出了我們的簡單應(yīng)用中使用的SqlMapConfig.xml文件。
代碼清單2-5 最簡單的iBATIS應(yīng)用中的SQL映射配置
你可能已經(jīng)猜到,我們正是在此配置文件中告訴iBATIS如何連接數(shù)據(jù)庫,以及獲取哪些SQL映射文件。由于這是一個XML文件,我們需要提供doctype和DTD用于驗證(1)。SIMPLE是一個iBATIS內(nèi)置事務(wù)處理器的別名(2)。我們需要為這個事務(wù)處理器提供JDBC驅(qū)動的名稱、JDBC URL、以及允許你連接到數(shù)據(jù)庫的用戶名(username)和密碼(password)。然后你將提供你的SQL映射文件(3)。此例中,我們只有一個SQL映射文件,但是你可以想要多少就提供多少個。該文件中你還可以做一些其他設(shè)置,我們將在下一章中詳細(xì)介紹。
現(xiàn)在你已經(jīng)看到了主配置文件,下面我們來看一下SqlMap.xml文件(代碼清單2-6)。這個文件包含了我們將要運(yùn)行的SQL語句。
代碼清單2-6 最簡單的SQL映射
代碼清單2-6的XML中,我們接受了一個String類型的參數(shù)(parameterClass)作為GROUPNAME列的值,并且把結(jié)果類(resultClass)映射到了一個HashMap上。
警告:
我們并不推薦使用Map(例如,HashMap、TreeMap)作為域模型,但是這樣做確實顯示了iBATIS所提供的映射的靈活性。你并不總是需要映射到JavaBean——你可以直接映射到Map或者基本類型。
無論你是否相信,你現(xiàn)在已經(jīng)看到了使用iBATIS所需要的所有代碼和配置。我們故意將它分散開以便于印刷,但是即使如此,這些代碼總共也只有大約50行,包括Java和XML。而且更重要的一點(diǎn)是,這50行代碼中有45行都是有關(guān)配置的,這些配置在一個應(yīng)用中只需要編寫一次即可,而不需要針對每個語句都寫一次。正如你在本章之前的例子中所見到的那樣,使用JDBC最終需要對每條SQL語句都編寫50行或者更多的代碼。
iBATIS快速創(chuàng)建應(yīng)用4 構(gòu)造應(yīng)用
通常當(dāng)構(gòu)建一個大型應(yīng)用時,你都會使用一些類似于Ant的工具來簡化構(gòu)建過程。由于本例中我們只有一個類,因此就不需要麻煩地為它創(chuàng)建一個Ant腳本了。為了編譯此應(yīng)用,你只需要在classpath上添加兩個JAR文件:ibatis-common-2.jar和ibatis-sqlmap-2.jar,因此我們只要用命令行把它們輸入給Java編譯器即可:
- javac -classpath <your-path>ibatis-common-2.jar;
- <your-path>ibatis-sqlmap-2.jar Main.java
當(dāng)然了,以上的代碼應(yīng)該在同一行中輸入,并且你應(yīng)該用JAR文件的實際路徑來代替<your-path>。如果一切都順利的話,編譯器應(yīng)該不會產(chǎn)生任何輸出到屏幕上,而只是在當(dāng)前目錄上創(chuàng)建一個Main.class文件。
iBATIS快速創(chuàng)建應(yīng)用5 運(yùn)行應(yīng)用
在執(zhí)行此應(yīng)用時,我們還需要另外一些JAR文件,但也不是那么多。為了運(yùn)行我們的應(yīng)用,我們只需要在classpath上添加以下JAR文件即可:ibatis-common-2.jar、ibatis-sqlmap-2.jar、commons-logging.jar以及JDBC驅(qū)動(在此例中,這個驅(qū)動器就是mysql-connector-java.jar),因而下面應(yīng)該輸入以下這個命令:
- java -classpath <your-path>;mysql-connector.jar;commons-logging.jar;
- ibatis-common-2.jar;ibatis-sqlmap-2.jar;.Main
同樣地,在編輯時以上代碼必須在同一行中,同時應(yīng)該用系統(tǒng)中的實際路徑來代替<your-path>。
這個程序運(yùn)行之后會告訴你選擇出了多少條記錄,然后將它們以一種以較粗糙的格式輸出,類似如下:
iBATIS框架被設(shè)計得非常靈活。它可以是一個非常輕量簡單的框架,只執(zhí)行SQL并且返回數(shù)據(jù),當(dāng)然也可以被用來做其他更多的工作。
這種靈活性的關(guān)鍵之一在于對框架的正確配置。在下一章中,我們將討論兩種主要的配置文件類型,然后研究通過使用配置來處理復(fù)雜情況的一些模式。
注意:
配置文件都是標(biāo)準(zhǔn)的XML文檔。這意味著如果你有一個時髦的XML編輯器,就可以用DTD(Document Type Definition)來驗證你的文檔是否存在語法錯誤,有時候甚至可以在編輯過程中提供代碼提示和自動完成功能。
現(xiàn)在你已經(jīng)看到了最簡單形式的iBATIS。在我們繼續(xù)討論其他內(nèi)容之前,先來討論一下iBATIS的未來發(fā)展方向,這樣你在使用它時就可以更加的有信心。
iBATIS快速創(chuàng)建應(yīng)用就向你介紹到這里,希望對你有幫助。
【編輯推薦】