GoSqlGo 1.1.0 釋出,大前端模式,在 HTML 裡寫 SQL 和 Java
GoSqlGo (https://gitee.com/drinkjava2/gosqlgo)
天下武功,唯快不破,程式無非就是接收使用者輸入、存到資料庫。GoSqlGo能讓前端直接存取資料庫,獨立完成專案開發。
簡介 | Features
GoSqlGo是一個運行於後端的開發工具,它的特點是在執行期動態編譯客戶端Java程式碼,所有SQL和Java程式碼都可以在前端Html頁面完成,可以徹底甩掉後端。開發完成後再利用打包工具將SQL和Java從前端移到後端,以實現安全性。忘掉MVC吧,因為現在架構變成MV兩層了;忘掉FreeMaker之類模板吧,因為Java內嵌到HTML裡去了;忘掉後端程式設計師吧,因為前端把後端的活給幹了(這叫大前端);忘掉前端校驗吧,因為後端校驗這活也歸前端了,前端校驗能偷懶就偷吧。
1.1.0版更新:
1. 原來1.0.0版只有的qry和java兩個方法,現在擴充到以下方法,並且可以新增自定義方法了。
$java(String, Object...) 執行多行Java語句。第一個引數是Java本體,後面是引數,在Java裡可以用$1,$2...來訪問。 $javaTx(String, Object...) 執行多行Java語句並開啟事務,如果有異常發生,事務回滾。 $qry(String, Object...) 將SQL查詢結果的第一行第一列作為字串值返回,第一個引數是SQL,後面是SQL引數 $qryArray(String, Object...)返回SQL查詢的第一行資料,格式為Object[]的JSON字串 $qryArrayList(String, Object...)返回多行查詢結果為List<陣列>的JSON格式 $qryTitleArrayList(String, Object...)返回多行查詢結果,為List<陣列>的JSON格式,但第一行內容是各個列的標題 $qryMap(String, Object...) 返回SQL查詢的第一行資料,為Map的JSON格式 $qryMapList(String, Object...)返回SQL查詢的多行資料,為List<Map>的JSON格式 $qryEntityList(String, Object...)返回多行資料為List<實體>的JSON格式,SQL寫法是實體類名+逗號+SQL, 示例:$qryEntityList(`a.b.Demo, select * from demo`);
用一個示例來說明以上這些方法的使用,這是一個單頁面應用,所有的SQL和業務邏輯都寫在javascript裡面,夠酸爽的吧:
<!DOCTYPE html> <html> <head> <style>...略...</style> <script src="/js/jquery-1.11.3.min.js"></script> <script src="/js/jquery-ajax-ext.js"></script> <script src="/js/gosqlgo.js"></script> </head> <body> <script> document.write($java(`return new WebBox("/page/menu.html").setAttribute("title", $1);`, "Transaction demo, use jQuery")); function getUserListHtml(){ var users=JSON.parse($qryMapList(`select * from account where amount>=? order by id`,0)); var html="User List:<br/>"; for(var i=0;i<users.length;i++) html+="User ID:" +users[i].ID+", AMOUNT:"+ users[i].AMOUNT+"<br/>"; return html; } </script> <div id="msgid" class="msg"></div> <p id="Users"> <script>document.write(getUserListHtml());</script> </p> <section> <header>Account A</header> <div id="A" class="amount"> <script> document.write($qry(`select amount from account where id=? and amount>=?`, 'A',0)); </script> </div> </section> <section> <header>Account B</header> <div id="B" class="amount"> <script> document.write($java(`return new Account($1,$2).load().getAmount();`, 'B',0)); </script> </div> </section> <script> function transfer(from, to, money){ var rst = $java(`#TransferMoney int money=Integer.parseInt($3); if(money<=0) throw new SecurityException("Money<=0, IP:"+ getRequest().getRemoteAddr()); Account a=new Account().setId($1).load(); if(a.getAmount()<money) return "Error:No enough balance!"; Account b=new Account().setId($2).load(); a.setAmount(a.getAmount()-money).update(); b.setAmount(b.getAmount()+money).update(); return "Transfer Success!|"+a.getAmount()+"|"+b.getAmount(); `,from,to,money); if(rst.startsWith("Transfer Success!")) { var words=rst.split('|'); $("#msgid").text(words[0]); $("#"+from).text(words[1]); $("#"+to).text(words[2]); $("#msgid").css("background", "#dfb"); $("#Users").html(getUserListHtml()); } elseif(rst.startsWith("Error:")) { $("#msgid").text(rst.substring(6)); $("#msgid").css("background", "#ffbeb8"); } } </script> <section> <header>Transfer</header> <form onsubmit="return false" action="##" method="post"> <input name="amount" value="100" class="amount"> <button name="btnA2B" value="true" onclick="transfer('A','B',100)">From account A to account B</button> <button name="btnB2A" value="true" onclick="transfer('B','A',100)">From account B to account A</button> </form> </section> </body> </html>
檢視演示: 在windows下點選demo\gsg-jbooox\run_undertow_embedded.bat批處理即可。
另外還有兩個演示,分別是GoSqlGo結合Vue的使用、在html裡定義實體類並進行DDL生成、建表、表單輸入檢查、表單提交和存檔,請詳見專案主頁。
2. "gsg-jbooox"示範專案新增以下幾種執行方式:
方式1,釋出war包到本機的Tomcat7或Tomcat8目錄下執行:
執行:修改run_tomcat_local.bat批處理檔案中的TomcatFolder為本機Tomcat目錄,並執行
方式2, 命令列方式在嵌入式Tomcat上執行,這種方式本機不需要安裝Tomcat, Maven會自動下載
執行:雙擊執行run_tomcat_embedded.bat批處理即可
方式3, 命令列方式在嵌入式Jetty上執行,這種方式本機不需要安裝Servlet容器, Maven會自動下載Jetty
執行:雙擊執行run_jetty_embedded.bat批處理即可
方式4, 命令列方式在嵌入式Undertow上執行,這種方式本機不需要安裝Servlet容器, Maven會自動下載Undertow
執行:雙擊執行run_undertow_embedded.bat批處理即可
方式5, 匯入到Eclipse中執行或除錯
1.執行run_tomcat_embedded.bat批處理一次
2.執行maven_eclipse_eclipse.bat批處理,生成eclipse配置
3.開啟Eclipse,匯入專案,並執行其中的MainApp.java的main方法
檢視結果:在瀏覽器輸入 http://localhost
3. 添加了幾個批處理命令進行打包和逆打包操作,例如:
Windows環境下,先執行run_undertow_embedded.bat一遍後,再點選goServ.bat批處理檔案即可進行打包操作,再次執行run_undertow_embedded.bat就可以發現客戶端的SQL和Java消失了,取而代之的是$gsg這種Ajax遠呼叫方法,原來的SQL和Java語句被移到了服務端。
批處理命令有goFrontForce.bat、goServ.bat、goServForce.bat、goFront.bat這幾個,請詳見專案主頁的用法。
GoSqlGo相關開源專案 | Related Projects
期望 | Futures
GoSqlGo已釋出,對它感興趣的請加關注,或發issue提出完善意見。也歡迎同學們提交GoSqlGo演示示例,GoSqlGo如果用好了,結合前端的視覺化元件,可以實現類似Delphi一樣的開發效率。
版權 | License
關注我 | About Me
點贊 | Star
點贊很重要,必須的