1 检查运行环境 

  安装JDK 1.5

  安装Eclipse Java EE IDE for Web Developers.

  安装Zdeveloper插件

  安装tomcat

 

2  工程及环境配置

  使用Zdeveloper菜单--Create Z-Style Web Project创建ZCF插件工程,填入项目名称后按如下图配置:

[353XAAR6~NQTY$R%R5%~[C

 

  单击下一步,出现

3N9`_8DF8[G(K@7MMC`_H0S

 

  单击下一步,出现

[R0NU5]98CUP07SIZ]FJV@7

 

  在相应的地方填入数据库账号密码,配置好数据库连接。

 

3  创建数据库

  在项目的DB目录单击右键,新建--其他,选择ZDM Model File,

TD](@XT_(%KCV}PQ2IG}7IS

  创建ZCF的数据模型ZDM文件;

~6HES@6P]D{CZH@}5Q)Q{KQ

  在编辑区的zdm编辑器中配置好相应的表结构,如图所示:

1

4 创建POJO

  打开Table Properties选项卡,

2

  我们会看到4个按钮:

  1) Sync to Database将表结构同步到数据库,这里指的是当前表,并不是模型文件中的所有表;

  2) View Data打开数据库查询工具,查看当前数据;

  3) Generate DAO生成当前表的DAO类;

  4) Generate CRUD Files生成当前表的增删改查文件,通常我们这个按钮默认是不可用的,因为如果我们需要让工具自动生成表数据的赠删改查还需要作更进一步的配置,当我们勾选了Generate CRUD Files时,这个按钮会变得可用。

  Table Name和Table Code可以修改您的表名称和表代码;

  CRUD Information组中是用来通过配置模板生成相应的表结构的增删改查等操作界面的;

  通常我们在创建完表结构单击“保存”之后,开发插件会自动在项目的java源目录的com.zving.schema包下自动创建一个与Table Code同名的DAO类,如图所示,

