支持代码生成和多表查询的ORM框架MyORM(一)

一、概述

这里发布一个自己的ORM框架。有兴趣的朋友可以看一下,能留下一些宝贵的意见当然更好了。这个框架有两个版本,第一个版本已经用在了线上的系统中。最近几天重新调整了一下框架的体系结构,也只有这样才能跟大家描述清楚(尽量描述清楚)。毕竟是新版本,希望大家能够为我发现潜在的bug(当然也可以是一些明显的错误)。

由于我的项目是基于mysql的,所以与其他数据库相关的代码都去掉了,如果以后有这个需求的话再加上去。

不去与hibernateibatis比较了,存在总是有他的道理,他们已经非常成熟并且深入人心。

写这个框架是基于两个方面来考虑的:开发效率和运行效率。简而言之就是:

开发效率:

1.       bean层和dao层代码生成自动化,输入一份数据库设计文档(限定格式),自动生成bean层和dao层的代码。

2.       Bean的增删改全自动化,调用对应dao的增删改函数,就会自动生成并执行相应的sql语句。如 DAOManage.sysLogDao.save(log),会生成相应的insert语句并执行。这里的DAOManager是一个dao层自动生成的静态类。

3.       Sql查询结果的转换自动化,随便执行一条sql查询语句,执行结果为ResultList,执行ResultList.get(i).get(SysLog.class),不说大家也知道是什么意思。特别适合于多表查询。

运行效率:

1.       对于updatedelete,不需要先从数据库查出该对象,这里不用担心update时未更新的字段会被覆盖。

2.       对于insertupdate,只有发生了更改的字段才会入库,也就是说,当在一个属性上执行了set函数后该属性所对应的字段才会出现在sql语句中。

3.       对于select,从查询结果到javabean的转换避免了hibernateibatis的反射或动态代理。反射或动态代理比直接的java操作慢上200倍,如果用CIGLIB做优化大概慢上10-30倍。

4.       JDBC实现。

 

图片比较大,需要点击图片单独打开才能看得清楚

下载、安装和配置请见下一页

 

二、体系结构

整个框架的体系结构如图所示:

 



 

开发阶段的SQL生成器、代码配置器和代码生成器是一个已经做好的工具,以web形式发布。稍后做详细介绍。

整个体系结构的流程为:

1.       SQL生成器分析数据库设计文档(这里用的是EXCEL),提取并执行SQL建表语句

2.       代码配置器读取数据库表信息,配置和生成配置信息,保存为映射文件

3.       代码生成器读取映射文件生成beandao代码

4.       系统启动,加载映射文件

5.       执行dao层的增删改,生成相应的sql语句,执行SQL执行器的sql执行(增//改)函数,返回受影响的行数或自增一id

6.       执行SQL执行器的sql查询函数,生成resultset,查询结果处理器将resultset转换为对应的javabean

 

三、SQL生成器、代码配置器和代码生成器

1.工具一览

 

 



 

MyORM配置下的Doc->SQL链接是SQL生成器

MyORM配置下的SQL->Bean链接是代码配置配置器和生成器。

 

2. SQL生成器,从Excel提取并执行sql建表语句



 

直接把excel中的数据表拷到上面的文本框中就行了。Excel中的表格式如下:



 注:N:非空,PK:主键,AC:子增一,K:索引,这里创建的是组合索引。

 

3.代码配置器

 



 



 

该页面的上半部分,是数据库的基本配置信息。其中分表规则用于指定分表的后缀名,规定为总表名+_xxx”格式,这里规定得有些死板,以后再改。各分表和总表对应着同一个bean类。

下半部分是数据库中表,分表会被过滤掉。在这里可以配置表所对应的类名、字段所对应的属性名和属性的注释。对于属性名,已经按照java的规则(个别例外)由字段名默认生成。

对于上述图中的默认字段列,在查找、更新、或删除时会用到,可以根据字段进行找、更新、或删除(对应着 sqlwhere 字段),如果调用时无字段参数,就默认取为该字段。

上述的图中,除了字段注释可以为空外,其他都不能为空。

配置完毕后,点击生成按钮即可生成相应的beandao代码。

 

4.代码生成器

代码生成没有界面可以展现,只有执行完毕后的结果,如图:



 
 

5.java类型和sql类型的对应关系

 

 

事实上,我这里根本就不关心底层的sql类型,只关心jdbc中的数据类型,对应关系如下:

 

 

Jdbc类型

Java类型

Byte

byte

Integer

int

Short

short

Long

long

Float

float

Double

double

Boolean

boolean

String

String

Java.sql.Date

Java.util.Date

Java.sql.Time

Java.util.Date

Java.sql.Timestamp

Java.util.Date

Java.math.BigDicimal

double

Java.math.BigInteger

long

 

对于其他的数据类型,可以添加。

 

 

6.补充

针对每个表生成的bean类包含两个,一个是bean类,另一个是抽象父类beanBase,生成的代码存在于抽象父类中,开发者自己扩展的代码存在于bean子类中,这样在生成代码时就不会覆盖开发者的代码了,因此若要重新生成bean子类,必须先手动删除该子类。对于dao也一样。

 

 

 

 

 

下一页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值