torque-tutorial经典
- 格式:doc
- 大小:117.00 KB
- 文档页数:20
朗川软件有限公司Torque 3.0使用指南1使用简明流程1.1从已经存在的数据库生成schema XML文件1.1.1编辑build.propertiestorque.project = shx3torque.database = oracletorque.targetPackage = net.emedchina.omtorque.database.createUrl =jdbc:oracle:thin:@172.25.3.201:1521:devgbktorque.database.buildUrl = jdbc:oracle:thin:@172.25.3.201:1521:devgbktorque.database.url = jdbc:oracle:thin:@172.25.3.201:1521:devgbktorque.database.driver = oracle.jdbc.OracleDriverer = shx3torque.database.password = shx3torque.database.host = 172.25.3.201# 下面一行至关重要torque.database.schema = SHX31.1.2ant -f build-torque.xml jdbc1.1.3生成:schema/shx3-schema.xml,该文件用于生成模型源代码。
可进行调整,以符合项目需要。
1.1.4ant –f build-torque.xml sql1.1.5生成:src/sql/*,这些文件用于创建数据库及ID_TABLE1.2根据schema XML文件生成java object model模型源代码1.2.1调整shx3-schema.xml,一般情况下不需要调整。
1.2.2ant –f build-torque.xml om1.2.3生成:src/java/*,这些文件用于项目的所有数据库访问1.3在项目中整合torque1.3.1编辑Torque.propertiestorque.applicationRoot = .torque.database.default=shx3torque.database.shx3.adapter=oracle## Using torque's old pooltorque.dsfactory.shx3.factory=org.apache.torque.dsfactory.TorqueDataSourceFactorytorque.dsfactory.shx3.pool.defaultMaxConnections=10torque.dsfactory.shx3.pool.maxExpiryTime=3600torque.dsfactory.shx3.pool.connectionWaitTimeout=10torque.dsfactory.shx3.connection.driver =oracle.jdbc.OracleDrivertorque.dsfactory.shx3.connection.url =jdbc:oracle:thin:@172.25.3.201:1521:devgbker = shx3torque.dsfactory.shx3.connection.password = shx31.3.2在项目的初始化代码中添加一下代码:try {InputStream in =getClass().getResourceAsStream("/Torque.properties");PropertiesConfiguration c = new PropertiesConfiguration();c.load(in);in.close();Torque.init(c);}catch (Exception e) {e.printStackTrace();}1.4增加新表1.4.1备份shx3-schema.xml1.4.2ant –f build-torque.xml jdbc1.4.3将新的表的XML文本块粘贴到备份的shx3-schema.xml1.4.4备份src/java/*1.4.5ant –f build-torque.xml om1.4.6将新的表对应的java文件添加到项目中。
1.5删除旧表1.5.1删除表1.5.2删除项目中该表相关联的java源代码1.6修改数据库表结构1.6.1注意如果修改的表对应的java文件有添加了自定义的方法,含有该方法的java文件需要事先备份。
待增加新表操作完成后,再将这些java文件复制过来,覆盖生成的文件。
其实,torque在生成java文件时,不会覆盖从base基类继承来的类。
所以,在保证安全的情况下,可以直接在修改的package上直接生成java代码。
1.6.2先执行删除旧表,然后执行增加新表。
1.7包管理及缺省基类根据系统的各个子系统,定义的表也分为多个子包。
范例:<?xml version="1.0"?><!DOCTYPE database SYSTEM "/turbine/dtd/database.dtd"><!-- Autogenerated by JDBCToXMLSchema! --><databasename="shx3"defaultIdMethod="none"package="net.emedchina.om.plt"baseClass="net.emedchina.base.DataObject"basePeer="net.emedchina.base.Peer"><table name="TMP_TEST"><column name="ID" primaryKey="true" required="true" size="24"type="CHAR"/><column name="NAME" size="200" type="VARCHAR"/><column name="LASTUPDATE" type="TIMESTAMP"/><column name="COL1" size="24" type="CHAR"/><column name="COL2" size="24" type="CHAR"/></table>..</xml>2torque结构说明2.1Database Maps:存储数据库结构的内部对象。
2.2Peer Classes:进行1-1表操作的对象。
2.3Data Objects:映射为1张表的对象。
2.4Criteria Objects:条件对象。
定义查询条件。
2.5ID Broker:产生表级唯一ID的对象。
2.6Schema Definition:定义数据库逻辑结构的文件。
2.7Selects:通过Peers进行操作。
2.8Inserts:可以通过Peers和DataObject进行操作。
2.9Deletes:通过Peers进行操作。
2.10Joins and linking objects:通过Criteria和Criteria.Criterion进行操作。
3编码3.1在生成的java源码中添加自定义方法自定义的方法可以添加到tableName.java和tableNamePeer.java中,不要修改任何baseTableName.java和baseTableNamePeer.java。
3.2初始化InputStream in =getClass().getResourceAsStream("/Torque.properties");PropertiesConfiguration c = new PropertiesConfiguration();c.load(in);in.close();Torque.init(c);3.3ID生成器的使用3.3.1确认表的ID有primary key属性3.3.2ant –f build-torque.xml jdbc3.3.3生成:从已经存在的数据库生成schema XML文件3.3.4ant –f build-torque.xml3.3.5生成:从schema XML文件生成SQL和Java代码3.3.6ant –f build-torque.xml id-table-init-sql3.3.7生成:src/sql/shx3-schema-idtable-init.sql3.3.8执行生成的 SQL 语句,整合java源代码到项目中3.3.9编码1:使用tableName.save() 时,新的ID自动获得,并插入到新增的记录中。
3.3.10编码2:手工得到下一个ID,得到ID后,ID自动增加// 通过 ConnectionManager 得到一个 Connection conlong id = Torque.getDatabaseMap().getIDBroker().getIdAsLong( con, "表名" );3.4INSERTPublisher addison = new Publisher();addison.setName("Addison Wesley Professional");addison.save();Author bloch = new Author();bloch.setFirstName("Joshua");bloch.setLastName("Bloch");bloch.save();Book effective = new Book();effective.setTitle("Effective Java");effective.setISBN("0-618-12902-2");effective.setPublisher(addison);effective.setAuthor(bloch);effective.save();3.5SELECTCriteria crit = new Criteria();List v = BookPeer.doSelect(crit);Criteria crit = new Criteria();crit.add(BookPeer.ISBN, "0-618-12902-2");List v = BookPeer.doSelect(crit);3.6UPDATECriteria crit = new Criteria();crit.add(TmpTestPeer.ID, "1010");List v =TmpTestPeer.doSelect(crit);if( v.size() == 1 ){TmpTest tt = (TmpTest)v.get(0);System.out.println( tt.getName() );tt.setName("Value from update");tt.save();}3.7DELETECriteria crit = new Criteria();crit.add(TmpTestPeer.ID, "1010");TmpTestPeer.doDelete(crit);crit = new Criteria();crit.add(TmpTestPeer.ID, "1020");List v =TmpTestPeer.doSelect(crit);if( v.size() == 1 ){TmpTest tt = (TmpTest)v.get(0);TmpTestPeer.doDelete(tt);}3.8简单查询Peers.doSelect();3.9复杂查询//select * from abc where (a < 1 and b > 2) or ( a > 5 and b < 3)Criteria crit = new Criteria();Criteria.Criterion a1 = crit.getNewCriterion(ABC.A, 1,Criteria.LESS_THAN);Criteria.Criterion b2 = crit.getNewCriterion(ABC.B, 2,Criteria.GREATER_THAN);Criteria.Criterion a5 = crit.getNewCriterion(ABC.A, 5,Criteria.GREATER_THAN);Criteria.Criterion b3 = crit.getNewCriterion(ABC.B, 3,Criteria.LESS_THAN);crit.add(a1.and(b2).or(a5.and(b3)));3.10关联查询// select tt.* from tmp_test tt,plt_platform pp// where pp.id=tt.idCriteria crit = new Criteria();crit.addJoin(TmpTestPeer.ID, PltPlatformPeer.ID);List v =TmpTestPeer.doSelect(crit);Iterator i = v.iterator();while (i.hasNext()){TmpTest tt = (TmpTest)i.next();System.out.println( tt.getId() + ":" + tt.getName() );}3.11DISTINCTCriteria crit = new Criteria();crit.addJoin(, );crit.setDistinct();List v =TmpTestPeer.doSelect(crit);Iterator i = v.iterator();while (i.hasNext()){TmpTest tt = (TmpTest)i.next();System.out.println( tt.getId() + ":" + tt.getName() );}3.12排序Criteria crit = new Criteria();crit.addDescendingOrderByColumn( STUPDATE );List v =TmpTestPeer.doSelect(crit);Iterator i = v.iterator();while (i.hasNext()){TmpTest tt = (TmpTest)i.next();System.out.println( tt.getId() + ":" + tt.getName() );}3.13GROUP BY AND DISTINCTCriteria crit = new Criteria();crit.addSelectColumn( );crit.addGroupByColumn( );crit.setDistinct();List v =TmpTestPeer.doPSSelect(crit);Iterator i = v.iterator();while (i.hasNext()){Object tt = i.next();System.out.println( tt.toString() );}3.14条件查询Criteria crit = new Criteria();crit.add( , (Object)"1000", Criteria.LIKE );List v =TmpTestPeer.doSelect(crit);Iterator i = v.iterator();while (i.hasNext()){TmpTest tt = (TmpTest)i.next();System.out.println( tt.getId() + ":" + tt.getName() );}3.15自定义查询条件Criteria crit = new Criteria();crit.add( ,(Object)("UPPER(" + + ")='1000'"),Criteria.CUSTOM);List v =TmpTestPeer.doSelect(crit);Iterator i = v.iterator();while (i.hasNext()){TmpTest tt = (TmpTest)i.next();System.out.println( tt.getId() + ":" + tt.getName() );}3.16在查询中使用两次同一字段Criteria criteria = new Criteria();criteria.add(InvoicePeer.COST, 1000, Criteria.GREATER_EQUAL);Criteria.Criterion criterion =criteria.getCriterion(InvoicePeer.COST);criterion.and(criteria.getNewCriterion(criterion.getTable(),criterion.getColumn(),new Integer(5000),Criteria.LESS_EQUAL ));3.17翻页(torque 3.0 对于 Oracle 翻页有BUG!所以,不能在项目中使用torque的反页机制。