ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SqlRest在Idea中的环境搭建与SQL即API数据服务实践

SqlRest在Idea中的环境搭建与SQL即API数据服务实践 最近团队在搞数据开放平台数仓里的指标数据要统一通过API对外输出。一开始我们按老套路来每个需求写一套Controller、Service、Mapper结果半个月下来接口没出几个光重复代码就堆了一大摞。后来换了个思路引入SqlRest这种SQL配置驱动的数据服务中间件把“SQL写出来→配置一下→接口就有了”变成了现实。整个开发流程直接从“写代码”变成“写配置”效率提升非常明显。这期间新同学加入第一件事就是把Idea开发环境搭起来把SqlRest项目跑通。这个过程看起来简单实际上坑不少——JDK版本、Maven配置、依赖下载、数据库初始化、热部署设置哪一步不对都能卡你半天。我花了些时间把整个过程梳理成一份可直接照着操作的文档今天拿出来分享适合刚接触SqlRest、或者准备在Idea里跑数据服务类项目的同学参考。1. 先搞清楚SqlRest到底是什么1.1 数据服务在数仓体系中的角色数仓平台的数据服务层说白了就是解决“数据怎么给出去”的问题。你数仓里的数据再全、模型再规范如果对外输出还是靠人工跑数、导Excel、或者每个业务方来提需求然后开发写接口那效率和实时性都跟不上。数据服务层做的事情就是把数仓中已经加工好的数据以一种标准化的方式暴露出去。最常见的形式就是API服务。业务方通过HTTP调用接口传入参数拿到JSON格式的返回结果整个过程对业务方来说是一个标准接口对数据团队来说不需要针对每个需求重复开发。我见过的很多团队在数仓建设前期压根不考虑数据服务这层。等需求一多各种临时接口到处都是有的写在调度脚本里有的在应用代码里硬查数仓表完全失控。数据服务层的价值在于它把“取数逻辑”和“接口暴露”这两件事解耦了业务逻辑由SQL定义接口形态由配置定义。1.2 SqlRest的核心思路和优势SqlRest这个项目的核心思路很简单你写好一条SQL把它注册成一个API这个API暴露出去后调用方传入参数SqlRest内部完成参数绑定、SQL执行、结果封装最后返回JSON。它的设计跟那些重量级API网关不一样它更专注在“SQL即API”这条主线上。你在界面上维护SQL、定义入参出参、配置分页逻辑然后接口就有了。对于内部数据服务场景来说这是效率最高的一种方式。相比传统开发模式SqlRest的优势可以从三个维度看开发效率写SQL比写Java代码快得多尤其在数据查询场景一条复杂的联表SQL手写Java可能要写几十行Mapper和VO类在SqlRest里就是一段SQL的事情。维护成本接口的变更集中在SQL配置层面不需要改代码、重新打包、发布应用改完配置立即生效。规范化所有接口统一走SqlRest注册和发布接口文档、参数校验、返回格式这些基础能力平台直接提供了。当然SqlRest也有它的适用边界。它不是用来替代业务系统的应用框架的复杂的业务逻辑、事务处理、消息推送这些场景不适合往SqlRest里塞。它的定位就是“数据查询服务”把你查询类的数据需求快速变成一个稳定、可管理的API。2. 搭建环境前的前置准备2.1 JDK和Maven怎么装才算“装好了”Idea跑Java项目JDK是第一道门槛。SqlRest这类项目基本都是基于JDK 8开发的虽然有些分支已经开始要求JDK 11甚至17但我建议你本地装JDK 8为主再额外装一个高版本JDK备用。这不是玄学是实际踩坑踩出来的经验——很多旧项目的依赖、插件在JDK 11及以上环境里会出一些莫名其妙的兼容问题比如Lombok版本太老、Maven编译插件不识别新版本JDK等。JDK安装本身不复杂去官网下载对应操作系统的安装包就行。Windows环境下需要注意安装路径不要带空格和中文不要默认装在C:\Program Files这种目录下。我一般习惯装到D:\dev\jdk1.8这种纯英文路径一方面避免一些老旧工具解析路径出错另一方面也方便后面配置JAVA_HOME。装完JDK后配置环境变量是绕不开的步骤。需要配置三个地方JAVA_HOME指向JDK安装目录比如D:\dev\jdk1.8Path追加%JAVA_HOME%\binCLASS_PATH可省略但不少老项目还会读取建议设为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar配置完之后别急着高兴在命令行执行java -version和javac -version两个命令都能正常输出版本信息才算配置成功。这里有一个很容易被忽略的坑如果你之前装过其他版本的JDK或者系统里有过Oracle自带JRE的残留那么Path里可能有多条JDK路径在打架。我在实际排查中经常看到java -version是一个版本、javac -version又是一个版本的情况这种多半就是环境变量冲突。解决办法是把多余路径清掉或者在系统变量里把JAVA_HOME置顶。Maven方面我建议优先使用Maven 3.6.x版本。太老的和太新的都别碰太老的不支持新版本依赖的解析规则太新的比如3.9对某些企业内网私服配置有额外的校验逻辑容易出兼容问题。下载地址选Apache官网的二进制包解压到一个英文路径下比如D:\dev\apache-maven-3.6.3。Maven同样需要配置环境变量MAVEN_HOME指向解压目录Path追加%MAVEN_HOME%\bin。配置完成后命令行执行mvn -v能看到Maven版本、JDK版本和操作系统信息就是正常的。Maven最关键的一项配置是settings.xml。就算你的网络能直接访问中央仓库我也建议你先把阿里云镜像配上。原因是国内网络访问Maven中央仓库的速度实在不稳定一个简单项目几十个依赖直接下载可能要等十几分钟配了镜像之后几分钟就搞定。mirrors mirror idaliyunmaven/id mirrorOf*/mirrorOf name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url /mirror /mirrors还有本地仓库的位置。默认在用户目录下的.m2文件夹这个位置有两个问题C盘空间被依赖撑爆、系统重装后全部丢失。我通常改成其他盘符比如D:\dev\maven-repo在settings.xml里加一行localRepositoryD:\dev\maven-repo/localRepository改完记得让Idea能读到这份settings.xml。这个后面在Idea配置里还要说因为Idea默认用的是自己内置的Maven不是我们命令行用的那一套。2.2 Idea版本怎么选社区版够不够用关于Idea选型我直接说结论如果纯做SqlRest这类数据服务项目Idea社区版其实够用。社区版免费、开源、不涉及授权问题日常的代码编辑、运行调试、Maven管理、Git操作都支持。但它在以下几个场景有硬限制没有Spring Boot的专属初始化向导、没有数据库自带的可视化工具自带Database面板、对企业级框架的插件支持弱。这里给你一个建议优先安装IntelliJ IDEA Ultimate版本如果你所在公司有正版授权就用公司授权没有的话可以用社区版再配合插件来弥补。不要一看付费版就觉得有门槛去折腾所谓的“激活工具”安全性没有保障不说还容易给公司带来合规风险。退一步讲SqlRest项目本质上是Spring Boot Maven的标准工程社区版跑起来没有任何问题。安装过程我有几个习惯性的动作操作下来能少踩很多坑不装C盘装到D:\dev\IdeaIC之类的纯英文路径省得后续各种工具链访问路径出问题。安装选项里勾选“Java”和“Groovy”的关联类型把Idea设为默认的*.java打开方式。一定要创建一个桌面快捷方式和“Open Folder as Project”的右键菜单项后续开发会频繁用到。首次启动Idea时有一个选项是是否导入历史配置如果你是第一次安装就选“Do not import settings”以前用过Idea的可以导入之前的配置同步快捷键和主题。安装完成后的第一件事不是建项目而是改两个基础设置字体和主题Settings → Appearance Behavior → Appearance里选Darcula主题字体调成16号起步编程字体我习惯用JetBrains Mono。编码统一为UTF-8Settings → Editor → File Encodings里把Global Encoding、Project Encoding、Properties Files三项全部设置为UTF-8勾选Transparent native-to-ascii conversion。2.3 Idea里关联JDK和Maven的具体操作Idea安装好之后需要把前面装好的JDK和Maven配置到Idea里。这一步很多人觉得简单但恰恰是最容易出问题的地方。JDK关联打开File → Project Structure → Project在Project SDK这里点Add SDK → JDK选择JDK安装目录。配置完成后在Project language level里选择你项目实际用的Java版本。SqlRest项目一般是Java 8这里就选8。Maven关联打开File → Settings → Build, Execution, Deployment → Build Tools → Maven这里有几个关键选项Maven home path选择你解压Maven的目录如果选成Idea自带的Maven那settings.xml里的镜像和本地仓库配置就全都不生效了。User settings file勾选Override然后选择你自己修改过的settings.xml路径。原因是Idea默认读取的是~/.m2/settings.xml你不Override的话前面配置的阿里云镜像就白配了。Local repository这里在你选择了settings.xml之后会自动读取里面的localRepository配置不用手动填。这三项设置完之后Idea右下角如果提示依赖解析等待完成即可。打开Maven工具窗口能看到项目的依赖列表全部加载出来没有红色报错说明关联成功。还有一个建议Idea默认在后台自动导入Maven项目这个功能有时候会频繁刷新导致卡顿。可以在Maven → Importing里关闭Import Maven projects automatically改为手动点击刷新按钮。反正我是这么干的省得每次改动pom.xml整个Idea卡个半死。3. 项目导入与关键配置实操3.1 把SqlRest工程拉到本地并导入IdeaSqlRest的代码托管在Git平台上你现在需要做的事情是把它clone到本地。我用命令行的方式来做这个事情顺便推荐一个经验克隆项目之前先想清楚你要把它放在哪个目录。别放在桌面也尽量别放在有中文路径的目录下否则后面有得哭。git clone https://github.com/xxxx/SqlRest.git这里的仓库地址根据自己的实际来源来定如果是公司内部二次开发和封装的版本地址肯定不一样。克隆完成后用Idea打开项目File → Open选择刚才clone下来的目录Idea识别到pom.xml后会自动询问是否作为Maven项目导入选“Trust Project”并等待。第一次导入大型项目的体验都不太好因为Idea要建立索引、下载依赖、编译源代码。这里有一个很重要的判断标准看Idea底部的状态栏。如果显示“Indexing”字样说明正在建立文件索引这个过程可能持续5到10分钟不要强行操作。如果显示“Resolving Maven dependencies”说明正在下载依赖进度取决于你的网络和镜像配置。很多新人第一次导入项目时看到Idea卡在“Scanning files to index”就以为死机了强行重启结果重启后又从头来过反复几次心态就崩了。实际上只要右下角有进度条在走你就安心等着该干嘛干嘛去。3.2 Maven依赖下载失败的几个常见情况SqlRest项目依赖不算太多但涉及Spring Boot相关的依赖体积都不小。下载过程经常出现下面几种问题第一种是单个依赖下载失败pom.xml里对应依赖显示红色波浪线。这种情况最常见的原因是网络问题或镜像同步延迟。解决方案是先尝试在命令行执行mvn clean install -DskipTests重新拉取如果还是失败检查本地仓库里是否有以.lastUpdated结尾的文件有的话删掉对应目录后重新下载。第二种是私服依赖拉不到。如果你所在公司用了私有Nexus仓库而SqlRest依赖了内部封装的包那你需要在settings.xml里配置私服地址并且这里有个安全校验的细节如果你的私服要求认证必须要在settings.xml的servers节点里配置账号密码否则Idea会一直提示未授权。第三种是JDK版本不匹配导致的编译错误。比如某些依赖要求JDK 11而你项目是JDK 8这时候编译会直接抛异常。判断方法是看错误信息里的UnsupportedClassVersionError或者invalid target release定位到之后调整Project SDK版本或者pom.xml里的java.version属性。3.3 数据库连接信息与配置文件说明SqlRest项目的运行依赖MySQL数据库它的API配置、分组信息都存储在数据库表中。代码clone下来之后第一步是找到application配置文件。一般Spring Boot项目的配置文件名有几种application.yml、application.yaml、application.properties。在SqlRest类项目里常见的是application.yml。打开后你会发现核心配置项大致如下server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/sqlrest?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver # SqlRest自身配置 sqlrest: # API请求路径前缀 api-prefix: /api # 是否开启SQL日志 show-sql: true照着这个模板把数据库地址、账号、密码改成你自己的。数据库需要提前建好并且在库里执行项目提供的初始化SQL脚本一般是doc或sql目录下的init.sql。这个脚本会创建API分组表、API配置表、参数配置表等元数据表没有这些表SqlRest启动不了更谈不上发布API。我实际遇到过一种情况代码是从Git上拉的最新分支但数据库脚本没更新导致启动时提示某张表不存在。排查了很久才发现是开发分支新增了一张表但建表脚本没有同步提交。所以如果你启动报错说表不存在先去看一下最新的建表脚本确认数据库表结构是否完整。4. 核心配置拆解从SQL到API的关键环节4.1 如何理解SqlRest的数据源和API分组SqlRest项目里有两个核心概念数据源和API分组。数据源就是数据库连接配置表示“你的SQL去哪个数据库里执行”。SqlRest支持配置多个数据源不同的API可以指定不同的数据源这样就能在一个SqlRest实例里同时暴露多个业务库的数据接口。这个设计非常实用——我见过很多团队的库是分开的订单库、用户库、日志库各管各的如果没有多数据源支持你有几条SQL得分别部署好几个服务。API分组则是接口管理的组织方式。你可以按照业务线分订单服务、用户服务、分析服务也可以按照下游调用方分App端、Web端、数据大屏甚至按照数据级别分核心接口、非核心接口。分组的作用就是让接口有清晰的归属和权限边界不至于几百个API堆在一起完全没法管理。理解了这两个概念之后SqlRest的整体架构就变得很清晰了你在某个分组下创建一个API告诉它“去哪个数据源执行什么SQL参数是什么返回结构长什么样”剩下的执行和封装逻辑全部由SqlRest完成。4.2 一步步创建你的第一个APISqlRest本身就带管理后台浏览器访问http://localhost:8080就能打开。登录进去后按照下面这些步骤就能把第一个API创建出来在“API分组”页面里新建一个分组比如开发测试、分组编码填dev_test。在“API管理”里点击新增API选择所属分组填写API名称和请求路径。请求路径一般用/api/xxx格式这个路径就是下游调用方实际请求的URL。选择数据源绑定到你要查询的数据库连接。编写SQL模板。这是核心环节SqlRest会解析SQL中的动态参数你需要用${参数名}的方式声明参数。比如SELECT order_id, user_id, order_amount, order_status FROM ods_order_info WHERE order_status ${orderStatus} AND order_date ${startDate} AND order_date ${endDate} ORDER BY order_date DESC LIMIT ${pageSize}在参数配置里声明上面SQL中出现的参数orderStatus字符串类型必填、startDate日期类型必填、endDate日期类型必填、pageSize整数类型选填默认值10。保存后到“API测试”页面输入测试参数比如orderStatus1、startDate2024-01-01、endDate2024-01-31点击调试。不出意外的话你就能看到接口返回一组JSON数据。如果你在前端项目里配置一个请求指向http://localhost:8080/api/你配置的路径传同样的参数也能拿到相同结果。这说明SqlRest已经把SQL成功变成了HTTP接口。这个过程里最重要的是SQL模板的写法我总结了几条经验参数必须用${}包裹不要把参数直接拼接在SQL里而不做任何声明。如果某参数可能为空建议先写默认值避免出现SQL语法错误。涉及模糊查询时用LIKE CONCAT(%, ${keyword}, %)而不是直接在SQL里写%${keyword}%后者容易引SQL注入和其他解析问题。4.3 调试工具怎么用才能快速定位问题API创建完之后调试是绕不开的环节。SqlRest自带的调试页面虽然能用但我个人还是习惯用Postman或者Apifox来做更完整的测试。原因很简单自带的调试页面只能验证“能不能通”但接口的响应耗时、返回结构、异常信息还是专业工具看得更清楚。用Postman测试时有几个必看的参数Response Time接口耗时正常情况下内部API应该在100ms以内超过这个数值说明SQL还有优化空间。Status Code200是正常500说明SQL执行出错了这时候需要回管理后台查看错误日志。Response Body里的code字段如果为0或者success说明业务执行正常如果返回错误码看错误信息里有没有SQL相关提示。我用得最多的调试方法是先在管理后台的“API测试”页面调试一把确认SQL本身没有问题然后再去Postman里测试参数传递和边界条件。这两个场景分开定位问题会快很多。另外还有一个细节SqlRest会把执行过的SQL打印到控制台日志里前提是配置了show-sql: true。当接口返回结果跟预期不一致时第一步不是去改代码而是去控制台找那条实际执行的SQL。很多时候你以为SqlRest执行的是你写的SQL实际上因为参数绑定和转义实际执行的SQL跟你预期有细微差别。把这条日志复制到数据库客户端里执行一遍问题马上就能定位。日志样例大致长这样2024-06-12 10:23:45.678 INFO 12345 --- [nio-8080-exec-1] c.s.SqlRestInterceptor : Executing SQL: SELECT order_id, user_id, order_amount FROM ods_order_info WHERE order_status 1看到这条日志你就能确认参数是否正常绑定、SQL是否按照预期拼接了。4.4 热部署配置改完配置不用重启SqlRest项目开发过程中有个很关键的体验优化热部署。因为SqlRest的核心逻辑是“SQL配置即接口”所以改SQL其实不需要重启应用重新保存配置后再次请求就生效了。但如果你改的是Java代码比如加了自定义拦截器、调整了日志逻辑那么热部署就有用了。Spring Boot项目标配的热部署方案是spring-boot-devtools在pom.xml里加上这个依赖就能用dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-devtools/artifactId optionaltrue/optional /dependency同时在Idea里要开启两个配置Settings → Build, Execution, Deployment → Compiler → Build project automatically打勾然后按Ctrl Shift Alt /打开Registry把compiler.automake.allow.when.app.running的值设为true。这两步缺一个代码改了都不会自动生效。这里我要强调一个亲测有效的经验改了Java代码后不要马上刷新页面看效果等Idea的Build执行完右下角进度条消失再操作否则有时候加载的是旧class文件你甚至会怀疑改了没起作用。5. 常见问题与排查技巧实录5.1 Idea里启动报错最快的定位方法SqlRest项目启动报错最常见的集中在数据库连接、端口占用、依赖加载三类。我把高频问题和排查思路整理成了表格照着查基本能解决90%的问题。报错关键词问题原因处理方式Access denied for user数据库账号密码错误检查application.yml里的用户名密码注意区分大小写Unknown database数据库不存在或名字不对确认初始化SQL是否执行过数据库名是否与配置一致Port 8080 was already in use端口被其他进程占用换端口或找到占用进程并结束它Table xxx doesnt exist数据库表未初始化执行项目提供的init.sql脚本Cannot resolve symbol XXX依赖没下载完整或Idea索引异常执行mvn clean install后重新ImportFailed to configure a DataSource数据源配置缺失检查spring.datasource配置段是否完整5.2 依赖下载慢换了镜像也不行怎么办依赖下载失败是个老生常谈的问题。配置了阿里云镜像后大多数情况下能解决。但有一种情况比较特殊你用的依赖版本太老或者太新公共仓库里根本没有。SqlRest的内部依赖有时会引用到一些不在中央仓库的包。这个问题的标准解法是去项目官网或GitHub的Release页面手动下载对应jar包然后通过mvn install:install-file命令安装到本地仓库mvn install:install-file -Dfilexxx.jar -DgroupIdcom.xxx -DartifactIdxxx -Dversion1.0 -Dpackagingjar这个命令的本质是把外部jar包手动导入到本地Maven仓库之后编译时就能识别了。5.3 控制台乱码和编码问题一劳永逸的解法运行SqlRest项目时控制台输出的中文日志变成乱码这个问题我在多个同学的电脑上见过。原因很简单控制台使用的字符编码和项目的UTF-8编码不一致。解决方法有几个层面确认代码里所有文件编码为UTF-8前文提到的File Encodings设置先检查一遍。打开Idea的Help → Edit Custom VM Options在文件末尾添加一行-Dfile.encodingUTF-8重启Idea。确认启动配置里没有额外指定-Dfile.encoding参数如果有且为GBK删掉。这个配好之后基本一劳永逸后面不会再被中文乱码这类问题打断节奏。5.4 API调试返回与SQL查询结果不一致的排查这是一个特别容易踩的心态崩坏坑你在数据库客户端执行SQL返回10条数据在SqlRest里配置同样的SQL去调试却只返回了5条。大多数人第一反应是SqlRest有Bug实际上绝大多数情况是这两种原因第一SqlRest默认开启了分页逻辑你没配置关闭那么查询结果会被截断。确认你在API配置里设置了合理的分页参数或者显式关闭分页。第二SqlRest可能存在参数格式化逻辑。比如你传入的时间参数为2024-01-01SqlRest可能会把它自动转成2024-01-01 00:00:00而数据库客户端直接执行SQL时用的是字符串本身两边SQL就不一样了。这个问题很容易被忽略排查时可以对比一下控制台打印的实际执行SQL。我亲身经历的一次排查一个订单查询接口前端反馈分页数据重复了。搞了半天最后发现是SqlRest的分页片段与SQL里自带的LIMIT子句冲突了。配置里开启了SqlRest分页SQL里又写了一条LIMIT ${pageSize}两套逻辑叠加导致数据错乱。解决方案很简单去掉SQL里的LIMIT统一交给SqlRest的分页机制处理。这里也提醒大家用SqlRest时分页要么完全交给框架要么完全自己处理不要混着来。6. 几个让开发体验提升的小习惯6.1 善用Idea的HTTP Client不用来回切PostmanSqlRest接口调试不一定非要用Postman。Idea自带一个HTTP Client工具可以创建.http后缀的请求文件在里面直接写HTTP请求并发送返回结果也会显示在Idea底部的Response窗口里。我平时的做法是在项目根目录建一个api-test文件夹里面按模块建几个.http文件。比如orders.http里放订单相关接口的测试请求users.http里放用户相关接口的请求。这样好处很多——请求记录跟着项目走Git一同步整个团队都能看到接口测试用例每次改完代码直接发送请求不用切换窗口。一个简单的.http文件长这样### 查询订单列表 POST http://localhost:8080/api/order/query Content-Type: application/json { orderStatus: 1, startDate: 2024-01-01, endDate: 2024-01-31, pageSize: 20 }6.2 用多环境配置区分开发、测试、生产SqlRest项目的配置不应该只有一套至少要区分本机开发和测试环境。Spring Boot原生支持多环境配置我这边的习惯是application.yml共用的公共配置和当前激活环境标识application-dev.yml本机开发环境配置连本地数据库application-test.yml测试环境配置连测试库在application.yml里通过spring.profiles.activedev来指定当前激活哪套配置。启动时也可以加启动参数覆盖java -jar sqlrest.jar --spring.profiles.activetest这样做的核心好处是你本地调试时不会误操作到测试环境的数据。我确实见过有人因为配置混用把测试库的表结构搞坏这种低级错误花点时间把配置拆开就能预防。6.3 Git分支管理与开发隔离SqlRest项目如果多人协作Git分支管理不能随意。我建议至少维护三套分支main或master作为稳定分支、dev作为日常开发集成分支、个人功能分支从dev拉出。具体流程是从dev分支拉一个feature/xxx分支在功能分支上完成开发和自测然后合并回dev测试验证通过后再把dev合并到main发版。原则上不要直接在主分支上提交代码。这个流程看似简单实际项目中很多人坚持不下来觉得麻烦。但你只要经历过一次“合并冲突改了一下午”的教训就会明白分支规范的价值。我在团队里执行的是必须走MRMerge Request流程哪怕一个小改动也要走一遍审查。一开始大家都觉得繁琐后来依赖冲突、代码互相覆盖的问题明显变少了。写在最后环境搭好了事情才刚开始经常有同学问我SqlRest环境搭好之后下一步应该学什么。我的建议是先别急着写接口把管理后台每个页面都点一遍搞清楚API配置每个字段的含义。这个阶段花两三个小时能帮你后面省下大量来回调试的时间。我自己走过弯路就是环境搭好就开始一顿猛写SQL配接口前面还很顺利等配置多了才发现分组建乱了、参数命名没规律、SQL模板里到处是硬编码条件后期维护成本直线上升。其实这些问题都能通过前期规划避免关键就是不要贪快先把规范定下来。这个环境搭建的流程你照着一步步走理论上半天就能跑通。真遇到卡点优先看控制台日志和实际执行的SQL这两个信息源能解决80%的问题。等把SqlRest跑起来了你会发现数据服务的开发方式完全可以换一种打法——不再是一遍遍写重复代码而是把精力放在SQL质量和接口设计上。这才是SqlRest这类数据服务项目真正的价值所在。
返回列表