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中也不需要配置。

Ubuntu安装Torque教程

1. 下载Torque源代码: http://www.adaptivecomputing.com/support/download-center/torque-download/ 我下载了:torq...
  • u011630575
  • u011630575
  • 2015年09月06日 20:23
  • 2544

torque---添加计算节点

torque怎么添加计算节点呢1 建用户2 复制 torque-package-mom-linux-x86_64.sh torque-package-clients-linux-x86_64.sh...
  • zhuimuzhuimu
  • zhuimuzhuimu
  • 2016年04月15日 15:42
  • 291

利用torque搭建分布式程序运行环境

利用torque搭建分布式程序运行环境 第一篇自己翻译英文资料以及自己总结的博客。 一、torque简介 Torque 提供批量作业和分布计算机资源的控制功能。它基于原始的PBS(Portable ...
  • cheng_xu_yuanlilin
  • cheng_xu_yuanlilin
  • 2016年09月11日 16:58
  • 536

Linux下Torque安装部署方法

转载地址:http://blog.csdn.net/jiayanhui2877/article/details/8230441 总结: 1、安装系统 2、修改/etc/hosts文件将计算节...
  • houqingdong2012
  • houqingdong2012
  • 2013年03月19日 17:26
  • 2831

torque 简介

Torque简介Torque是一个开源的资源管理器,来自于Cluster Resources,是一个社区基于PBS项目努力的结晶。它提供对批处理作业和分散的计算节点(Compute nodes)的控制...
  • doomvsjing
  • doomvsjing
  • 2016年03月04日 00:43
  • 513

Torque PBS管理系统

PBS管理系统 (一)作业提交系统Torque个人安装总结(PBS) PBS是功能最为齐全,历史最悠久,支持最广泛的本地集群调度器之一。 PBS的目前包括openPBS,PBS Pro和T...
  • educast
  • educast
  • 2012年01月16日 10:58
  • 3911

Torque引擎初探

GarageGames公司一直致力于提供特性丰富而价格低廉的游戏开发工具以及丰富的庞大的资源为各个层次的游戏开发者打开游戏开发之门。不论你是初涉游戏开发还是经验丰富的老手,Torque 都有适合你的一...
  • zhuzhao
  • zhuzhao
  • 2008年03月06日 15:59
  • 3554

Torque安装部署方法

总结: 1、安装系统 2、修改/etc/hosts文件将计算节点服务节点对应的IP加入其中,此处不加则无法进行通信 3、关闭防火墙service iptables stop,此处不停止则无法进行...
  • jiayanhui2877
  • jiayanhui2877
  • 2012年11月27日 15:47
  • 9045

[Apache-Torque] Torque学习概要

Torque学习概要                                                                                          ...
  • Fitzwilliam
  • Fitzwilliam
  • 2006年10月12日 09:57
  • 2366

torque 安装排错

一:在管理节点发现某个节点状态为down,这种情况有两种原因 第一种原因:pbs_mom 配置文件错误 1.分析:服务pbs_mom启动后,默认首先去查看/var/spool/torque/mom...
  • wjciayf
  • wjciayf
  • 2015年12月03日 09:12
  • 614
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Apache Torque 应用总结
举报原因:
原因补充:

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