这篇文章学习如何使用Torque,作为一个ORM(a tool that maps relational databases to java classes)

用Torque访问数据库,需要如下步骤

  • 定义描述数据库结构(tables, columns等)的schema文件
  • 通过schema生成classes和数据库
  • 使用生成的类 (and the torque-runtime library classes) 访问数据库

创建database schema

每个schema文件包含一个数据库作为根元素。

运行Generator

Torque uses the information from the database schema to generate classes by which the database can be accessed. Also, Torque can generate SQL scripts and documentation in HTML and xdoc format from the schema. The Torque generator must be invoked in order to generate these artifacts. This can be done in three different ways: via Maven 2/3, via ant or via plain Java.

数据库独立性

产生的java代码具有数据库独立性。这意味着不必为每种数据库重新生成代码。但是有几点需要注意的:

  • 不是所有data types are available on all databases.
  • Available data types也可能不同数据库表现不同。E.g. Oracle's date type contains time information as well, in contrast to all other databases.
  • 表名和column名的最大长度也随数据库变化而变化。目前的了解,表名长度不超过27个字符,column名长度不超过31个字符在所有数据库中都是安全的。

产生的SQL具有数据库依赖性 (of course).

初始化Torque runtime

Torque通过调用Torque.init() 来初始化。Torque在使用前必须初始化,而且只能初始化一次。初始化时必须提供执行configuration文件的路径或者configuration本身。

一旦初始化,数据库的runtime model,比如DatabaseMaps会自动有生成的MapBuilder类创建。每个peer class在Base class被加载时构建runtime model,并且将table model注册到相应的database model中。

Configuration说明

  • database handles: 数据库的名称,如果没有定义,则是default

    torque.database.default=bookstore
  • database adapter: 为handle指定adapter。目前支持: derby, mysql, oracle, mssql等
    torque.database.bookstore.adapter=mysql
  • 连接池: 可以为任何实现接口DataSource的连接池。用户可以配置获取datasource的factory。

读数据库

读数据需要指定读哪个数据库里的哪张表。Torque引入Criteria object表达SQL Query。之后将Criteria对象传给一个Peer类,该类会负责查询数据库并将结果以Data Object返回。

Runtime中有两类Criteria类:org.apache.torque.criteria.Criteria and org.apache.torque.util.Criteria。前者推荐给新项目,后者已过时但可以支持legacy项目。

Criteria crit = new Criteria();
Criterion a1 = new Criterion(ABC.A, 1, Criteria.LESS_THAN);
Criterion b2 = new Criterion(ABC.B, 2, Criteria.GREATER_THAN);
Criterion a5 = new Criterion(ABC.A, 5, Criteria.GREATER_THAN);
Criterion b3 = new Criterion(ABC.B, 3, Criteria.LESS_THAN); crit.where(a1.and(b2).or(a5.and(b3)));

写数据库

往数据库中写数据,调用save()方法。写的方式分为insert和update。另外一种选择方案是调用对用Peer类的静态方式doInsert()或者doUpdate()

Mass Updates: BasePeer的中的doUpdate(Criteria, ColumnValues) 方法,允许一次修改多个数据对象。比如将id大于5的author的name置null

Criteria criteria = new Criteria();
criteria.where(AuthorPeer.AUTHOR_ID, 5, Criteria.GREATER_THAN);
ColumnValues columnValues = new ColumnValues();
columnValues.put(AuthorPeer.NAME,
new JdbcTypedValue(
null,
java.sql.Types.VARCHAR));
BasePeer.doUpdate(criteria, columnValues);

删除对象: 如何数据已经加载到了直接调用对应Peer类的doDelete(xxx);如果没有被加载,则直接使用Criteria

Criteria criteria = new Criteria();
criteria.where(AuthorPeer.AUTHOR_ID, 5, Criteria.GREATER_THAN);
AuthorPeer.doDelete(criteria);

Reference

https://db.apache.org/torque/torque-4.0/documentation/orm-reference/index.html

http://www.iteye.com/topic/151778

