快速開發框架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%開發源碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM