1. 程式人生 > >GoSqlGo 首個正式版釋出,在前端寫 SQL 和業務邏輯

GoSqlGo 首個正式版釋出,在前端寫 SQL 和業務邏輯

  

GoSqlGo簡介 | Description

GoSqlGo是一個運行於後端的服務端工具,它的最大特點就是在開發期動態編譯客戶端Java程式碼,所有SQL和Java程式碼都可以在前端Html頁面完成,業務開發可以不再依賴後端程式設計師了。 

更新內容: 

GoSqlGo1.0.0版為首個正式發行版,相比與上一個試驗版,1.0.0版本完成了打包工具的開發,並已釋出到Maven中央庫。利用打包工具,html/Javascript中的SQL和Java程式碼,在佈署階段將會被抽取為類似$qry('CJKDn23r9','A',0)這樣的根據ID來呼叫的語句,從而實現安全性。

關於GoSqlGo的打包工具使用和更多介紹,請詳見碼雲專案主頁 (https://gitee.com/drinkjava2/gosqlgo)

附:GoSqlGo前端使用示例

前端程式設計師可以直接在Javascript裡寫SQL和Java程式碼,例如以下為一個HTML片段,實測通過,完整檔案位於這裡
這是一個轉賬業務的演示,它把所有的業務邏輯都寫在html裡面,不再需要和後端程式設計師溝通了:

<!DOCTYPE html>
<html>
<head>
<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>
    <h1>Transaction Demo</h1>
    <div id="msgid" class="msg"></div>
    <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($qry('select amount from account where id=? and amount>=?', 'B',0));
            </script>
        </div>
    </section>
    <script>
      function transfer(from, to, money){
         var rst = $java(`TX
                        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 "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");
          }
          else { $("#msgid").text(rst);
                 $("#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>

在佈署階段,可以用new DeployTool().goServ() 命令將上述html中的SQL和Java程式碼轉移到服務端。已抽取出的Java類還可以用goFront()方法逆向操作,再將程式碼塞回到html中去。 

作者其它開源專案 | Other Projects

版權 | License

Apache 2.0

關注我 | About Me

Github
碼雲