快速开发框架V0.001(免费、100%开源)

    公司是金融行业的,项目都是非常庞大,项目的各个层次划分的非常细,一个保存操作,就需要从jsp的form->action的vo->在service层convert成其他系统需要的vo->在dao中映射到xml(使用ibatis)->db。每次映射都要注意字段名称是否一致,否则出错,好累...

    在实际中经常看到接私活的朋友,怀疑人家怎么那么快就可以做出项目,而我不行那,因此苦苦思考一款java领域的快速开发框架,首先想到的是hibernate。

    Eclipse.org

    这是个好东西,自动orm,基于HibernateDaoSupport可以写泛型基类,因此只需要写出model,就会自动生成数据库、dao、service,甚至action、jsp都可以生成。

    使用SpringMVC+Hibernate做了做进销存,

    发现了Hibernate的几个问题:

    (1)视图支持不够。Hibernate没有视图注解,不能自动生成,只能手工生成。

    (2)对于中间表,hibernate必须有映射,其实java代码里面可以不用,仅仅是中间表嘛,如角色和员工的中间表,就是两个字段。

    (3)复杂sql支持不够,如果绕开hibernate写sql,就是两套思路,觉得没必要。

    (4)对于业务逻辑比较简单的model,也要生成dao、service,里面没有一个方法(都来自基类),但是也要有,觉得没必要。

 

    基于这几个考虑,又琢磨出了目前的新框架:

    新框架思路:jsp+SpringMVC+model,符合最基本的MVC分层,但绝不多分一层。

    具体说说看:

 

    (1)页面使用jsp,因为jsp随便找个搞java的基本都会写,属于最最基本的java web基本功。再配合tag,会节省很多前端开发代码量和时间。

    前端框架使用的是jeasyui,有extjs的展现风格,但是实现思路迥异,更接近普通的html写法,非常喜欢这种朴素。

 

    (2)action使用的是SpringMVC,配合REST写法,更接近于http本质,写起来非常舒服和直接,我觉得比Struts2来的更方便。

 

    (3)model与数据库是映射的,表名和model名一致,字段名和model属性名一致,不区分大小写。转换是反射自动完成的,不需要额外代码。

 

    (4)DAO我觉得是亮点,使用的是DbUtils,但是不独立出一个DAO层,把带代码写在action的方法中,看一下几个例子,是不是觉得会方便:

    保存的例子,把页面传来的参数自动转成model对象,直接写sql保存,下面是新增和修改的例子,ajax请求。

1     @RequestMapping("/save")
2     public @ResponseBody Map<String, Object> save( PricePolicy model) {
3         if (model.getId()==null) {
4             Dao.insert("insert into pricePolicy(name, style, value)values(?,?,?)", model.getName(), model.getStyle(), model.getValue());
5         } else {
6             Dao.update("update pricepolicy set name=?, style=?, value=? where id=?", model.getName(), model.getStyle(), model.getValue(), model.getId());
7         }
8         return ActionHelper.ajaxOK();
9     }

    删除的例子,ajax请求

1     @RequestMapping("/delete/{id}")
2     public @ResponseBody Map<String, Object> delete(@PathVariable("id")Long id) {
3         Dao.delete("delete from pricepolicy where id=?", id);
4         return ActionHelper.ajaxOK();
5     }

    复杂代码的例子,一个事务中多条语句,最有一次提交。如果失败,会在SpringMVC的异常处理中统一解决,在这里不处理。

 1     private void saveSalerToDB(RegistInfo model){
 2         Dao.openTransaction();
 3         //1.insert总公司
 4         String sql1 = "insert into org(name, style)values(?, ?)";
 5         long domainId = Dao.insert(sql1, "总公司", OrgConst.domain);
 6         Dao.update("update org set domainId=? where id=?", domainId, domainId);
 7         //2.insert公司
 8         String sql2 = "insert into org(domainId, pid, name, areaId, levelId, style, subStyle)values(?, ?, ?, ?, ?, ?, ?)";
 9         long companyId = Dao.insert(sql2, domainId, domainId, model.getCompanyName(), model.getAreaId(), model.getLevelId(), OrgConst.company, OrgConst.SubStyle_saler);
10         Dao.update("update org set companyId=? where id=?", companyId, companyId);
11         //3.insert岗位: 法人、管理员
12         String sql3 = "insert into org(domainId, companyId, name, style)values(?, ?, ?, ?)";
13         long positionId = Dao.insert(sql3, domainId, companyId, OrgConst.legalPerson, OrgConst.position);
14         Dao.insert(sql3, domainId, companyId, OrgConst.manager, OrgConst.position);
15         //4.insert员工
16         String sql4 = "insert into staff(companyId, mainPositionId, name, password, username)values(?,?,?,?,?)";
17         long staffId = Dao.insert(sql4, companyId, positionId, model.getLegalName(), model.getLegalPassword(), model.getLegalUsername());
18         //5.insert合作关系表,插入两次,方向不同
19         Org agent = Dao.get(Org.class, "select * from org where id=?", model.getAgentId());
20         String sql5 = "insert into RelatedUnit(selfId, selfName, partnerId, partnerName, isSupplier, isSaler, isBorrower, isLender, status)values(?,?,?,?,?,?,?,?,?)";
21         Dao.insert(sql5, companyId, model.getCompanyName(), agent.getId(), agent.getName(), 1, 0, 1, 1, RelatedUnitStatus.NORMAL);
22         Dao.insert(sql5, agent.getId(), agent.getName(), companyId, model.getCompanyName(), 0, 1, 1, 1, RelatedUnitStatus.NORMAL);
23         Dao.commitTransaction();
24     }

    是不是写代码更直接更舒服啊。不管你们信不信,反正我信了......

 

    (5)对于数据库的测试数据,我使用excel管理。excel的每个sheet就是一个表,每一列就是一个字段,把初始化数据和测试数据都放到excel中,只需要一个操作就可以deleteAndInsert到数据库中了。既方便平时频繁的增删字段造成测试数据不准确,也方便日后客户那里批量导入导出数据的问题。一个字:爽!

 

    (6)使用了log4jdbc,对jdbc做了封装。jdbc打印的sql都是带?的,不方便直接复制语句调试,封装之后,就可以直接打印出执行的语句了

7. select * from Menu where publicRoot=1 and domainRoot=0 order by id 

  直接拿到数据库执行就可以了。

 

     使用新的框架做了几个增删改查,感觉太好了,最大的优点是开发效率飞速提高,理解问题也简单了,更关注业务实现,而不是hibernate的语法;另外,维护也方便了,看看jsp、action就完了,不需要service、dao来回翻,并且普通的sql代码,刚毕业的就可以维护这样的项目,不需要多少工作经验。

 

    缺点哪,就是不咋符合java的大型架构思路,没有纯粹的orm,理论家看着不舒服。不过,我不想要哪些华而不实的东西,我要的是完成项目快点,快点,再快点.....早一点完成就可以多接一个单子,时间就是金钱。

 

    项目使用maven构建,代码比较大,请到QQ群172581012的附件中下载,

    声明:代码没完善,100%开发源码。

转载于:https://www.cnblogs.com/meiyuanbao/archive/2012/08/12/2634403.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebBuilder是一款跨平台、数据库和浏览器的可视化Web应用开发平台。WebBuilder使用了多项最新的技术,使Web应用的开发更快捷和简单。 作为一款高效的Web开发工具,WebBuilder的特色是: .基于浏览器的集成开发环境 .丰富的组件库 .开发应用简单快速 .高效率和高稳定性 .跨平台、数据库和浏览器 .服务器端的脚本支持 .智能的数据库访问机制 使用WebBuilder可开发ERP、OA、CRM、HR、MIS以及电信、银行、政府、企业等各行业的企业级应用系统,帮助信息化管理系统的快速构建。完善的基础架构,具有大型应用系统必须的完整功能,使应用系统的开发仅需致力于业务的开发。 您可以到 http://www.putdb.com 在线使用或下载到本地使用,软件开源并基于GPL协议授权。 功能强大的集成开发环境 在线的带语法分析和高亮的Java、JavaScript、ServerScript、SQL编辑器,所见即所得的表单设计器,强大的组件管理器和模块管理器,智能的对象探测器。 企业级的Portal 灵活且易于使用的Portal整合了各方应用,给用户的操作带来了极佳的体验。 跨异构数据库的管理工具 在线表格编辑,高亮的SQL和语法分析,支持大数据量的访问,支持所有类型数据(包括BLOB)的导入导出。 跨平台的远程服务器文件访问 使用资源管理器般的简单,就能轻松操纵远程服务器系统,给系统的远程开发带来方便。 随心所欲的权限控制 能够对任意粒度的操作进行严格的权限控制。 企业级的后台任务管理 管理和控制后台计划任务稳定地运行。 纯HTML和JavaScript 包括图表在内,无任何插件,可以方便地在任何终端上面访问。 丰富的组件库 支撑后台和前台应用的快速开发。 国际化开发支持 解决不同区域的文字、日期和数字等的差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值