%CNWMI(O_I8WEFQSE7$0UZT

  当然了,如果你比较担心插件是否真的为你自动生成了POJO文件,你也可以通过单击

  Table Properties选项卡上的Generate DAO按钮来手工生成。

 

5 我的第一个插件错误

  做完前面的工作,我们会看到这个文件上有错误,但是这并不说明生成的DAO类有问题,使用eclipse的“标记”窗口,我们可以看到我们项目所发生的问题。于是我们打开“标记”窗口。

3

  我们可以看到上面的错误提示:File must be a member of plugin!(文件必须是一个插件成员)

  这是因为我们的开发插件会自动去检查文件是否都被插件所包含,因为这样我们才能有效的避免产生一些垃圾,以及保持项目的干净整洁。要想消除此错误,你需要创建一个插件配置文件。

 

6 配置插件解决插件错误

  在java源文件夹的plugin包下,单击右键,新建--其他,选择Zving Plugin File,你可以新建一个插件配置文件,在弹出向导中依次填入插件ID,插件名称,如图所示:

[5AQMQ}7(W}AJ39I7W(JTQO

  通常我们建议插件ID的命名规则模仿java的包命名法则去命名,以保持开发中的整体规范,而插件名称则比较随意了。

  单击完成之后,我们会看到插件配置的真实面目,这看起来似乎很复杂,你也许已经有点不知所措了。当然,消除一个错误并不需要这么复杂的操作,首先你需要在Plugin Class中填入你的插件类名,比如com.zving.demo.DemoPlugin,然后单击Plugin class,然后单击完成,DemoPlugin插件的类就自动创建好了。

${29807V}$BL}_VK[%23IHW

  类文件的代码如下:

  package com.zving.demo;

 

  import com.zving.framework.extend.plugin.AbstractPlugin;

  import com.zving.framework.extend.plugin.PluginException;

 

  public class DemoPlugin extends AbstractPlugin {

 

         public void start() throws PluginException {

                     // TODO 自动生成的方法存根

  }

          public void stop() throws PluginException {

                     // TODO 自动生成的方法存根

      }

}

  我们可以发现,这个插件类继承自 com.zving.framework.extend.plugin.AbstractPlugin;抽象类,我们需要实现两个方法,start方法和stop方法:

  start方法,顾名思义就是插件启动时需要做的事情,而stop方法则是插件停止的时候需要做的事情。也就是说,当插件启动和插件停止时你需要做什么只需要在此处补全即可,否则你可以什么都不用做。

  我们会发现,我们新建的这个插件类也提示了File must be a member of plugin!的错误。要解决这个错误,只需要插件配置的Files选项卡中勾选上这些文件即可。

4

  点击保存,插件会再次检查,我们会发现,这个File must be a member of plugin!的错误终于被处理了。是的,所有的File must be a member of plugin错误都只需要这样处理即可。

 

7 如何读取配置

  除了插件配置文件,我们还需要了解一些其他的配置,如framework.xml,Database.xml。

  读取这些配置我们需要调用com.zving.framework.ConfigLoader的load方法即可,load方法有两种形态,带String path参数的和不带String参数的。

  在非web项目中我们要读取配置需要调用带path参数的方法,path指的是配置文件的目录路径设置。而在web项目中,我们很少会有可能用到ConfigLoader类,因为这些工作framework在载入插件前都为你完成了。

  ConfigLoader有5个静态方法(不含构造方法),除开两个load,剩下的3个分别是:

  getElement读取配置文件的值,由于这些配置文件都是xml,所以读取配置文件的值时我们需要指定3个参数,他们依次是:

  path是xml配置文件节点的路径,如”framework.application.config”;

  attrName节点属性名,如:”name”;

  attrValue节点属性的值,入”Code”;

 

  代码示例:

 public static void main(String[] args) {

  String path="F:/JAVA/ZWMS/UI/WEB-INF/plugins/classes";

 ConfigLoader.load(path);

  XMLElement el = ConfigLoader.getElement("framework.application.config""name""Code");

           System.out.println(el.getText());

  }

 

  输出:ZWMS

 

  getElements读取一组配置,它包含一个path参数,即xml的节点路径。返回值是一个XMLElement的列表;

  reload重新载入配置文件。

 

8 初识ZCF 2.x 的ORM

  下面我们来实现一个使用DAO来完成数据库CRUD的HelloWorld例子,这样可以让大家对我刚刚讲到的DAO有一个初步的了解,以ZCDemo为例:

 public static void main(String[] args) {

  String path="F:/JAVA/ZWMS/UI/WEB-INF/plugins/classes";

  //载入指定配置

  ConfigLoader.load(path);

  //新建一个DAO实例

  ZCDemo demo = new ZCDemo();

  //创建事务

  Transaction tran = new Transaction();

  //设置主键值为1

  demo.setID(1L);

  //填充,填充指的是到表中查询包含主键值为1的内容是否存在,如果存在则返回true,不存在则返回false

  boolean updateFlag=demo.fill();

  //给表中字段设置值

  demo.setCode("HelloWorld");

  demo.setName("Zving Common Framework.");

 

  //根据填充判断表中是否存在该记录

 if (!updateFlag) {

  //如不存在则插入一条记录

  demo.setAddTime(new Date());

  demo.setAddUser("XYUU");

  //插入记录

  tran.insert(demo);

 } else {

  //如存在则更新该记录

  demo.setModifyTime(new Date());

  demo.setModifyUser("XYUU");

  //更新记录

  tran.update(demo);

  }

  //提交事务

 if (tran.commit()) {

  //提交成功

  System.out.println(demo.getCode());

  System.out.println(demo.getName());

  } else {

  //提交失败

  System.out.println("fail!");

  }

}

  我相信,通过端helloworld的代码,你可以了解到:

  DAO类ZCDemo描述的是一个数据库的表记录对象;

  使用Transaction 来创建事务;

  使用Transaction 的insert方法来插入记录;

  使用Transaction 的update方法来更新记录;

  使用Transaction 的commit方法来提交记录;

  当然你或许正在猜想,那是不是也可以使用Transaction的delete方法去删除记录呢?

  没错!你想的是对,ZCF框架的DAO使用就是这么简单。

  通过这一章的学习,恭喜你,相信你已经掌握了使用DAO实例对表记录进行增、删、改、查了。不过值得注意的是,我们在使用fill()方法填充的之前必须先给主键指定一个值,而且也只能给主键指定一个值,如果不给主键指定值,则默认使用0作为主键的值去表中查询,这是一些新手可能会犯的错误。另一个需要注意的地方就是,Transaction类中没有rollback(回滚记录)方法,且我们无需去关注回滚的过程,因为如果在提交当中产生了异常,则ZCF的事务处理会对整个过程进行自动回滚,并通过commit的方法的返回值false来告诉你,提交没有成功,所以你无需关注提交的过程,只需告诉用户“你的事务操作失败了!”,是不是很简单呢?