# GoSqlGo
**Repository Path**: liuxiaochen/gosqlgo
## Basic Information
- **Project Name**: GoSqlGo
- **Description**: 天下武功,唯快不破,程序无非就是接收用户输入、存到数据库。GoSqlGo能让前端直接存取数据库,独立完成项目开发。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 23
- **Created**: 2021-04-02
- **Last Updated**: 2021-04-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### 声明
## 本项目架构上没有什么安全问题,有质疑安全、注入问题的,在吐槽之前请将本说明完整看完
### GoSqlGo简介 | Description
天下武功,唯快不破,程序无非就是接收用户输入、存到数据库。GoSqlGo能让前端直接存取数据库,独立完成项目开发。
### 缘起 | Origin
一直认为,开发效率最高的方式不是让MVC架构极简(SpringBoot/jFinal),而是彻底省略掉MVC架构和后端程序员,直接由前端搞定一切,由多层架构变成两层,在前端直接写SQL,缩短界面和数据库之间的距离,才是最快的开发途径。基于此理念,在2011年本人在[这里](https://blog.csdn.net/drinkjava/article/details/6935539)写了一句预言,没想到技术的发展如此之慢,现在要自己亲手去实现它了,这就是GoSqlGo项目,如果名字翻译成中文,可以翻成"Sql冲冲冲冲冲",这个比较形象,它表达了SQL为王,一路狂奔,冲到了前端的意思。
GoSqlGo是一个运行于后端的软件,它的最大特点就是在运行期动态编译客户端Java代码,所有SQL和Java代码都可以在前端Html页面完成,可以彻底甩掉后端。开发完成后再利用打包工具将SQL和Java从前端移到后端,以实现安全。
GoSqlGo的竞品是GraphQL之类在可以在前端进行业务操作的工具,但区别在于:1.GoSqlGo支持直接在前端写SQL,而GraphQL不支持 2.GoSqlGo支持在前端写Java语句, GraphQL不支持。3.GraphQL之类工具是基于API,而GoSqlGo是不存在API的(它也可以生成API,只是没必要),没有API可以消除前后端勾通成本,尤其是查询,只要开启了GoSqlGo服务,所有的查询操作都可以在前端独立完成,不需要后端程序员参与。
### 适用场合 | Applications
最适用于快速、原型开发、业务逻辑简单、业务与页面高度绑定的场合。对于复杂的业务、需要考虑业务重用、以及实现特殊功能(如文件上传等)的场合不适用。GoSqlGo是独立的服务,通常使用token进行签权,所以可以与任意项目混搭使用,可以开启一个GoSqlGo服务实现与页面绑定的、简单的CRUD工作,而用传统的开发模式去实现复杂的、需要重用的业务。
### 简介 | Features
用一个例子来说明直接在前端写SQL和Java代码,以下示例实测通过,文件位于[这里](https://gitee.com/drinkjava2/gosqlgo/blob/master/demo/gsg-jbooox/src/main/webapp/page/demo1.html)。
这是一个转账业务的演示,开发阶段把所有的SQL和业务逻辑都写在html里面,在布署阶段再由打包工具抽取到服务端:
```
Transaction demo, use jQuery
```
另外还有两个演示:
[演示2](https://gitee.com/drinkjava2/gosqlgo/blob/master/server/src/main/webapp/page/demo2.html):GoSqlGo结合Vue的使用。
[演示3](https://gitee.com/drinkjava2/gosqlgo/blob/master/server/src/main/webapp/page/demo3.html): 演示直接在前端进行表单的输入检查并保存到数据库
### 运行 | Dependency and Run
GoSqlGo项目分为两个目录,core目录为GoSqlGo内核包,用户不需要关心, server目录是一个示范项目,使用时用户只需要将内容作一些修改即可以运行,如更改数据库连接和签权方式的自定义。
在windows下点击server目录下的\start_server.bat批处理,并用用户名demo、密码123登录即可运行。
第一次运行后,双击goServer.bat,即可将前端的java和Sql方法抽取到后端,再次运行start_server.bat就可以看到前端HTML里已不存在java和sql源码了,这就实现了安全性。
示范项目里主要有以下方法:
```
$java(String, Object...) 执行多行服务端Java语句。第一个参数是Java本体,后面是参数,在Java里可以用$1,$2...来访问。
$javaTx(String, Object...) 执行多行服务端Java语句并开启事务,如果有异常发生,事务回滚。
$qryObject(String, Object...) 将SQL查询结果的第一行第一列对象返回,第一个参数是SQL,后面是SQL参数,下同
$qryArray(String, Object...) 返回SQL查询的第一行数据
$qryArrayList(String, Object...) 返回多行查询结果
$qryTitleArrayList(String, Object...) 返回多行查询结果,第一行内容是各个列的标题
$qryMap(String, Object...) 返回SQL查询的第一行数据,为Map 格式
$qryMapList(String, Object...) 返回SQL查询的多行数据,为List