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(二)