声明:ITeye精华文章的版权属于ITeye网站所有,严禁任何网站转载本文,否则必将追究法律责任!
JEECG(J2EE Code Generation)是一款基于代码生成器的智能开发框架,采用代码生成+手工MERGE半智能开发模式,可以帮助你解决Java项目中50%的重复工作,让你更多关注业务逻辑。
JEECG论坛:
http://www.jeecg.org
在线演示:
http://demo.jeecg.org
入门视频:
http://www.jeecg.org/forum.php?mod=viewthread&tid=197&extra=page%3D1
为了使大家对JEECG有进一步的了解,本期我们采访了JEECG的作者
张代浩。
ITeye期待并致力于为国内优秀的开源项目提供一个免费的推广平台,如果你和你的团队希望将自己的开源项目介绍给更多的开发者,或者你希望我们对哪些开源项目进行专访,请告诉我们,发站内短信给ITeye管理员或者发邮件到webmaster@iteye.com即可。
先做个自我介绍吧!
我叫张代浩,英文名scott,属于北漂一族,09年毕业后一直从事金融、对日方向的Java开发,期间在日本东京工作过一段时间。目前在一家重工企业,从事ABAP开发和Java开发工作。
我的博客:
CSDN博客、
ITeye博客
我的邮箱:zhangdaiscott@163.com
JEECG是什么? 有哪些功能?
JEECG全称为J2EE Code Generation,即J2EE代码生成器。这是一款基于代码生成器的J2EE智能开发框架,WEB架构基于零配置思想,使用SSH2+EasyUI技术架构。目前 JEECG 的最新版本为2.1.0。
JEECG宗旨:
提高开发效率、提高代码质量,打造一个快速开发平台。
JEECG可以有效解决信息孤岛问题,生成统一代码、统一规范、统一设计思路,使你能在这个平台上,快速开发出高效高质量代码,缩短开发周期,降低项目成本。
JEECG详细介绍:
http://www.iteye.com/news/26937
JEECG的主要功能如下(*表示JEECG的创新点):
- (*)封装完善的基础模块:用户权限+数据字典+常用共通封装(定时任务、短信接口、邮件发送、Excel导出等);
- (*)代码生成器:开发效率非常高,单表数据模型和一对多(父子表)数据模型的增删改查自动生成,功能直接使用;
- (*)查询条件生成器:查询功能自动生成,后台动态拼SQL追加查询条件;支持多种匹配方式(全匹配/模糊查询/包含查询/不匹配查询);
- (*)页面表单校验器:采用EasyUI检验机制,表单校验生成器自动生成(必须输入、数字校验、金额校验、时间控件等);
- (*)集成简易报表:Highcharts图像报表和数据导出非常方便,可极其方便的生成pdf、excel、word等报表。
- 常用共通封装(数据字典/邮件发送/定时任务/短信接口/Freemarker工具类等)
- 兼容IE 6、IE 8+和Google等浏览器
- 支持SQL Server、Oracle和MySQL等主流数据库
开发这个框架的初衷是什么?这不就是一个SSH2框架吗?
Java开发是从08年开始,刚参加工作的时候也喜欢追求新技术,感觉那样才能提高自己的能力,后来喜欢研究底层架构,研究了很多技术架构,也试着重写了struts1、spring。但是随着工作久了,慢慢发现研究技术、研究架构意义并不大,Java的新技术层出不穷,更新不断,对于项目来说提高开发效率,提高代码质量才是关键。所以项目中我开始注意抽取共通、设计规范和封装工具类等等。
一个很巧的机会朋友问我,现在代码生成器很多,你看能不能封装一个到框架里?我就试着去写了,Web UI以前也没用过,EasyUI据说不错就试着用它,写的过程中发现通用性很强,我就开始试着用模板语言去实现页面的生成。后来经过逐渐完善,慢慢推出了JEECG。
JEECG其实就是大家再熟悉不过的SSH2+EasyUI框架,只是经过了再封装,增加了代码生成器、表单校验自动生成、查询条件生成器、图形报表封装、常用共通封装的一些功能,目前封装的功能基本能满足一般项目的需求。
目前,工作流正在集成中……
JEECG的设计思想?采用的技术?
首先引几段前辈的话:
引用
- 十年前,这种代码生成工具的研发就非常火爆,但很快就灭了。因为软件不是家具。软件不在于它的一次性生产成本,而是变更及维护成本。
- 当年啊,用python吐出python代码到内存再执行python代码,一段时间后发现代码维护不了了,只能重新再写了一遍。
- 大量的代码生成不一定是好事。很多时候团队会被这类工具的限制受困。
根据前辈经验总结到一点:纯粹依赖代码生成器是不可行的,维护是个很大问题,所以
我借鉴前辈的经验,推出了代码生成+手工MERGE的半智能开发模式,即:
- 基础功能(常用数据模型的增删改查)由代码生成器生成使用,生成的代码可以随意修改;
- 复杂业务逻辑由开发自主实现,这样开发团队就不会受代码生成器的束缚,可灵活实现复杂业务,也能及时应对业务变化。
此外,JEECG采用主流的SSH2+EasyUI技术,生成的代码规范整洁,简单易懂,生成代码目录结构清晰,维护成本很低。
设计思想:
- JEECG采用主流架构技术,基于约定优于配置,采用命名规范实现零配置,整个项目action、service等自动扫描到Sring容器中;
- JEECG框架对代码生成器依赖性很低,可以完全脱离代码生成器使用(这种设计避免了开发团队被代码工具的束缚)。
采用技术:
- 架构技术:Struts2 + Spring3 + Hibernate4 + EasyUI1.3 + Spring JDBC + jQuery
- 开发环境:MyEclipse6.5 + jdk1.6 + Tomcat6.0
你如何看待这种(自动生成代码)开发模式?对开发者的利弊?
随着WEB UI 框架(EasyUI/jQuery UI/ExtJS/Dwz)等的逐渐成熟,系统界面逐渐实现统一化,代码生成器也可生成统一规范的界面!代码生成+手工MERGE半智能开发将是新的趋势,生成的代码可节省50%工作量,快速提高开发效率!!!
客观来说,JEECG 开发模式有利也有弊:
利:
- 让开发者从机械重复枯燥的工作脱离,更专注业务逻辑实现,提高了开发体验
- 提高了开发效率,实现了快速开发,缩短了项目周期
- 对于刚接触Java的人,也可以轻松基于该框架快速构建一套系统(只要会建表,通过表生成代码)
- 生成统一代码、统一规范、统一设计思路,便于维护
- 采用开源架构组合,解耦性强,可以完全脱离JEECG代码生成器,灵活自主开发(如果采用成熟智能化产品,项目开发就脱离不了智能开发工具,依赖性太大,变更及维护成本会很高)
弊:
- 对于开发新人来讲,弊处很多,开发新人正是锻炼编码能力的时候,代码自动生成弱化了开发人员的技能。
哪些代码可以通过JEECG自动生成?原理是什么?
JEECG代码生成器可以生成统一的前台页面、页面表单校验和规范的后台代码(Action、Service、Dao、Entity、Page等)。
JEECG代码生成器通过表生成代码,代码实现功能。即:读取表结构和字段属性,生成对应的实体、后台代码、前台页面、表单校验等。
JEECG代码生成的原理和方式:
- 是基于表来生成代码,针对有规则的表关系模型,生成对应的功能代码;
- 生成的代码无配置文件,遵循命名规范,基于约束大于配置零配置思想;
- 生成的action、service、entity、jsp页面等命名规范一致(采用驼峰写法),代码结构清晰也便于维护;
- 对于复杂业务逻辑,需要用户自己编码实现。这样就解决了复杂业务不断变化,智能化成熟产品难以适应业务不断变更,维护难的问题。
目前JEECG 代码生成器支持的数据模型:
- 单表数据模型
- 一对多表(父子表)数据模型
- 单表数据(自关联)模型
JEECG是你独立开发的,还是有一个团队?
目前JEECG是我一人,现在有很多朋友想加入,以后应该会逐渐成立团队。
该项目采用的开源协议?如果作为商业项目的基础开发框架,有什么限制?
JEECG 采用 Apache2.0 协议,对于商业使用没有什么限制。
对JEECG 感兴趣的朋友如何交流、反馈、参与贡献?
JEECG目前版本发布使用Google Code,地址:
http://code.google.com/p/jeecg/
SVN地址:svn://www.oksvn.com/jeecg-jbpm
JEECG已经开设技术论坛,对于JEECG 有好的建议或者发现BUG都可以去论坛发帖。
论坛地址:
http://www.jeecg.org/
此外,还可以通过QQ群(106259349、289782002)来交流、反馈。
未来的开发计划?
JEECG的未来发展路线主要是两个方向:
-
一个是实现JEECG代码生成器的工具化和通用性;
- 一个是继续封装当前框架,打造一个快速开发平台;
方向一:【JEECG代码生成器工具化设计方案】
目标:
-
JEECG代码生成器,抽离出框架,实现解耦设计Struts2、Spring MVC 、Hibernate、Mybatis、EasyUI、DWZ、ExtJS等技术灵活组合使用,导入JEECG JAR支持和模板即可生成对应的代码;
-
JEECG 模块支持用户自定义,类似QQ空间模板,用户按照JEECG 规则,即可自制不同风格模板。
使用方法:将jeecg-generate.jar 导入到项目中,载入JEECG 模板,即可通过工具类生成代码;
JEECG 产品模块预期功能说明:
jeecg-generate.jar 功能
|
- 支持不同数据库
-
读取表结构[字段属性]
- 根据模板生成代码;
设计原理:
-
jeecg-generate.jar,抽离出框架,做到兼容性友好
-
jeecg-generate.jar 实现解耦设计,实现Struts2、Spring mvc、Hibernate、Mybatis、EasyUI、Dwz、ExtJS等灵活组合使用
|
JEECG FTL模板
|
提供多套模板,针对不同架构技术,提供不同模板,例如:
-
Struts2+Spring+Hibernate+EasyUI;
-
Struts2+Spring+Mybatis+EasyUI;
- Spring mvc+Hibernate+Freemarker+Dwz
-
Spring mvc+Hibernate+Freemarker+ExtJS等
特点:模板支持用户自定义,只需要按照JEECG规则,即可自制不同风格模板
|
支持表关系模型
|
- 单表数据模型
- 自连接数据模型
- 一对多(父子表)数据模型
- 一对多数据模型中的一张表是自连接
- 多对多数据模型
- 多对多数据模型中的一张表是自连接
|
生成代码
|
生成内容:前台页面+表单校验(必输、数字、金额、时间控件) + 后台代码 + 后台校验 Acton\ServiceI\ServiceImpl\Page\Entity\Dao\Jsp
|
方向二:【JEECG 智能开发平台】
后续待完善的五点:
-
JEECG 生成器的进一步完善
- 工作流的封装
- 智能报表封装
- 查询过滤器封装
- 外围接口智能化封装
设计方案:
A
|
【生成器】代码生成器(代码一键生成),实现解藕设计,Struts2,spring mvc ,hibernate,mybatis灵活搭配使用
|
B
|
【生成器】代码生成器生成的页面,支持用户拖拽页面字段控件,重新布局
|
C
|
【工作流】业务流程采用工作流来实现
特点:保证了业务流程的灵活可变性,逻辑设计清晰,便于日志监控(业务流程变更,业务人员画下流程即可,既灵活又便于监控)
|
D
|
【工作流】在页面层实现画流程功能,让开发从流程工作脱离出来,支持用户自定义流程
|
E
|
【工作流】支持用户自定义表单
|
F
|
【报表】智能化报表工具封装
备注:开发不需要参与,业务员直接配置使用(只需写SQL)
|
G
|
【查询条件生成器】查询过滤规则进一步封装
备注:页面查询功能: 页面追加查询字段,后台不需写代码,查询条件自动实现完成
追加:大于小于等其他匹配方式;
进一步封装页面查询控件,针对每个匹配方式实现一个控件,让用户直接输入内容,不需要关心采用哪种匹配方式(即:封装匹配规则,增强用户体验)
|
H
|
【外围接口】WebService接口实现配置使用,方案:
- 使用唯一接口实现,传入传出采用报文方式实现
- 报文解析实现自动转换,传入传出报文格式定义实现可配置
- 接口校验自定义
说明:通过配置来实现一个接口功能,达到无需编码的目的
|
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0079/7025/dc995279-87e9-3362-89a1-c72480de9aff-thumb.jpg)
- 大小: 48.2 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0079/7035/5c8b5405-3925-35fb-a679-e6971e4983c3-thumb.jpg)
- 大小: 128.8 KB
分享到:
您还没有登录,请您登录后再发表评论
22 楼 coldrush 2013-01-24 11:31
21 楼 vcok 2013-01-24 11:19
20 楼 zhangdaiscott 2013-01-24 11:05
jdbcDao这块已经做了封装,会动态根据不同的数据库,使用不同的分页查询方法
19 楼 sblig 2013-01-24 10:58
18 楼 zhangdaiscott 2013-01-24 10:47
实际上我也做过类似的生成器,正是因为easyUI才有了做生成器的可能,但 成也easyUI败也easyUI,这玩意做私活儿还可以,商业项目和大项目可千万别用啊。。。
期待楼主的生成器能够更好的改进,私以为,现在的框架只需要 springMVC+springJDBCTemplate就够了,其他的cache或者业务框架都可以松耦合的添加的。hibernate还是算了吧,铁道部就是一个最大的失败。。。
建议单表操作使用hibernate,复杂的查询,全部采用你说的springJDBC 这样能提高查询效率
17 楼 houyujiangjun 2013-01-24 10:40
实际上我也做过类似的生成器,正是因为easyUI才有了做生成器的可能,但 成也easyUI败也easyUI,这玩意做私活儿还可以,商业项目和大项目可千万别用啊。。。
期待楼主的生成器能够更好的改进,私以为,现在的框架只需要 springMVC+springJDBCTemplate就够了,其他的cache或者业务框架都可以松耦合的添加的。hibernate还是算了吧,铁道部就是一个最大的失败。。。
16 楼 zhangdaiscott 2013-01-24 10:05
你好,谢谢你的建议,目前已经在着手采用spring mvc+ hibernate+freemarker+dwz+spring jdbc+jbpm4.4出一套新的框架;而且代码生成器不会局限框架,请看末尾的发展方向一
15 楼 zhangdaiscott 2013-01-24 10:02
只是让开发者从机械重复枯燥的工作脱离,更专注业务逻辑实现,提高了开发体验,复杂的问题太智能反而束缚太大
14 楼 zhangdaiscott 2013-01-24 10:00
楼主精神可嘉,期待iteye中又一个技术大牛出现!
感谢你用心的评价...
13 楼 zhangdaiscott 2013-01-24 09:59
代码生成都是抽象得不好的标志。这东西历史上已经出现过很多次了。总有些人重新搞一次,然后拿他当新发明。
非常感谢你的评语,对于代码生成器这块,用前辈的话来说吧:“十年前,这种代码生成工具的研发就非常火爆,但很快就灭了。因为软件不是家具。软件不在于它的一次性生产成本,而是变更及维护成本。”更详细请看《JEECG的设计思想?采用的技术?》没人拿他来做发明
12 楼 redtail 2013-01-24 09:58
11 楼 sigh0829 2013-01-24 09:57
10 楼 zhangdaiscott 2013-01-24 09:51
不需要SQL脚本,在应用后缀直接加上/init.jsp即可初始化数据,我刚发的搭建步骤,你可以参考下
9 楼 3gwind 2013-01-24 09:41
8 楼 Foxswily 2013-01-24 09:20
http://www.freemarker.org/fmpp.html
7 楼 fly1206 2013-01-23 22:26
6 楼 anduo1989 2013-01-23 21:31
5 楼 wandou 2013-01-23 19:23
代码生成都是抽象得不好的标志。这东西历史上已经出现过很多次了。总有些人重新搞一次,然后拿他当新发明。
4 楼 Pigwen 2013-01-23 17:05
3 楼 y5092_2012 2013-01-23 16:48
楼主精神可嘉,期待iteye中又一个技术大牛出现!
2 楼 flownclouds 2013-01-23 16:35
1 楼 kanme818 2013-01-23 16:29
虽然本人并不喜欢用hibernate,更别说自动生成代码了。但是还是45度仰望楼主的技术能力!