【程序编程相关:入门系列--纯Java的免费多功能数据库】
【推荐阅读:使用Spring framework实现】说明:这里描述的问题来自: torque3.1.1, village2.0 dev,文中用到的代码来自开源apache项目. 文中虽例子,但主要是辅助说明错误原因与解决办法.以给使用turbine+torque+velocity的人一点帮助. 【扩展信息:java.net.FileNameMap】
torque是apache数据库项目中一个子项目,它实现数据库的持久层,是jdo的apache实现.自从与turbine项目分出来后,它形成了两部分:生成器与运行时库.生成器用来生成数据库资源与访问数据库的类,使用这些类与在运行时库的支撑下,应用程序对数据库的各种操作得以用java对象的普通用法与操作习惯实现.torque除了用到apache其他项目如commons的成果外,还用到了一个开源项目:village(http://share.whichever.com/index.php?screen=village),它位于jdbc api上,提供不用写sql语句就可以实现数据库的crud操作.使用它与数据库里的表以及里面的记录打交道,就象是在一个小镇,一些小屋与小屋里的人们交谈,非常祥与的感觉.它的设计也是非常简洁,占用的空间也不大,真的就象一个游者,可以很轻松的驴行天下.torque的生成器使用了velocity项目,该项目是java的模板语言,在生成数据库资源时,它出了全力,我们可以通过修改{torque.dir}\templates中各子文件夹里的vm模板来适合数据库及你项目中的需要.例如,对于postgresql8,torque生成的库资源中创建数据库的sql代码中没有指定代码页,这样postgresql将使用默认的sql_ascii设置,如果想让生成的资源指定代码页可以修改{torque.dir}\templates\sql\db-init\postgresql中的createdb.vm,本例指定代码页为unicode,如下:#foreach ($databasename in $databasenames)drop database $databasename;create database $databasenameencoding = unicode;#增加该行即可#end用torque做为项目的持久层,其开发过程是很简单的,需要提供的总文件数是4个:在设计阶段使用的build.properties,project-schema.xml,id-table-schema.xml以及在开发阶段的运行时用到的torque.properties.在构建阶段为每个表产生五个类文件:<table-name>.java,<table-name>peer.java,base<table-name>.java,base<table-name>peer.java,这俩文件不要修改,因为用ant重新构建时,这些文件会重新生成.把文件名称以peer结尾的称为peer类,实现对象关系影射(orm),不以peer结尾的称为数据对象,应用与数据对象交互.不以base开头的类扩展了以base开头的类.业务逻辑应该加在子类上.<table-name>mapbuilder.java,这是用于特定表<table-name>的影射文件.peer类的crud操作就是建立在village之上的.
现在开始一个例子,项目名称是cms,以这个例子说明一些问题.这是一个cms项目的模式文件cms-schema.xml:<?xml version="1.0" encoding="gb2312" standalone="no" ?><!doctype database system "http://jakarta.apache.org/turbine/dtd/database.dtd"><database name="news" package="org.news.om"> <table name="atts" idmethod="none" description="保存了新闻的附件信息,它与新闻存在引用关系."> <column name="pagedate" javaname="pagedate" primarykey="true" required="true" type="varchar" size="8" javanamingmethod="underscore" description="页创建日期,缩略形式"></column> <column name="pagecode" javaname="pagecode" primarykey="true" required="true" type="varchar" size="5" javanamingmethod="underscore" description="页代码"></column> <column name="filename" javaname="filename" primarykey="false" required="true" type="varchar" size="30" javanamingmethod="underscore" description="文件名称"></column> <column name="oldfilename" javaname="oldfilename" primarykey="false" required="false" type="varchar" size="30" javanamingmethod="underscore" description="旧文件名称"></column> <column name="attname" javaname="attname" primarykey="false" required="true" type="varchar" size="50" javanamingmethod="underscore" description="附件名称,由用户指定的名称"></column> <column name="img" javaname="img" primarykey="false" required="false" type="blob" javanamingmethod="underscore" description="附件文件,保存大文件"></column>... 下一页