博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速开发框架V0.001(免费、100%开源)
阅读量:6890 次
发布时间:2019-06-27

本文共 4547 字,大约阅读时间需要 15 分钟。

    公司是金融行业的,项目都是非常庞大,项目的各个层次划分的非常细,一个保存操作,就需要从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
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
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

你可能感兴趣的文章
Oracle数据库系统使用经验六则
查看>>
Citrix XenServer多路径配置
查看>>
毕业了才知道学习
查看>>
PHP实现队列及队列原理
查看>>
PingingLab传世经典系列《CCNA完全配置宝典》-2.4 RIPv1基本配置
查看>>
win7下IE主页无法修改,IE设置无法保存解决方案
查看>>
centos7禁止root帐号直接登录
查看>>
使用twemproxy作为Redis代理
查看>>
Cocos2d-x 《雷电大战》-精灵随手指移动,你点哪我走哪!
查看>>
python urllib
查看>>
EasyUI实现异步加载tree(整合Struts2)
查看>>
yum缓存
查看>>
基于PCNTL的PHP并发编程
查看>>
我的友情链接
查看>>
解决IE6不支持除a以外:hover的问题
查看>>
用导航控制器制作一个简单的登陆显示
查看>>
Github 使用基本流程
查看>>
谷歌旗下Gmail周四宕机90分钟:480万用户受影响
查看>>
python时间转为时间戳
查看>>
eclipse启动tomcat时内存溢出
查看>>