java数据引擎(七):总结

一、            引擎特点总结

A.配置简单

引擎的总配置文件只有一个。(实际上在最精简的情况下,连这个配置文件也可以不要,此时需要使用dbcp、c3p0、tomcat等已有的数据源,唯一的配置是在web.xml中的两项设置)。不需要针对每个表进行映射配置。甚至可以不需要传统的数据操作dao,只需定义业务方法接口,在接口的实现中调用引擎的方法。这样,在MVC的模式中,M中就只有业务逻辑内容,没有单独的数据层了。

许多开源ORM引擎都要针对每个库表建立映射(包括视图),不光是xml文件泛滥,一旦库表修改、或新加表,都要进行重新映射,重启应用服务,但udbc引擎是零配置,即使是新加库表,也不必重启,哪怕是像一对一、多对多等关联取数,也可很轻松的应对。

不用操心事务处理,引擎都已经作了处理。引擎也提供了更精细的事务控制,在代码中可以很方便的设置。

B.调用简便

引擎api的常用类只有两个,所有操作方法都在DataCenter中,方法命名称按功能块区分,一目了然。

如果是针对单表的操作,只需要传入表名(或视图名),再加几个参数,两三行就解决,不需要作任何其它动作,不用写任何sql语句。

如果是简单的多表关联查询,也只是多传几个参数,就可轻松搞定一对一、一对多、多对多的查询。引擎也提供另外的实现方式,将关联映射放配置文件中。

如果想使用分页,一行即可。分页取数时,记录总数也一同返回(常规情况下,都是用两条查询条件完全相同的sql执行两次数据访问)

              如果想使用延迟加载,一行就可。

              如果想使用缓存,一行就可,缓存时间随定。

              如果想设置事务回滚点,一行就可。

              如果想要乐观锁机制,在配置文件加一行就可(与库表协同)。

              如果想调用存储过程,不管是hibernate或ibatis或其它,都有一堆东西要写,引擎的调用与普通数据操作方法是一样的简单。

如果涉及复杂多表操作,或者复杂的业务逻辑,必然要到sql。这时只需将sql(可以是符合特定数据库的语句,可以像ibatis那样构建动态的语句)配置在xml中,赋予一个id,就可直接调用了。这有点类似ibatis,但过程极大简化了。

为了达到最好的性能,引擎的很多关键环节都有优化动作。

引擎提供了两种面向对象的操作,面向实体对象和面向Map对象,前者更接近hibernate的方式,后者更精简。不管哪种方式,数据操作都是极其自然的、极其简单的。

原来需要在多个地方写几十行的代码,使用引擎,三几句就可以解决。

C.性能卓越

由于是对jdbc直接进行的轻量封装,其性能没有大的折扣,实际上,引擎提供的某些方法性能还超越了常规jdbc。在postgresql、oracle、mysql下,通过对比,引擎的性能显著优于hibernate、ibatis、mybatis等。

对大批量的插入数据、或一次需要读取多种数据,引擎提供了特别的方法,充分利用了现代处理器的特点,采用高并发操作,可以大大提高应用的吞吐量。

hibernate、mybatis等orm工具倾向于操作全部字段数据,虽然可以通过配置避免,但无疑加大了工作量,并且不能随心所欲地控制,UDBC引擎则以很自然的方式进行操作,很容易避开不必要的字段查询或更新。

此外,根据编程风格的不同,进行同样的数据操作,其它orm框架所生成的java对象比udbc要多出许多,jvm要进行额外的垃圾回收,这是引擎所带来的看不见的性能提升。

D.功能齐全

引擎的方法有80多个,包括了增、删、改、查、聚集运算、批量复制、存储过程调用、迭代取数、关联取数、关联存储等功能,有关数据操作的内容几乎要有尽有。

           此外还提供了一些高并发的数据操作方法。例如,多路并举操作,就是将在短时内单个的插入或更新请求合并到一起,批量提交到数据库,可极大地提高带数据操作的并发访问性能;大批量的插入、修改、删除采用多线程方式,将数据库性能发挥到极致;单次并举,在一次请求中,将多个返回结果互不相关的数据操作同时提交,最先完成的操作第一个返回,避免了顺序提交产生的无谓等待。

虽然这些方法的背后有些稍复杂的逻辑,但面向调用者的接口却是相当简单的,和普通的数据操作没什么两样。

          如果是mysql,并且设置了主从库,使用数据引擎,将写主读从,不管有多少从库,都能应对。

           当然,hibernate或ibatis可能有的一些特别功能,引擎不一定都有。

 

二、            应用对比探讨

 

三、            开发辅助

1.      代码生成

