Apache Torque 应用总结

原创 2005年04月22日 17:55:00

1、直接运行SQL语句
//要用BasePeer.executeQuery(sqlStr)
int recRightCount = ((Record) BasePeer.executeQuery("select count(*) as rightCount from tbluser_right_def").get(0)).getValue(1).asInt();
 List list = BasePeer.executeQuery(strSQL) ;

2、根据ID找到记录,在进行相关的操作
      tblcredef = TblcreDefPeer.retrieveByPK(intCreDefID);
      tblcredef.setCreName(strCreDefName);
      tblcredef.setCreNote(strCreDefNote);
      tblcredef.setCreClsid(intCreClsID) ;
      tblcredef.save() ;

3、事务处理
     try{
        conn.rollback();
      }catch(Exception e){
        Debug.println("rollback error" + e.toString()) ;
      }
      return;
    }
    try{
      conn.commit() ;
    }catch(Exception e){
      messageDispatch(InfoString.ERR_ADDPROFLOWDEF);
      try{
        conn.rollback();
      }catch(Exception ex){
        Debug.println("rollback error" + ex.toString()) ;
      }

4、数据库连接
    //mysql中的数据表的类型默认是MYISAM,要改为InnoDB类型才支持事务操作
    try{
    conn = Transaction.begin(Torque.getDefaultDB());
    }catch(Exception e){
      messageDispatch(InfoString.ERR_DBCONN );
      return;
    }
    ……
    //事务处理
    tblbook.save(conn);
    tblrec.save(conn) ;
    Transaction.rollback(conn);

5.降序
      crit.addDescendingOrderByColumn(TblproFloPeer.BEGIN_TIME);

6、组合SQL语句
SELECT TBLPRO_INFO.ACCOUNTA,
       TBLPRO_FLO.PFID,
       TBLOUTERUSER_INFO.USER_NAME,
       TBLPRO_INFO.PROID,
       TBLPRO_INFO.PRO_ACC_CODE,
       TBLPRO_INFO.PRO_TITLE,
       TBLPRO_FLO.PRO_FLO_DEF_NAME,
       TBLPRO_FLO_ZS_DEF.ZS_DEFID,
       TBLZS_DEF.ZS_DEF_NAME
FROM TBLPRO_INFO,
     TBLPRO_FLO,
     TBLOUTERUSER_INFO,
     TBLPRO_FLO_ZS_DEF,
     TBLZS_DEF
WHERE TBLPRO_FLO.DEP_CODE='00000001'
      AND (
           (TBLPRO_INFO.STATUS>=2048 AND TBLPRO_INFO.STATUS<4096) 
           AND TBLPRO_INFO.STATUS & 64 = 64
      )
      AND TBLPRO_INFO.PROID=TBLPRO_FLO.PROID
      AND TBLPRO_FLO.PFDID=TBLPRO_FLO_ZS_DEF.PFDID
      AND TBLPRO_FLO_ZS_DEF.ZS_DEFID=TBLZS_DEF.ZS_DEFID
      AND TBLPRO_INFO.ACCOUNTA=TBLOUTERUSER_INFO.ACCOUNT

//设置 查询条件
//等于具体的数据TBLPRO_FLO.DEP_CODE='00000001'
      crit.add(TblproFloPeer.DEP_CODE,InterSiteSession.getDepCode(m_request));
//组合复杂的SQL,多判断条件
      crit.add(TblproInfoPeer.STATUS,new Integer(Status.numberToStatus(12)),Criteria.GREATER_EQUAL);
     

crit.getCriterion(TblproInfoPeer.STATUS).and(crit.getNewCriterion(TblproInfoPeer.STATUS,

new Integer(Status.numberToStatus(13)),Criteria.LESS_THAN));    

crit.getCriterion(TblproInfoPeer.STATUS).and(crit.getNewCriterion(TblproInfoPeer.STATUS ,(Object)strObject,Criteria.CUSTOM));
//简单的SQL,两边都是字段:TBLPRO_INFO.PROID=TBLPRO_FLO.PROID
      crit.addJoin(TblproInfoPeer.PROID,TblproFloPeer.PROID);
      crit.addJoin(TblproFloPeer.PFDID,TblproFloZsDefPeer.PFDID);
      crit.addJoin(TblproFloZsDefPeer.ZS_DEFID,TblzsDefPeer.ZS_DEFID);
      crit.addJoin(TblproInfoPeer.ACCOUNTA,TblouteruserInfoPeer.ACCOUNT );     
//选择要输出的字段
      crit.addSelectColumn(TblproInfoPeer.ACCOUNTA);
      crit.addSelectColumn(TblproFloPeer.PFID);
      crit.addSelectColumn(TblouteruserInfoPeer.USER_NAME);
      crit.addSelectColumn(TblproInfoPeer.PROID);
      crit.addSelectColumn(TblproInfoPeer.PRO_ACC_CODE);
      crit.addSelectColumn(TblproInfoPeer.PRO_TITLE);
      crit.addSelectColumn(TblproFloPeer.PRO_FLO_DEF_NAME );
      crit.addSelectColumn(TblproFloZsDefPeer.ZS_DEFID);
      crit.addSelectColumn(TblzsDefPeer.ZS_DEF_NAME);

//要用BasePeer.doSelect(crit)

5、Record向ObjBean对象实例转化

//先用BasePeer获得List(Records)

List list = BasePeer.doSelect(crit);

Record record = (Record)list.get(0);

//单个record对象转化成objBean

TblObj obj = null;

Obj = TblObjPeer.populateObject(record,1,new TblObj());//offset是从第一个字段开始算的

// Obj = TblObjPeer.row2Object(record,1, TblObj.class);//这样也可以,它调用populateObject

//List records转化成List objBeans

list = TblObjPeer.populateObjects(list);

 

6、不规则(不能转化成单个ObjBean)Record向RunData对象实例转化

//单个record对象转化成rd

RunData rd = RunData.getInstance(record);//因为rd中存放了一个Record对象实例

//List records转化成List rds

list = rd.recordListToRundataList(list);


/***********************************************************************
 *2003-9-17 Torque应用总结(LM & ME)
 **********************************************************************/
1, (1)牵涉到crit.addSelectColumn的问题只能用BasePeer.doSelect(crit),而不能用相关类对应的Peer.doSelect(crit)方法;
(2)关于能否将所有的Select操作归于BasePeer.doSelect()方法还有待验证,并且如果对String类型的字段进行排序crit.addDescendColumn(Peer.strColunm),生成的sql查询的select语句只有"Select UPPER(Peer.strColunm)",其它字段丢失,是不是只能用BasePeer了?
(3)要单独处理某一记录的某一字段时,需要先将BasePeer.doSelect(crit).get(0)强制转化成Record类型,再调用getValue(i)得到Value类型的变量,再将其转化成相应的数据类型(调用asInt(),asString()等等方法),注意i是从"1"开始的;

2, 关于何时用BasePeer,何时用本类的Peer的结论:
(1)当涉及到函数(比如Count,Max,Min)时,只能用BasePeer;
(2)当涉及addSelectColumn(*)时,只能用BasePeer;
(3)当涉及取整条记录(包括所有字段)时,只能用本类的Peer;

3, 本类的Peer中有很多有用的工具方法,比如取"1对n"关系对象,将Record和TblObject相互转化等等;

4, 利用Torque多建视图vPeer(尤其是表与表之间关系复杂时),视图vPeer只负责查询操作,而原来的本类的Peer就只负责增删改操作了.

5,在写db-schema.xml时,如果表与表之间存在"一对一"或者是"多对多"关系,外键的配置还是要尽量写好的,ant生成建表的SQL后再把外键相关的SQL去掉,这样即能保持Torque自动生成的简单好用的工具方法,又不影响数据库的使用.工具方法的代码例子如下:
List userList = tblLevel.getTblUsers(crit,conn);
TblLevel level = tblUser.getTblLevel()l;//大量减少了代码量
这时Torque默认是“lazy”模式,就是说当第一次去取子类list时Torque才查询数据库形成List放于内存中。

6,关于字段变量名称命名规则:一律小写,不要下滑线。比如:


再配置,这样生成的java类就符合标准的JavaBean规范了,更便于我们使用RunData类和其它第三方工具类。

7,在进行db-schema.xml配置时,如果碰到某些不清楚的选项,比如中的属性有哪些值,可以查看http://jakarta.apache.org/turbine/dtd/database.dtd 文件。如果想进一步了解各种字段配置的类型,比如“LONGVARCHAR”,再不同数据库中对应哪些数据类型,就可以查看和修改“D:/torque-3.0/templates/sql/base/db2/db.props”这个配置文件了。

8,在进行Linux+DB2+Torque+Tomcat+JNDI配置时,要注意一些jar包的冲突,比如Tomcat-Naming.jar,这是因为Torque和Tomcat的lib下都有相应的jndi包,但是版本又不同;还要注意Linux中DB2默认是jcc驱动服务,但是Torque目前只支持net和app驱动,所以要先打开DB2的net驱动服务,只要在Linux DB2实例用户中执行“#/db2/bin/db2jstrt 6789” 就可以启动Java DB2 JDBC Applet服务器,指定端口为6789,就可以用net驱动了。

9,Torque中配置Tomcat中的Jndi步骤如下:
(1)配置Torque.properties,将"## Using jndi"下面的四行打开;其它的不能打开;注意"Path"要写成全名("java:com/env/jdbc/course"),比如:
## Using jndi
torque.dsfactory.bookstore.factory=org.apache.torque.dsfactory.JndiDataSourceFactory
torque.dsfactory.bookstore.jndi.path=java:com/env/jdbc/bookstore
torque.dsfactory.bookstore.jndi.java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory
torque.dsfactory.bookstore.jndi.java.naming.factory.url.pkgs = org.apache.naming
(2)配置Tomcat/conf/server.xml,添加;
(3)配置/WEB-INF/web.xml,添加;

10,Torque3.0+JNDI+Oracle9i+WebSphere5.1配置:
(1)webshpere中oracle驱动采用Oracle Jdbc Driver(或XA的);将驱动ojdbc14.jar拷贝到websphere;
(2)websphere中Jndi Name命名为"jdbc/course";
(3)若直接采用jdbc编程调用websphere中的jndi获取连接conn时,只需lookup("jdbc/course");而不必用全名("java:com/env/jdbc/course");
(4)Torque中调用websphere中的Jndi时,只是要打开"##Using JNDI"下的两句配置:
torque.dsfactory.bookstore.factory=org.apache.torque.dsfactory.JndiDataSourceFactory
torque.dsfactory.bookstore.jndi.path=jdbc/bookstore(注意path中没有"java:com/env/")
(5)web.xml中也不需要配置。

Torque的应用总结

  • 2012年11月25日 15:13
  • 48KB
  • 下载

Apache Torque的关键配置参数 (DBCP)

起因频繁的connection close/open.DBA点名:有个component从3个礼拜前突然开始频率的打开/关闭db的connection,大大抵消了使用connection pool的好...

Apache Torque实现分页查询

分页查询工具类 测试类 Apache Torque实现分页查询Torque的初始化参见Apache Torque连接多个数据库及其使用1.分页查询工具类import java.util.List; i...
  • sl1992
  • sl1992
  • 2017年11月14日 18:25
  • 191

作业提交系统Torque个人安装总结(PBS)

PBS是功能最为齐全,历史最悠久,支持最广泛的本地集群调度器之一。 PBS的目前包括openPBS,PBS Pro和Torque三个主要分支。 其中OpenPBS是最早的PBS系统,目前已经没有太...
  • educast
  • educast
  • 2011年12月31日 08:55
  • 2500

作业提交系统Torque个人安装总结

  • 2010年03月21日 22:59
  • 25KB
  • 下载

Ubuntu安装Torque教程

1. 下载Torque源代码: http://www.adaptivecomputing.com/support/download-center/torque-download/ 我下载了:torq...

Torque + Maui配置手册之抛砖引玉篇

Torque + Maui配置手册之抛砖引玉篇     本文将以应用于实际案例(南航理学院、复旦大学物理系、宁波气象局)中的作业调度系统为例,简单介绍一下免费开源又好用的Torque+Maui如何在...

Torque 的安装

PBS是功能最为齐全,历史最悠久,支持最广泛的本地资源管理器之一。 PBS的目前包括openPBS,PBS Pro和Torque三个主要分支。 其中OpenPBS是最早的PBS系统,目前已经没有太多后...

Torque(2.4.6)+maui(3.3.1)下对用户配置节点的办法

原创作者:zhangguangping 转载自:点击打开链接 最近配置集群的时候,遇到了一个问题:我们的集群组分比较复杂,想对不同的用户对不同的节点有不同的使用权。所以需要将节点对用户分配...
  • wjciayf
  • wjciayf
  • 2014年11月26日 14:02
  • 760

Centos7安装-多节点Torque

Centos7安装-多节点Torque1 简介PBS(Portable Batch System)最初由NASA的Ames研究中心开发,主要为了提供一个能满足异构计算网络需要的软件包,用于灵活的批处理...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Apache Torque 应用总结
举报原因:
原因补充:

(最多只允许输入30个字)