起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17252|回复: 27

[分享] [2016-07-07更新]高性能 baas后台查询封装

  [复制链接]

64

主题

471

帖子

1127

积分

金牌会员

Rank: 6Rank: 6

积分
1127
发表于 2016-6-8 18:35:34 | 显示全部楼层 |阅读模式
本帖最后由 qldsrx 于 2016-7-7 21:04 编辑

官方提供的CRUD操作性能非常的低,且BUG无数,故而本人重写那部分的操作,进行了查询部分的封装,保存部分暂时还没做优化,项目时间紧张,等下次吧。官方也可以考虑替换自己原有那套解析方式,说真的,原来那套再在那个基础上修改BUG很不划算了。

本次优化后的SQL解析速度是官方提供的100倍以上,实际测试执行1万次耗时为40毫秒左右,官方则要4.5秒以上。(测试时需要将各自的isMatch私有属性赋值为true的部分,注释掉,确保每次获取SQL时都会进行解析,否则将不准确)。

附件中提供的common目录,替换studio中/model/Baas/common目录,可以先备份原来那个目录,其实也就一个.m文件而已。

封装的action为query和sqlQuery,并且对query增加了一个参数,名为dbtype,对sqlQuery增加了2个参数,名为dbtype和sqlWithPage。
参数dbtype的意思是数据库类型,必填,可以为mysql、sqlserver、oracle中的一种,其它数据库有机会的话再考虑,也可以自行添加支持,反正源码在那里。另外自己添加的action里面,使用时,建议将产生的dbtype参数删除,这样dbtype的值就只使用action:common/CRUD服务下面的参数,你可以统一管理,切换这个数据库类型只要修改这个CRUD.service.m文件里面的参数值即可,而不需要每个实际的action里面去修改。
参数sqlWithPage的意思是带分页的查询语句,由于sqlserver的分页实现方式非常特殊,必须要结合order by才能实现分页,因此要自动改写sql实现做不到,当前用的方法是在最终的结果集里面,忽略前面offset条数据,取后面limit条数据,这样性能是有问题的,会占用大量的I/O,因此提供了这种扩展,既然是自定义SQL,那么分页也自己实现即可,参数offset和limit可以写到sqlWithPage内,使用两个冒号如:“::offset”、“::limit”,在后台会自动做分页参数字符串替换。

另外,对于字符串替换参数(2个冒号开头)的使用,还允许替换的字符串内部带有变量(1个冒号开头),但是默认的sqlQuery没做此封装,主要是为了提供使用上的方便,如果需要用到那种功能,可以模仿sqlQuery用到的java代码自己改写一个,对特定参数调用SQLStruct.var2(String varname, String sqltext),在使用该函数时也有提示用法,这里就不多说了。

由于是刚刚完成的作品,可能存在一些没考虑周全的地方,欢迎使用中给予反馈。


2016-07-07更新内容:
CRUD类中添加了session获取参数的处理,如果存在session,可以自动从会话中取变量值到SQL语句里,但要注意大小写。这样的好处很明显,带身份验证的查询也可以通过配置.m文件就完成了,无需新增java类。
CRUD类中的sqlQuery方法,对sql做了二次参数处理,也就是::开头的替换型参数的值里,还可以带:开头的参数。
新增了SqlHelper类,暂时就放了2个常用的方法,由于官方提供的操作里无法直接执行SQL语句级别的更新操作,故而自行封装了executeUpdate和executeBatch方法,替代JDBC默认的那个,用法类似查询时的那个DataUtils.queryData方法。

common.rar

10.87 KB, 下载次数: 2075

评分

参与人数 7威望 +65 收起 理由
wgs7909 -20 赞一个!
少翊 + 20
hdhyt + 10 赞一个!太棒了!
不羁的风 + 10 学习了!!!
暗夜的忧伤 + 15 很给力!

查看全部评分

2

主题

441

帖子

2572

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2572
发表于 2016-6-10 19:02:02 | 显示全部楼层
谢谢楼主,WeX5团队会学习改进!

评分

参与人数 2威望 +30 收起 理由
少翊 + 20
郭德成 + 10 赞一个!

查看全部评分

回复 支持 2 反对 0

使用道具 举报

377

主题

2594

帖子

5117

积分

论坛元老

Rank: 8Rank: 8

积分
5117
QQ
发表于 2016-6-9 07:22:04 | 显示全部楼层
替换掉平台原有的commen后,自己写的代码不需要做任何改变吧?
长春鱼熊企业管理咨询有限公司



X5开发出入库培训视频
(出处: 起步论坛)
回复 支持 反对

使用道具 举报

718

主题

2841

帖子

5657

积分

论坛元老

Rank: 8Rank: 8

积分
5657
QQ
发表于 2016-6-9 09:04:28 | 显示全部楼层
发现高人真的很多,支持
WEX5初学者,欢迎初学者交流
QQ:597558229
tel:15857336322
回复 支持 反对

使用道具 举报

64

主题

471

帖子

1127

积分

金牌会员

Rank: 6Rank: 6

积分
1127
 楼主| 发表于 2016-6-9 09:51:10 | 显示全部楼层
Masion 发表于 2016-6-9 07:22
替换掉平台原有的commen后,自己写的代码不需要做任何改变吧?

完全兼容以前的CRUD操作,并且提供的那个SQLStruct类命名也是和官方的那个一样,用法类似。
这次改动主要是针对SQLStruct类的,这个是SQL文本参数处理类,官方的那个有BUG还性能非常低,所以我将那个类替换掉了。CRUD里面有SQLStruct类的基本用法,还将以前的那个用法作为代码注释保留了,作为对比。
回复 支持 反对

使用道具 举报

191

主题

688

帖子

3325

积分

论坛元老

Rank: 8Rank: 8

积分
3325
QQ
发表于 2016-6-9 14:31:46 | 显示全部楼层
本帖最后由 ysk007 于 2016-6-9 15:14 编辑

高人啊,希望官方借鉴一下,在后续版本中改善Baas的性能
轻量化ERP--企业邦  网址:meiprocess.cn
qq:8269301
手机:13801998595
回复 支持 反对

使用道具 举报

718

主题

2841

帖子

5657

积分

论坛元老

Rank: 8Rank: 8

积分
5657
QQ
发表于 2016-6-9 17:44:51 | 显示全部楼层
支持官方跟进
WEX5初学者,欢迎初学者交流
QQ:597558229
tel:15857336322
回复 支持 反对

使用道具 举报

23

主题

77

帖子

421

积分

中级会员

Rank: 3Rank: 3

积分
421
QQ
发表于 2016-6-9 20:39:23 | 显示全部楼层
高人学习了
回复 支持 反对

使用道具 举报

718

主题

2841

帖子

5657

积分

论坛元老

Rank: 8Rank: 8

积分
5657
QQ
发表于 2016-6-11 08:11:45 | 显示全部楼层
sxl 发表于 2016-6-10 19:02
谢谢楼主,WeX5团队会学习改进!

wex5的态度能看得出发展的希望,不是闭门造车,愿意听从意见,支持
WEX5初学者,欢迎初学者交流
QQ:597558229
tel:15857336322
回复 支持 反对

使用道具 举报

1

主题

32

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
发表于 2016-6-12 14:04:30 | 显示全部楼层
高人呀!顶起!
我目前都是自己写后台逻辑的,呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-22 00:56 , Processed in 0.067439 second(s), 32 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表