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