Torque总结

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值