@@ -48,7 +48,7 @@ MAVEN: 3.0+
4848
4949MySQL 5.7+ / PostgreSQL 9.5+ / Oracle 12C+ / ClickHouse 21.1+ / Presto 0.277+ / Hive 3.1.2+ / ...
5050
51- Intellij IDEA 2018+ / Eclipse Java EE IDE 4.5.1+
51+ IntelliJ IDEA 2018+ / Eclipse Java EE IDE 4.5.1+
5252
5353## B2.下载项目
5454
@@ -75,6 +75,10 @@ Eclipse 导入:
7575
7676源代码在 [ APIJSON-Master/APIJSON-Java-Server] ( https://github.com/Tencent/APIJSON ) /APIJSONORM。
7777
78+ IntelliJ IDEA 导入具体见:
79+
80+ https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server#3%E7%94%A8-intellij-idea-ultimate-%E6%88%96-eclipse-for-javaee-%E8%BF%90%E8%A1%8C%E5%90%8E%E7%AB%AF%E5%B7%A5%E7%A8%8B
81+
7882## B4.错误修改
7983
8084有可能 pom.xml 会报错,例如:
@@ -103,18 +107,18 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs
103107
104108## C.开发说明
105109
106- ### C-1.基于Mysql数据库的开发流程
110+ ### C-1.基于 MySQL 数据库的开发流程
107111
108112#### C-1-1.修改数据库链接
109113
110114如我的数据库信息是这样的
111115
112116| 数据库参数 | 值 |
113117| ---------- | ------------------- |
114- | 地址 | 192.168.71.146 :3306 |
118+ | 地址 | localhost :3306 |
115119| 用户 | root |
116- | 密码 | root |
117- | 数据库 | thea |
120+ | 密码 | apijson |
121+ | 数据库 | sys |
118122
119123那么需要在` DemoSQLConfig ` ,40-61行,改为自己数据库对应的链接
120124
@@ -158,6 +162,10 @@ https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSOND
158162
159163![ 1542345654422] ( assets/1542345654422.png )
160164
165+ MySQLWorkbench/Datagrip/Navicat 导入表具体见:
166+
167+ https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server#2%E5%AF%BC%E5%85%A5%E8%A1%A8%E6%96%87%E4%BB%B6%E5%88%B0%E6%95%B0%E6%8D%AE%E5%BA%93
168+
161169导入完成之后。我们可以把项目跑起来看下,以刚刚配置的项目,项目是否能够连上数据库。其中也有一些初始化数据,可以方便我们测试。
162170
163171### C-1-2-1.更多测试用例
@@ -399,7 +407,7 @@ https://github.com/TommyLemon/APIAuto
399407}
400408```
401409
402- 正则表达式` ^[0-9]+$ ` ,查询` content ` 为纯数字的数据,[ MySQL的正则语法] ( http://www.runoob.com/mysql/mysql-regexp.html ) 如下:
410+ 正则表达式` ^[0-9]+$ ` ,查询` content ` 为纯数字的数据,[ MySQL的正则语法] ( http://www.runoob.com/mysql/mysql-regexp.html ) 如下:
403411
404412| 模式 | 描述 |
405413| ---------- | ------------------------------------------------------------ |
@@ -442,7 +450,7 @@ https://github.com/TommyLemon/APIAuto
442450}
443451```
444452
445- 里面的` pictureList ` 和 ` praiseUserIdList ` 是数组,这种数据在Mysql数据库中是JSON数据格式的 。
453+ 里面的 ` pictureList ` 和 ` praiseUserIdList ` 是数组,这种数据在 MySQL 数据库中是 JSON 数据格式的 。
446454
447455![ 1542357146401] ( assets/1542357146401.png )
448456
@@ -465,9 +473,9 @@ https://github.com/TommyLemon/APIAuto
465473
466474结果是类似这样的,为了显示方便剔除了一些数据。
467475
468- ``` json
476+ ``` js
469477{
470- "[]" : [
478+ " []" : [ // JavaScript/TypeScript/Python 中可用 data["[]"] 来提取不符合变量名格式的 key 对应的 value,Java 等可以用 data.getJSONArray("[]") 等。
471479
472480 {
473481 " Moment" : {
@@ -526,31 +534,31 @@ https://github.com/TommyLemon/APIAuto
526534}
527535```
528536
529- 请注意,这里的` page ` 和 ` count ` 是放在` [] ` 内的属性,而不是` Moment ` 对象里。这里` count ` 表示每页的数量,` page ` 表示第几页,页数从0开始算 。
537+ 请注意,这里的 ` page ` 和 ` count ` 是放在 ` [] ` 内的属性,而不是 ` Moment ` 对象里。这里 ` count ` 表示每页的数量,` page ` 表示第几页,页数从 0 开始算 。
530538
531539也许你想看看这个请求对应的SQL语句
532540
533541``` sql
534- SELECT ` id` ,` date` ,` content` ,` praiseUserIdList` FROM ` thea ` .` Moment` LIMIT 5 OFFSET 0
542+ SELECT ` id` ,` date` ,` content` ,` praiseUserIdList` FROM ` sys ` .` Moment` LIMIT 5 OFFSET 0
535543```
536544
537- 这里` thea ` 是我自己的` schema ` 的名字,你的可能会有所不同。
545+ 这里` sys ` 是我自己的` schema ` 的名字,你的可能会有所不同。
538546
539547如果不想分页的,也提供了一套特殊的查询方式。这种查询方式有三种,请求方式类型这样
540548
541- ``` json
549+ ``` js
542550{
543551 " []" : {
544552 " Moment" : {
545553 " @column" : " id,date,content,praiseUserIdList"
546554 },
547- "query" : 2
555+ " query" : 2
548556 },
549- "total@" :" /[]/total"
557+ " total@" : " /[]/total" // key 里的 total 可改成 num 等几乎任意其它名称,还可以用 "info@": "/[]/info" 获取更详细的分页信息
550558}
551559```
552560
553- 这里因为` query ` 的值是2,所有会查询 ` Moment ` 表中所有的数据。如果是1的话,则会返回当前表的总数
561+ 这里因为 ` query ` 的值是 2,所有会同时查询 ` Moment ` 表中的数据和总数。如果是 1 的话,则只会返回当前表的总数:
554562
555563``` json
556564{"total" :59 ,"code" :200 ,"msg" :" success" }
@@ -573,7 +581,7 @@ SELECT `id`,`date`,`content`,`praiseUserIdList` FROM `thea`.`Moment` LIMIT 5 OFF
573581 "@column" :" id,date,content,praiseUserIdList" ,
574582 "praiseUserIdList<>" :38710
575583 },
576- "query" : 1
584+ "query" : 1
577585 },
578586 "total@" :" /[]/total"
579587}
@@ -603,27 +611,27 @@ SELECT `id`,`date`,`content`,`praiseUserIdList` FROM `thea`.`Moment` LIMIT 5 OFF
603611}
604612```
605613
606- ` "@order":"date-,id,content+" ` 其中,字段的前后顺序表示字段排序的优先级。` id ` 和 ` id+ ` 是等价的,默认就是升序排列。` date- ` 表示将` date ` 字段降序排列。
614+ ` "@order": "date-,id,content+" ` 其中,字段的前后顺序表示字段排序的优先级。` id ` 和 ` id+ ` 是等价的,默认就是升序排列。` date- ` 表示将 ` date ` 字段降序排列。
607615
608616##### 关联查询
609617
610618在讲解关联查询的时候,我们需要先了解下表之间的关系
611619
612- 现在有两张表USER和MOMENT ,两张表的关系是下面这样
620+ 现在有两张表 User 和 Moment ,两张表的关系是下面这样
613621
614622![ 1545468294295] ( assets/1545468294295.png )
615623
616- MOMENT表示动态,类似微信朋友圈、QQ空间的动态,每一条动态会有一个发表动态的用户USER,所以MOMENT表里会有一个USER表的外键关联
624+ MOMENT表示动态,类似微信朋友圈、QQ 空间的动态,每一条动态会有一个发表动态的用户 User,所以 Moment 表里会有一个和 User 表的外键关联:Moment.userId = User.id。
617625
618626对于这样的数据关系,我们在查询动态时,很多时候我们会连带着用户一起查处来,这样又如何操作呢
619627
620- ``` json
628+ ``` js
621629{
622630 " []" : {
623631 " Moment" : {
624632 " @column" : " id,date,userId" ,
625- "id" :12
626- },
633+ " id" : 12 // 注意 id 是主键,这个数组最多返回 1 条子项(如果 id=12 的表记录存在)
634+ },
627635 " User" : {
628636 " id@" : " /Moment/userId" ,
629637 " @column" : " id,name"
@@ -632,13 +640,13 @@ MOMENT表示动态,类似微信朋友圈、QQ空间的动态,每一条动态
632640}
633641```
634642
635- 这个请求稍微复杂点,首先我们用` [] ` 对象表示我们是想查询出一个列表,这个列表包含两个部分` Moment ` 和 ` User ` 。
643+ 这个请求稍微复杂点,首先我们用 ` [] ` 对象表示我们是想查询出一个列表,这个列表包含两个部分 ` Moment ` 和 ` User ` 。
636644
637- 其中` Moment ` 是我们想要查询的主要内容,它的写法也和一般查询数据时无异。
645+ 其中 ` Moment ` 是我们想要查询的主要内容,它的写法也和一般查询数据时无异。
638646
639- ` User ` 是与 ` Moment ` 相关联的数据,所以查询的时候我们需要用` id@ ` 来表示他们之间的关联关系
647+ ` User ` 是与 ` Moment ` 相关联的数据,所以查询的时候我们需要用 ` id@ ` 来表示他们之间的关联关系
640648
641- ` /Moment/userId ` 中,最开始的` / ` 相当于是指明了` [] ` 的位置,` /Moment ` 表示 ` [] ` 对象下的` Moemnt ` 对象,` /Moment/userId ` 表示 ` Moemnt ` 的 ` userId ` 字段是与` User ` 的 ` id ` 关联的。这是一种缺省引用路径,这里等价于完整引用路径 ` []/Moment/userId ` 。
649+ ` /Moment/userId ` 中,最开始的 ` / ` 相当于是指明了 ` [] ` 的位置,` /Moment ` 表示 ` [] ` 对象下的 ` Moemnt ` 对象,` /Moment/userId ` 表示 ` Moment ` 的 ` userId ` 字段是与 ` User ` 的 ` id ` 关联的。这是一种缺省引用路径,这里等价于完整引用路径 ` []/Moment/userId ` 。
642650
643651响应的数据:
644652
@@ -666,7 +674,7 @@ MOMENT表示动态,类似微信朋友圈、QQ空间的动态,每一条动态
666674
667675##### 分组查询
668676
669- 在了解分组查询之前,我们需要先了解下APIJSON所支持的函数
677+ 在了解分组查询之前,我们需要先了解下 APIJSON 所支持的部分常见函数:
670678
671679| 函数名 | 说明 |
672680| ------ | -------------------------- |
@@ -676,6 +684,10 @@ MOMENT表示动态,类似微信朋友圈、QQ空间的动态,每一条动态
676684| min | 统计分组下,某字段的最小值 |
677685| avg | 统计分组下,某字段的平均值 |
678686
687+ 具体见 AbstractSQLConfig 中 SQL_FUNCTION_MAP 配置的所有 SQL 函数 :
688+
689+ https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java#L286-L765
690+
679691比如,如果只是单纯的查出最大值,这样请求就可以了
680692
681693``` json
0 commit comments