为了方便面向实体对象的操作,引擎提供了一个java swing界面,只需要输入数据库的连接属性,就可以自动生成表的实体映射对象,以及对应的类似于dao的数据操作类,这个dao含有DataCenter中的常规操作方法,方法名完全相同,只是调用时,少传第一个参数,也就是不需要传表名,使用更便捷。生成的类,是按java的规则命名的,如果表名或字段名含有下划线,那么对应的类名就符合驼峰的命名规则。

打开界面的方式:java -jar udbc.jar  在同目录下还需要相应的数据库驱动jar包。

有的环境,直接双击udbc.jar也可打开swing界面。


2.     不重启应用的操作

当使用xml sql操作时,如果修改了sql,是需要重启应用的,但为了开发方便,在应用不重启的情况下,可以在调用具体的功能前,先调用:

DataCenter.reLoadXmlFile(sqlPath);

sqlPath是xml文件的类路径。生产环境中,一定要去掉该行代码。

3.     应用没启动时的操作

在快速入门中,介绍了不启动应用,直接调用引擎的方法的方式,这就是在main方法中,在前面加上这句:new UDBCIniter().init(),它作了一些初始化的工作。生产环境中,一定要去掉该行代码。在调用结束后,如果有修改数据的操作,再加上这句:DataCenter.ensureCommit(),正式环境中,这句不是必需的。

4.     后台输出

为了观察引擎在运行时,实际执行的SQL,在udbcConfig.xml的节点<commonConfig>中加入这句就可:<property name="showsql" value="true"/>,节点<commonConfig>在前面配置乐观锁的版本名称时提到过。

5.     表同步功能

当一个应用被部署在多个客户环境时(企业级应用,各客户是互不相关的),如果有新建表的需求,那么需要在每个客户的库上创建库表。引擎提供了库表同步的功能(如果是修改表、删除表,仍然要手工在每个客户库上操作)。

在udbcConfig.xml中增加以下配置:

<tableSql>

    <sqlfile="/sql/tabs1.xml"type="db2"/>

    <sqlfile="/sql/tabs2.xml"type="oracle"/>

</tableSql>

上面有两个配置项文件,是因为不同的用户使用的库可能不一样,因此建表脚本也不一样。两个xml文件放置在应用的WebRooot下,库类型暂时只支持四种:

oracle, db2, sqlserver, mysql

tabs2.xml的内容举例如下:

<?xmlversion="1.0"encoding="UTF-8"?>

<tables>

 <tablename="users">

    create tableusers

    (

        idnumber(10,2),

        namevarchar2(20),

        agenumber(3)

    )

  </table>

</tables>

tabs2配置中只列了一个建表脚本,可以列出库中所有表的脚本,也可只列出后来新加的。

当程序运行时,如果发现某个要操作的表对象不存在,就会根据名称找到配置语句,在库中创建相应的表。

6.     其它

 

四、            引擎方法总结     

 引擎的方法都是静态的,直接调用即可。只有使用不多的DataActs需要实例化。

1. 两类方法

从方法的参数上看,可大体分两类,一类是针对xml sql语句的,一类是针对数据库表的。前者的方法中必定有sqlid参数,后者必定有tablename。不管是哪类,都有增删改查和获得记录统计数的方法。方法的参数中,顺序都是一致或一样的。

2. 两类返回结果

从返回的结果来看,主要是两类,List<Map<String,Object>>、List<T>(调用时返回的 是具体的实体类结果集)。方法getMapList和queryMapList返回的是List<Map>,而getObjectList和queryObjectList返回的是List<T>,以query开头的方法是针对sql的,以get开头的方法是针对数据库表的。所有的增、删、改方法均以exe打头。方法名中含param的,参数中必定有Object[]类型。增删改方法命名中,针对xml sql的是exeAdd,exeEdit,exeRemove,针对库表的是exeInsert,exeUpdate,exeDelete

3. IDE工具下

按照上述规律,在IDE中调用时,可很容易找到所需要的方法。例如,如果是根据数据表进行查询,输入DataCenter.g ,全部方法将被过滤掉近一半,接着输入etm(即:DataCenter.getm),或eto,方法又被过滤掉一半,然后根据需要(如是否批量查询 batch)很容易找到所需的方法。如果是增删改,输入DataCenter.e ,ide将只列出20多种方法,其中根据sql id操作的方法名中含有add,edit,remove,针对表的增删改方法名含insert,update,delete。如果是聚集操作 (sum、avg等),输入DataCenter.c ,ide将只列出几个方法。

4.  注意点

#使用Param的like、in、list等形式的条件参数时,如果值是数字型,不需加单引号,如果是字符串,需要加单引号,日期型也加单引号,不涉及bool型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值