ant入門示例——mybatis學習筆記之預備篇(二)

       在上篇博文《ant的下載與安裝——mybatis學習筆記之預備篇(一)》中,筆者介紹了ant的下載與安裝。本文將介紹如何使用ant建立一個簡單的工程,做爲ant的入門示例。 html

      在這裏首先和你們分享一下筆者學習新技術的一點心得。每一項技術都會涉及到不少的知識點,這很容易對初學者形成較大的心理壓力。若是剛開始把目標定得太高,寫較複雜的程序的話,會有一個很大的壞處:由於是初學,基礎知識掌握得並不牢固,也缺少經驗,犯錯誤的概率更大。那麼此時這個不牢固的基礎知識以及經驗的匱乏,天然會給排錯增長很大的困難,由於你有太多的不肯定。這不但耽誤時間,並且對自信心也是一個打擊,至少會加重本身的心理壓力。然而,若是隻是用它寫一個較小的程序的話,實際上只會用到其中很小一部分的知識。這樣出錯後(這是不可避免的),不肯定的地方也較少,排錯也容易。所以,筆者的作法一般是先寫出一個簡單的程序,經過這個過程,先牢固掌握最基本的知識並開始積累經驗。而後,再以此爲基礎,逐漸擴大編寫程序的複雜度(這樣跨度小)。這樣出錯後,因爲先前的知識和經驗的積累,以及較小的跨度,排錯的難度天然大大下降。這樣就能夠減輕心理壓力,逐漸樹立自信,比較容易地逐步掌握愈來愈多的知識。所以,本文以及後續的博文都會貫徹同一條原則:從最簡單的開始,逐漸增長複雜度。本文就先介紹如何編寫一個簡單的ant工程,之後mybatis的學習筆記,都用ant來組織工程。 java

      存放ant工程全部的文件須要一個目錄,筆者在本身機器上的E:\DemoPrograms下新建一個目錄AntDemo,用來建立本文的ant工程,其餘全部的目錄都以此目錄爲基準。在此目錄下須要有三個子目錄,它們是src、lib和classes,其做用分別以下: json

  1. src:存放源代碼文件和工程所需的配置文件; mybatis

  2. lib:工程用到的jar包; app

  3. classes:編譯後的.class文件被輸出到此目錄,工程所需的配置文件也會被複制到此目錄下(在後面咱們能夠看到,實際上這個目錄咱們可讓ant幫咱們建立)。 ide

      本示例將建立一個User對象,並把它以JSON字符串的形式輸出(有關JSON的知識,讀者可參考http://www.json.org)。程序很是簡單,純屬示例。User類是一個簡單的JAVA Bean,代碼以下: 學習

package com.abc.people;
public class User {
private int id;
private String name;
private int age;
private String gender;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender()
{
return gender;
}
public void setGender(String gender)
{
this.gender = gender;
}
}

      依據此類的package聲明,在src下建立子目錄com\abc\people(包的層次與與目錄層次一一對應),把User.java文件存放在此目錄下。而後是建立User對象並轉換爲JSON字符串的程序,在這裏是AntDemo類,代碼以下: ui

package com.demo;
import com.abc.people.User;
import net.sf.json.JSONObject;
public class AntDemo
{
public static void main(String[] args)
{
User user = new User();
user.setId(10);
user.setName("General Patton");
user.setAge(60);
user.setGender("male");
//建立一個JSONObject對象
JSONObject json = JSONObject.fromObject(user);
//以JSON字符串的形式打印
System.out.println(json.toString());
}
}

      與User.java相似,咱們根據AntDemo所在的包,在src目錄下建立目錄com\demo,用來存放AntDemo.java文件。本示例須要用到的jar包以下:commons-beanutils-1.8.3.jar,commons-collections-3.2.1.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,json-lib-2.4-jdk15.jar。天然,咱們須要把這些jar包複製到lib目錄下。 this

      接下來須要作的,就是建立ant工程的核心所在,編寫生成文件。生成文件默認名爲build.xml,通常存放在工程的頂級目錄中,在本示例中就是在AntDemo下。生成文件包含一個project元素,它是頂級元素,表明一個工程。project元素至少一個target元素,而每一個target元素又包含一個到多個task元素。執行ant,就是執行這些target元素;而執行每一個target元素,就是依次執行它所包含的task元素。本工程的build.xml文件以下: spa

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--project元素。name屬性指定工程的名稱,default屬性
指定ant默認執行的target,即不指定要執行的target時,ant
執行的target。basedir指定本工程的基準目錄,這裏指定爲
當前目錄。-->
<project name="AntDemo" default="compile" basedir=".">
<!--property元素,定義了兩個元素,供後面以${元素名}的形式引用。-->
<property name="targetdir" value="classes"/>
<property name="srcdir" value="src"/>
<!--定義一個path元素,指定id屬性,供後面引用-->
<path id="library">
<!--定義一個fileset元素,用於指定須要用到的文件。dir屬性指定哪一個目錄下的文件。-->
<fileset dir="lib">
<!--指定包含lib目錄下的全部jar包-->
<include name="*.jar"/>
</fileset>
</path>
<!--定義一個target元素,name屬性爲必須,用於標識此target。description屬性用於描述此target,無太大意義。depends屬性指定執行此target,所依賴的其餘target。這裏指定爲了運行compile這個target,需首先執行clean,copy-resources這兩個target。-->
<target name="compile" description="Compiles the Task" depends="clean">
<!--javac是ant的核心任務(task),用於編譯JAVA源程序。srcdir屬性指定源程序所在的目錄,${srcdir}代表引用上面定義的名爲srcdir的property元素的值。destdir指定編譯後生成的.class文件的輸出目錄。一樣地,這裏使用了${targetdir}的形式引用了上面定義的名爲targetdir的property元素的值。classpathref代表引用上面定義的id爲library的path元素。在這裏,便可把它包含的.jar包加載到classpath中,而不須要像筆者之前那樣本身手動運行setclasspath命令。-->
<javac srcdir="${srcdir}" destdir="${targetdir}"
classpathref="library" includeantruntime="no"/>
</target>
<!--定義一個名爲clean的target。-->
<target name="clean">
<!--delete是ant的一個核心任務,用於刪除目錄或文
件。這裏用來刪除classes目錄。即先把之前建立的classes目錄刪除,省得舊文件形成干擾-->
<delete dir="${targetdir}"/>
<!--mkdir也是一核心任務,用於建立目錄。這裏用來
新建立classes目錄-->
<mkdir dir="${targetdir}"/>
</target>
<target name="copy-resources">
<!--copy也是ant的一個核心任務,用於複製目錄或文
件。todir指定複製的目標目錄。本示例未使用此任務-->
<copy todir="${targetdir}">
<!--fileset元素指定要複製的文件集,dir屬性指定複製的源目錄,exclude元素指定排除此目錄下的全部java源文件,即複製除這些文件以外的全部文件-->
<fileset dir="${srcdir}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<!--depends屬性指定運行此target應先運行名爲compile的target-->
<target name="run" depends="compile">
<!--java是ant的核心任務,用於執行某個java類。classname屬性用於指定要運行的類,這裏要用到類的全名fork設爲true代表使用另外的JVM來運行咱們的JAVA類,而不是使用運行ant的那個JVM。classpathref與上面的javac裏的同樣-->
<java fork="true" classname="com.demo.AntDemo" classpathref="library">
<!--將classes目錄加載到classpath中-->
<classpath path="${targetdir}"/>
</java>
</target>
</project>

       打開命令行窗口,進入到E:\DemoPrograms\AntDemo目錄下。若直接執行ant命令,ant將在當前目錄下搜尋build.xml文件(這是默認狀況),並根據project元素的default值,執行compile這個target。若想運行run這個target,則執行命令:ant run。這裏咱們來分析一下執行這個target的流程:在run這個target中,depends屬性指定應先運行compile這個target;而compile又指定應先運行clean這個target。所以,整個流程是:先運行clean,把舊的classes目錄刪除,避免它包含的舊文件形成干擾;而後建立一個全新的classes目錄;而後運行compile target,編譯源程序並將.class文件輸出到classes目錄中;最後運行run target,執行編譯好的程序。固然,在編譯和執行程序的時候,ant都根據classpath和classpathref等的值,幫咱們把相應的jar包和classes目錄加載到了classpath中。執行過程以下圖所示:

151212871.png

       如上圖所示,ant將執行的大體步驟打印了出來。由此咱們能夠看出,ant首先找到生成文件,而後按照咱們在生成文件中的定義,依次執行相應的target及其中的task。

      若想讓ant打印出執行過程當中的詳細信息,可執行命令:ant -verbose run。以下圖顯示了執行clean target時的詳細步驟:

152413526.png

      而下圖則代表ant在調用本機的java編譯器時,使用了-classpath參數,從而把咱們的jar包加載進了classpath中。

152455676.png

      (點擊下面的「附件下載」,可下載本文的ant工程。)

       猛戳這裏全面系統地學習MyBatis 3


【MyBatis學習筆記】系列之預備篇一:ant的下載與安裝

【MyBatis學習筆記】系列之預備篇二:ant入門示例

【MyBatis學習筆記】系列之一:MyBatis入門示例

【MyBatis學習筆記】系列之二:MyBatis增刪改示例

【MyBatis學習筆記】系列之三:MyBatis的association示例

【MyBatis學習筆記】系列之四:MyBatis association的兩種形式

【MyBatis學習筆記】系列之五:MyBatis與Spring集成示例

【MyBatis學習筆記】系列之六:MyBatis與Spring集成示例續

【MyBatis學習筆記】系列之七:MyBatis一對多雙向關聯

【MyBatis學習筆記】系列之八:MyBatis MapperScannerConfigurer配置

【MyBatis學習筆記】系列之九:MyBatis collection的兩種形式

【MyBatis學習筆記】系列之十:MyBatis日誌之Log4j示例

【MyBatis學習筆記】系列之十一:MyBatis多參數傳遞之註解方式示例

【MyBatis學習筆記】系列之十二:MyBatis多參數傳遞之默認命名方式示例

【MyBatis學習筆記】系列之十三:MyBatis多參數傳遞之Map方式示例

【MyBatis學習筆記】系列之十四:MyBatis中的N+1問題

【MyBatis學習筆記】系列之十五:MyBatis多參數傳遞之混合方式

【MyBatis學習筆記】系列之十六:Spring聲明式事務管理示例

【MyBatis學習筆記】系列之十七:MyBatis多對多保存示例

【MyBatis學習筆記】系列之十八:MyBatis多對多關聯查詢示例

【MyBatis學習筆記】系列之十九:如何在MyBatis-3.2.7中使用Log4j2 rc2

MyBatis中如何經過繼承SqlSessionDaoSupport來編寫DAO(一)

MyBatis中如何經過繼承SqlSessionDaoSupport來編寫DAO(二)

相關文章
相關標籤/搜索