Dorado 5 : 02.数据库开发 (T1A)

做数据库开发的两个基本前提是:数据库的来源与通过什么对象访问数据库。

数据源

数据库的来源有很多种:JDBC、JNDI等。本书侧重于dorado展现开发技术的说明,应此在以下内容中,我们会采用JDBC开发的方式实现。对于默认的数据源我们采用dorado自带的一个范例数据库doradosample。该文件的获取非常简单,我们只要通过dorado提供的官方下载地址:

下载这个zip文件,并在本地非中文目录下解开。就可以在其中的sample\data\hsqldb目录中找到hsql类型的数据库脚本文件。我们直接利用他们做我们的数据源实现开发即可。
在dorado项目中,一般都是通过datasource.xml文件来配置数据源,该文件位于工程的home文件夹下:

一个dorado项目可以配置一到多个数据源。
Dorado JDBC开发目前可以支持以下类型的数据库:

  1. Oracle
  2. MySql
  3. Sybase
  4. DB2
  5. PostGre
  6. Interbase
  7. Informix
  8. Access
  9. HSQL

数据库访问对象

在dorado5中常用的数据库访问对象就是SqlDataset,AutoSqlDataset,DBStatement,ConnectionHelper。

SqlDataset、AutoSqlDataset

其中SqlDataset,AutoSqlDataset我们可以在dorado的快捷菜单中找到:

SqlDataset,AutoSqlDataset管理着一个二维结构的数据对象,类似于关系数据库中的表格,拥有字段和数据,每个字段有不同的数据类型,长度限制,非空等的特性。在系统运行时,他们属于不可见对象,需要通过各种可见的展现组件(如表格,表单等)与之绑定,才能显示其中的数据,如下图:

SqlDataset,AutoSqlDataset拥有的基本属性如下:

属性

说明

dataSource

数据来源

sql

查询sql

其中SqlDataset拥有sql属性,用于开发人员根据需要定义其查询sql.查询sql是标准的sql语句,可以是单表查询,也可以是一个包含子查询以及Union等操作的复杂的多表或视图查询。
AutoSqlDataset基本功能与SqlDataset一致,没有sql属性,但是可以通过其内部Field以及MatchRule描述sql属性,其使用方式是将sql语句对象化,利用对象来设计和定义sql查询语句。另外在使用AutoSqlDataset开发时,IDE环境提供了更为便利的可视化设计界面,如下图是通过一个可视化的向导窗口定义其查询方式:

除了提供查询能力之外,SqlDataset与AutoSqlDataset还提供了持久化的功能。当用户对dataset中包含的数据做了增删改等各种操作后,最终可以通过dataset的update方法实现数据库保存,保存时dataset自动的根据dataSource以及orginTable与keyFields属性,将数据同步到数据库,在很多情况下这种持久化动作开发人员甚至都不需要写一行代码。

注意:关于SqlDataset与AutoSqlDataset的详细说明请参考<<数据库访问对象>>一章

 

DBStatement

除了SqlDataset与AutoSqlDataset之外,dorado5中还提供了com.bstek.dorado.data.db.DBStatement用于Server端存取数据库的一个工具类。
常用属性:

属性

说明

datasource

定义数据源

sql

定义其数据库访问的sql语句

该工具类不仅提供了数据查询的功能,同时也通过一些内部封装,提供了方便的数据保存和更新功能方面的方法,通过此工具类开发人员可以非常快速的完成通常的数据操作和数据提取. 另外与JDBC中的Statement不同,DBStatement提供了可命名的参数,。
注意: 由于启用了命名参数功能,对于参数化查询DBStatement使用了与JDBC不尽相同的定义方式.
例如在标准JDBC中使用以下方式定义的SQL: select * from employee where degree = ? and sex = ?
在DBStatement中我们应通过这样的方式来定义: select * from employee where degree = :degree and sex = :sex
然后我们就可以通过degree和sex而不是传统的下标值来访问statement中的参数了。
stmt.parameters().setString("degree","大专");
stmt.parameters().setBoolean("sex", true);
DBStatement使用范例:
查询所有员工

DBStatement stmt = new DBStatement(); 
stmt.setSql("SELECT", "employee"); 
List results= stmt.queryForList();

删除员工ANLIN

DBStatement stmt = new DBStatement(); 
stmt.setSql("DELETE", "employee", "employee_id"); 
stmt.parmeters("employee_id", "ANLIN"); 
stmt.execute();

将员工ANLIN的薪水设置为5000.

DBStatement stmt = new DBStatement(); 
stmt.setSql("UPDATE", "employee", "employee_id", "salary"); 
stmt.parmeters().setString("employee_id", "ANLIN"); 
stmt.parameters().setDouble("salary", 5000); 
stmt.execute();

DBStatement还有一个特别的功能,它可以直接参与到dorado的当前事务当中。如当前的操作中Dataset的更新已经启动了一个事物,然后再通过DBStatement实现数据更新,则这两个更新都会参与到dorado的事务管理中。

ConnectionHelper

用于根据dorado中数据连接配置(datasource.xml)获得java.sql.Connection的工具类.
该工具类提供如下的方法获得数据连结对象:

getConnection(java.lang.String dataSource) //根据数据源配置的名字返回一个数据连接

如果我们在工程配置文件的Settiing.xml中设定过common.defaultDataSource属性,则我们还可以通过ConnectionHelper的getDefaultConnection方法获取common.defaultDataSource属性指定的默认数据源。common.defaultDataSource属性可选值为datasoruce.xml中配置好的一个DataSource。

注意:该工具类的使用,需要注意事务需要自己管理。