Apache Torque的使用的更多相关文章

  1. Apache Torque入门学习

    Introduction Apache Torque is an object-relational mapper for java. In other words, Torque lets you ...

  2. Apache 项目列表功能分类便于技术选型

    big-data (49):  Apache Accumulo  Apache Airavata  Apache Ambari  Apache Apex  Apache Avro  Apache Be ...

  3. 容器配置jndi Tomcat为例

    context.xml 文件 <Resource name=" password="spsj" type="javax.sql.DataSource&qu ...

  4. PHP ORM框架与简单代码实现(转)

    对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据 ...

  5. ASF (0) - ASF Java 项目总览

    Apache .NET Ant Library This is a library of Ant tasks that help developing .NET software. It includ ...

  6. ORM PHP 学习记录

    ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射.为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却 ...

  7. php有orm吗

    ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中.本质上就是将数据从一种形式转换到另外一种形式. ORM提供了所有SQL语句的生成,代码人员远离了数据库概念.从 ...

  8. Apache DdlUtils入门

    Introduction  DdlUtils is a small, easy-to-use component for working with Database Definition (DDL) ...

  9. apache开源项目-- Turbine

    1.缘起 Jetspeed是Apache Jakarta小组的开放源码门户系统.它使得最终用户可以通过WAP手机.浏览器.PDA等各种设备来使用各种各样的网络资源(比如应用程序.数据以及这之外的任何网 ...

随机推荐

  1. Linux C语言解析.bmp格式图片并显示汉字

    bmp.h 文件 #ifndef __BMP_H__ #define __BMP_H__ #include <unistd.h> #include <stdio.h> #inc ...

  2. C#/VB.NET 获取电脑属性(硬盘ID、硬盘容量、Cpu序列号、MAC地址、系统类型)

    在开发过程中,经常需要获取电脑的一些属性,如获取硬盘ID/CPU序列号/MAC地址作为来加密字符串. 1.硬盘 在我查看网上一些文档时,发现很多人对硬盘序列号很模糊~ 什么叫硬盘序列号?指的是作为一个 ...

  3. Android Studio导入github下载的project和module

    前言:我们以前eclispe时代, 经常都是跑到github浏览第三方开源资源,然后下载下来,运行一下sample之类的,学习没有接触的第三方安卓库,但是到了Android Studio,在githu ...

  4. MySQL高级特性

    MySQL管理 用户管理 CREATE USER username IDENTIFIED BY 'password'; 新建用户 CREATE USER@'%' IDENTIFIED BY 'pass ...

  5. web前端(实习生)之 “百度一面”

    2016.3.18,星期五.我经历了我的第一次面试. 不得不说,百度是一个高效的公司,在短短一下午之间我就直接经历了一面二面,说没有压力是假的,还记得在中途等待二面的时候我至少有一小段的时间脑子是卡带 ...

  6. 树上启发式合并 (dsu on tree)

    这个故事告诉我们,在做一个辣鸡出题人的比赛之前,最好先看看他发明了什么新姿势= =居然直接出了道裸题 参考链接: http://codeforces.com/blog/entry/44351(原文) ...

  7. 如何用Unity创建一个的简单的HoloLens 3D程序

    注:本文提到的代码示例下载地址>How to create a Hello World 3D holographic app with Unity 之前我们有讲过一次如何在HoloLens中创建 ...

  8. sql server如何分组编号

    我们在生产实践中经常会有这样的需求:分组编号. 如下有一个城市区域表region: 我们需要对上表region按city分组,对region进行排序,得到如下结果: 具体sql如下: select c ...

  9. java-读取xml

    1.使用w3c.document /** * 测试 * */ public static void testReadLabel() { String path = "C:\\Users\\h ...

  10. Python3 面向对象(基础篇)

    面向对象 关于面向对象的标准定义网上有很多,不再讲述,现在我们来通俗点理解: 面向对象编程相对于面向过程编程和函数式编程来说,看的更长远,实现功能相对更简单. 面向对象:对象就是物体,这种编程思想就是 ...