admin 管理员组文章数量: 1184232
2024年3月7日发(作者:车铣复合编程教程)
Torque的应用总结
文章摘要
Torque项目是Apache的公开源代码ORM(Object-Relational Mapping)工具,主要用于生成访问数据库的资源和java代码、提供使用这些代码访问数据库的运行时(runtime)环境。通过使用Torque,你可以使用面向对象方式访问数据库,不再需要编写任何SQL语句,对于我们快速进行项目开发起到了至关重要的作用。
关键词
Torque 访问 数据库 配置 应用 心得
正文
在开发软件的时,我们免不了要和数据库打交道,而且不同的项目所采用的数据库类型还不同,有IBM DB2,Oracle,MS SQL,My SQL等等,开发过程中主要就是对数据的存取(增、删、改、查询)。为了隔离业务逻辑和数据存取,充分体现MVC模式的优势,在开发时我们采经常用第三方ORM工具,比如Torque,Hibernate,JDO,用它作为业务逻辑层与数据库层的接口。
我参与的几个项目中使用的ORM工具多数是Torque,在开发使用过程中遇到了一些问题,和同事们讨论了很多,有了一点心得体会,就形成了下面的笔记(请各位先掌握Torque基本的编程知识)。
Torque配置方面
1, (1)牵涉到ectColumn的问题时,只能用ct(crit),而不能用相关类对应的ct(crit)方法,返回的是Record List;
(2)如果对String类型的字段进行排序cendColumn(unm),生成的sql查询的select语句中会多一列"Select UPPER(unm)",但还是可以用ct(crit);
(3)要单独处理某一记录的某一字段时,需要先将ct(crit).get(0)强制转化成Record类型,再调用getValue(i)得到Value类型的变量,再将其转化成相应的数据类型(调用asInt(),asString()等等方法),注意i是从"1"开始的;
2, 关于何时用BasePeer,何时用本类的Peer的结论:
(1)当涉及到函数(比如Count,Max,Min)时,只能用BasePeer;
(2)当涉及addSelectColumn(*)时,只能用BasePeer;
(3)当涉及取整条记录(包括所有字段)时,最好用本类的Peer,因为可以返回TblObj List;
3, 本类的Peer中有很多有用的工具方法,比如取"1对n"关系对象,将Record和TblObject相互转化等等,可以大量减少我们的代码量;
4, 利用Torque多建视图vPeer(尤其是表与表之间关系复杂时),视图vPeer只负责查询操作,而原来的本类的Peer就只负责增删改操作了;将Torque生成的SQL语句修改成建视图的SQL语句,投机取巧;
5,在写时,如果表与表之间存在"一对一"或者是"多对多"关系,外键的配置
List userList = Users(crit,conn);
TblLevel level = Level()l;//大量减少了代码量
这时Torque默认是“lazy”模式,就是说当第一次去取子类list时Torque才查询数据库形成List放于内存中。
6,关于字段变量名称命名规则:一律小写,不要下滑线。比如:
再配置
7,在进行db-配置时,如果碰到某些不清楚的选项,比如 type="VARCHAR">中的 8,在进行Linux+DB2+Torque+Tomcat+JNDI配置时,要注意一些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)配置ties,将"## Using jndi"下面的四行打开;其它的不能打开;注意"Path"要写成全名("java:com/env/jdbc/course"),比如: ## Using jndi y=taSourceFactory =java:com/env/jdbc/bookstore l = LContextFactory = (2)配置Tomcat/conf/,添加 (3)配置/WEB-INF/,添加 10,Torque3.0+JNDI+Oracle9i+WebSphere5.1配置: (1)webshpere中oracle驱动采用Oracle Jdbc Driver(或XA的);将驱动拷贝到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"下的两句配置: y=taSourceFactory =jdbc/bookstore(注意path中没有"java:com/env/") (5)中也不需要 11, Torque使用流程模式: PowerDesigner(ERWin)进行数据建模,然后再生成物理数据库,然后用torque-gen-3.1执行扫描任务ant jdbc,生成和*.java;(torque-gen-3.1和torque-3.1不一样) 首先在ties中配置好数据库链接参数 然后 ant -f 再进入工程目录 修改 ties 再 ant -f jdbc 修定文件 再ant -f om 再ant -f compile Torque编程方面 1、直接运行SQL语句 //要用eQuery(sqlStr) int recRightCount = ((Record) eQuery("select count(*) as rightCount from tbluser_right_def").get(0)).getValue(1).asInt(); List list = eQuery(strSQL) ; 2、事务操作 //mysql中的数据表的类型默认是MYISAM,要改为InnoDB类型才支持事务操作 conn = (aultDB()); 当一个事务中又要求进行多次查询操作,尤其是有for的时候,一定要把conn传入查询方法中,如ct(crit,conn);否则数据库会死锁的。 3、排序 cendingOrderByColumn(_TIME); endingOrderByColumn(); 4、组合SQL语句 //设置 查询条件 (,new Integer(ToStatus(12)),R_EQUAL); //组合复杂的SQL,多条件判断 terion().and(Criterion(,new Integer(ToStatus(13)),_THAN)); terion().and(Criterion( ,(Object)strObject,)); (,(Object) " not in (select id from TblCategory where id <> '11')",);(注意crit中的条件String中要带上字段ID的) (_NAME, searchField, (Object) ("%" + searchCriteria + "%"), ); terion(_NAME, searchField).setIgnoreCase(true); (注意: For PostgreSQL this will use ILIKE, for other databases it will use the SQL upper() function on the column and search string (for Oracle you may want to define a function index to make this efficient).) //组成简单的关联查询SQL,两边都是字段:TBLPRO_=TBLPRO_ n(,); n(,); //ct(crit)之前选择要输出的字段 ectColumn(TA); ectColumn(); 5、Record向ObjBean对象实例转化 //先用BasePeer获得List(Records) List list = ct(crit); Record record = (Record)(0); //单个record对象转化成objBean TblObj obj = null; Obj = teObject(record,1,new TblObj());//offset是从第一个字段开始算的 // Obj = 2Object(record,1, );//这样也可以,它调用populateObject //List records转化成List objBeans list = teObjects(list); 6、不规则(不能转化成单个ObjBean)Record向RunData对象实例转化 //单个record对象转化成rd RunData rd = tance(record);//因为rd中存放了一个Record对象实例 //List records转化成List rds list = ListToRundataList(list); 7、Torque的newObj = ()方法不行,有时候会死循环,只能重载了 8、Torque中注意: ct(crit,conn)中conn可以为null,但是te(crit,conn)中conn可以不能为null,比如: //执行操作 ct(whereCrit,null); if(null != conn){ te(whereCrit, setCrit, conn); }else{ te(whereCrit, setCrit); } 9、Torque中的TblObject类的getXXX()方法不要随便重载,如果要求重载必须写成getXXX(int flag);其中flag是一个标记虚的参数,实际无用;因为TblObjectPeer中的buildCriteria()用到了这些getXXX();
版权声明:本文标题:Torque的应用总结 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1709824170a547484.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论