1.BM??????

2011-12-13 16:55:25by SeaCat

BM的创建与使用

Business Model的基本属性

一个典型的BM文件如下所示:

<bm:model xmlns:bm="http://www.aurora-framework.org/schema/bm" baseTable="EMP" alias="e" >
    <bm:fields>
        <bm:field name="empno" databaseType="BIGINT" dataType="java.lang.Long"/>
        <bm:field name="employee_name" physicalName="ename" databaseType="VARCHAR" dataType="java.lang.String"/>
        <bm:field name="job" databaseType="BIGINT" dataType="java.lang.String"/>
        <bm:field name="mgr" databaseType="BIGINT" dataType="java.lang.Long"/>
        <bm:field name="hiredate" databaseType="DATE" dataType="java.sql.Date"/>
        <bm:field name="deptno" databaseType="BIGINT" dataType="java.lang.Long"/>
        <bm:field name="sal" databaseType="FLOAT" dataType="java.lang.Long"/>
        <bm:field name="comm" databaseType="FLOAT" dataType="java.lang.Long"/>
        <bm:field name="current_date" databaseType="DATE" dataType="java.sql.Date" expression="sysdate"/>
    </bm:fields>
    <bm:primary-key>
        <bm:pk-field name="empno"/>
    </bm:primary-key>
</bm:model>

    

简单地说:

<bm:model>相当于一个表;

<bm:fields>相当于表中的一个字段。

下面将对BM中各种tag及其属性的含义进行说明。

<bm:model>是BM的顶层元素。通过baseTable属性设置其对应的数据库实体(表或视图)的名字,alias设置其别名。

上面的例子表示对数据库中名为EMP的表建立模型,并为它设置别名e。通过这个业务模型来执行查询时,将会生成

        select ... from EMP e 
        

这样的语句。

<bm:fields>部分定义业务模型中包含的字段。通过name来设置字段的名称,通过databaseType和dataType分别设置字段在数据库中的类型,以及对应的java对象类型。数据库类型和Java类型可以不一致,例如,在数据库中定义为BIGINT类型,在Java中可能希望以String来表示。

注意第二个字段,除了name之外,还定义了physicalName。name表示字段从数据库中读取出来以后,以什么名字来命名,而physicalName表示字段在数据库中实际的字段名。在这个例子中,name与physicalName不一致,实际产生的SQL语句将是这样:

    
        select ename as employee_name from EMP
    

name属性必须设置,并且在整个<bm:model>范围内,必须唯一。physicalName如果不设置,则表示和name相同。

<bm:field>不一定对应只对应物理存在的字段,也可以是一个表达式。注意最后一个字段,设置了expression="sysdate",这将在查询SQL中生成

    
    select sysdate as current_date
    

这样的语句。通过expression属性,可以设置任意合乎当前数据库语法规则的表达式。例如,要实现select f1+f2 as f3这样的效果,可以设置<bm:field name="f3" expression="f1+f2" />。

<bm:primary-key>部分设置业务模型对应的表的主键。每个<bm:pk-field>设置一个主键对应的字段,通过name属性设置字段名,这个名字必须和前面<bm:fields>部分所定义的某一个字段名一致。如果是联合主键,就为主键中的每一个字段设置<bm:pk-field>属性。

BM的使用

将上述文件存为(Web应用根目录)/WEB-INF/classes/test/emp.bm文件,就可以通过该文件,实现基本的数据库操作。

和Java class的命名规则相似,这个文件被引用的名字为test.emp,从WEB-INF/classes/目录开始,每一级子目录的名字,以"."代替"/",再拼接上文件名,去掉.bm扩展名,就得到BM的完整名称。

Aurora框架提供了一系列的Java API来使用BM,但在开发应用程序的时候,多半不需要通过Java代码来使用。Aurora提供了一种方便的机制,可以直接将BM发布为服务。客户端通过HTTP方式调用BM服务,以JSON格式来传递输入参数,Server端同样以JSON来返回调用结果。

以前面的例子来说,BM文件保存完毕后,启动Web服务器,直接在浏览器中访问 http://<主机地址>/web应用目录/autocrud/test.emp/query,就可以得到类似于下面的结果:

        

如果将上面地址最后的/query换成/insert,再传递参数:`_request_data={empno:1,employee_name:"test"}`,即可向数据库中插入一条记录。

这样,就避免了传统了Java建模及O/R Mapping->Java编码->Java方法发布为JSON服务的繁琐过程,通过简单的配置(这个过程在IDE的支持下可实现全自动数据库反向工程),一步即可得到客户端javascript程序所需的JSON格式的数据服务。

BM支持insert,update,delete,query,execute等5种基本操作。对于非insert/update/delete类的操作,如复杂sql语句或存储过程调用,都归为execute类,通常由开发者自行撰写相应的SQL。

Aurora示例程序中的bm.screen工具,是一个BM调试的Web工具,通过浏览器访问该界面,输入BM名称,选择要执行的操作,再输入参数,就可以对BM进行调用,在界面上查看服务端返回的结果。

此外,通过Aurora IDE,也可以方便地查看、执行通过BM生成的SQL。这部分内容详见Aurora IDE使用手册。

Demo
    Attachments

      Comments

      5 Responses to the article
      1. [email protected] 留言于:2017年06月06日 11:49
        好东西。
      2. [email protected] 留言于:2017年11月17日 09:30
        很厉害
      3. [email protected] 留言于:2020年02月10日 10:36
        开发的是什么玩意,文档都写不全。
      4. [email protected] 留言于:2020年02月10日 10:36
        开发的是什么玩意,文档都写不全。
      5. [email protected] 留言于:2020年02月10日 10:36
        开发的是什么玩意,文档都写不全。
      发表评论