文档章节

后端开挂:3行代码写出8个接口!

孤独的探索号
 孤独的探索号
发布于 2017/11/16 13:05
字数 1518
阅读 2.6W
收藏 10

阿里云携手百名商业领袖、技术大咖,带您一探行进中的数字新基建!>>>

肯定有不少人会想:

这怎么可能呢?

就算用几乎零配置的SpringBoot,写一个最简单的接口也得有3行代码啊!

    @RequestMapping("test/{request}")
    public String test(@PathVariable String request) {
        return request + ": Hello World";
    }

8个没啥用的Hello World接口就得24行代码了!

这还没算 拼SQL连JDBC 或者 调用ORM库 的代码呢!

更不用说还要写 XML配置 的其它库了!

 

没错,用传统方式就是这样。

获取一个用户:

base_url/get/user

获取一个用户列表:

base_url/get/user/list

获取一个评论:

base_url/get/comment

获取一个评论列表:

base_url/get/comment/list

...

仅仅是查询,一张表(对应客户端的model)就要两个接口了,

如果再加上增删改,批量改批量删,还有统计,那就得有8个接口了!

 

 

那么我是怎么解决的呢?

同一种类型的请求都只用一个接口:

增                  base_url/post

删(包括批量)       base_url/delete

改(包括批量)       base_url/put

查(包括列表)       base_url/get

统计                base_url/head

 

用最常用的查询请求举例:

获取一个用户:

base_url/get/

获取一个用户列表:

base_url/get/

获取一个评论:

base_url/get

获取一个评论列表:

base_url/get

 ...

都是用同一个接口!

 

我们用APIJSON来操作一张表,例如用户表User,代码写3行就够了:

//注册表并添加权限,用默认配置
@MethodAccess
public class User {
//内容一般仅供表字段说明及Android App开发使用,服务端不用的可不写。
}

//Verifier内添加权限
accessMap.put(User.class.getSimpleName(), getAccessMap(User.class.getAnnotation(MethodAccess.class)));

或者可以再定制下POST请求的角色权限:

@MethodAccess(
  POST = {UNKNOWN, ADMIN} //只允许未登录角色和管理员角色新增User,默认配置是 {LOGIN, ADMIN}
)
public class User {}

 

然后运行下Server工程就可以请求了:

URL:http://apijson.cn:8080/get

表单:

{
    "User": {
        "id": 82001
    }
} 

返回:

{
    "User": {
        "id": 82001,
        "sex": 0,
        "name": "Test",
        "tag": "APIJSON User",
        "head": "http://static.oschina.net/uploads/user/19/39085_50.jpg",
        "contactIdList": [
            82004,
            82021,
            70793
        ],
        "pictureList": [
            "http://common.cnblogs.com/images/icon_weibo_24.png"
        ],
        "date": "2017-02-01 19:21:50.0"
    },
    "code": 200,
    "msg": "success"
}

 

 

上面只是查了一个User,如果我们要查女性用户列表,可以这样:

URL:http://apijson.cn:8080/get

表单:

{
    "[]": { //数组
        "User": {
            "sex": 1, //性别为女
            "@column": "id,name" //只需要id,name这两个字段
        }
    }
}

返回:

{
    "[]": [
        {
            "User": {
                "id": 82002,
                "name": "Happy~"
            }
        },
        {
            "User": {
                "id": 82003,
                "name": "Wechat"
            }
        },
        {
            "User": {
                "id": 82005,
                "name": "Jan"
            }
        }
    ],
    "code": 200,
    "msg": "success"
}

 

User被多包裹了一层?给数组命名为 User[] 来去掉吧:

表单:

{
    "User[]": { //提取User
        "User": {
            "sex": 1, //性别为女
            "@column": "id,name" //只需要id,name这两个字段
        }
    }
}

返回:

{
    "User[]": [
        {
            "id": 82002,
            "name": "Happy~"
        },
        {
            "id": 82003,
            "name": "Wechat"
        },
        {
            "id": 82005,
            "name": "Jan"
        }
    ],
    "code": 200,
    "msg": "success"
}

 

还要进一步提取名字? User-name[] 满足你:

表单:

{
    "User-name[]": { //提取User.name
        "User": {
            "sex": 1, //性别为女
            "@column": "name" //只需要name这个字段
        }
    }
}

返回:

{
    "User-name[]": [
        "Happy~",
        "Wechat",
        "Jan",
        "Meria",
        "Tommy"
    ],
    "code": 200,
    "msg": "success"
}

 

 

但如果是含多张表关联的数组,就不要去掉了哦:

表单:

{
    "[]": {
        "Comment": {}, //评论
        "User": {      //发布评论的用户
            "id@": "/Comment/userId" //User.id = Comment.userId
        }
    }
}

返回:
 

{
    "[]": [
        {
            "Comment": {
                "id": 3,
                "toId": 0,
                "userId": 82002,
                "momentId": 15,
                "date": "2017-02-01 19:20:50.0",
                "content": "This is a Content...-3"
            },
            "User": {
                "id": 82002,
                "sex": 1,
                "name": "Happy~",
                "tag": "iOS",
                "head": "http://static.oschina.net/uploads/user/1174/2348263_50.png?t=1439773471000",
                "contactIdList": [
                    82005,
                    82001,
                    38710
                ],
                "pictureList": [],
                "date": "2017-02-01 19:21:50.0"
            }
        },
        {
            "Comment": {
                "id": 4,
                "toId": 0,
                "userId": 38710,
                "momentId": 470,
                "date": "2017-02-01 19:20:50.0",
                "content": "This is a Content...-4"
            },
            "User": {
                "id": 38710,
                "sex": 0,
                "name": "TommyLemon",
                "tag": "Android&Java",
                "head": "http://static.oschina.net/uploads/user/1218/2437072_100.jpg?t=1461076033000",
                "contactIdList": [
                    82003,
                    82005
                ],
                "pictureList": [
                    "http://static.oschina.net/uploads/user/1218/2437072_100.jpg?t=1461076033000",
                    "http://common.cnblogs.com/images/icon_weibo_24.png"
                ],
                "date": "2017-02-01 19:21:50.0"
            }
        }
    ],
    "code": 200,
    "msg": "success"
}

 

还有动态Moment和它的点赞用户列表:

{
    "Moment": {},
    "User[]": {
        "User": {
            "id{}@": "Moment/praiseUserIdList" //id在点赞列表praiseUserIdList内
        }
    }
}

 

类似微信个人资料界面:

{
    "User": {},
    "Moment[]": { //朋友圈照片列表
        "Moment": {
            "@order":"date-", //按发布时间date倒序排列
            "userId@": "User/id"
        }
    }
}

 

类似微信朋友圈的动态列表:

{
    "[]": {
        "count": 3, //只要3个
        "page": 2,  //要第2页的
        "Moment": {},
        "User": {
            "id@": "/Moment/userId"
        },
        "Comment[]": {
            "Comment": {
                "momentId@": "[]/Moment/id"
            }
        }
    }
} 

...

 

任意结构,任意内容,任意组合,

想要什么JSON结构、字段内容、表关联组合查询都可以完全自定义!  

"key[]":{}                                         // 查询数组

"key{}":[1,2,3]                                    // 匹配选项范围

"key{}":"<=10,length(key)>1..."                    // 匹配条件范围

"key()":"function(arg0,arg1...)"                   // 远程调用函数

"key@":"key0/key1.../targetKey"                    // 引用赋值

"key$":"%abc%"                                     // 模糊搜索

"key?":"^[0-9]+$"                                  // 正则匹配

"key+":[1]                                         // 增加/扩展

"key-":888.88                                     // 减少/去除 

"name:alias"                                      // 新建别名

"@column":"id,sex,name"                           // 返回字段

"@group":"userId"                                 // 分组方式

"@having":"max(id)>=100"                          // 聚合函数

"@order":"date-,name+"                            // 排序方式

 

 

以上都是查询请求,再试试 增删改 和 统计 :

增:  http://apijson.cn:8080/post

{
    "Comment": {
        "userId": 82001,
        "momentId": 15,
        "content": "测试新增评论"
    },
    "tag": "Comment"
}

 

删:  http://apijson.cn:8080/delete

{
    "Comment": {
        "id": 1510394480987
    },
    "tag": "Comment"
}

 

改:  http://apijson.cn:8080/put

{
    "Comment": {
        "id": 22,
        "content": "测试修改评论"
    },
    "tag": "Comment"
}

 

批量删:  http://apijson.cn:8080/delete

{
    "Comment": {
        "id{}": [1510394480987, 1510394804925]
    },
    "tag": "Comment[]"
}

 

批量改:  http://apijson.cn:8080/put

{
    "Comment": {
        "id{}": [22, 114],
        "content": "测试批量修改评论"
    },
    "tag": "Comment[]"
}

 

统计:  http://apijson.cn:8080/head

{
    "Comment": {
        "content$": "%测试%" //内容包含 测试 两个字
    }
}

 

写操作需要对应的权限,就是用3行代码配置的,请求报错:

登录后角色自动变为LOGIN(可传@role来自定义),符合Comment的POST权限配置,成功:

篇幅有限,安全机制、缓存、版本管理都有,以后会专门介绍。

  

 

回想下,代码才写了3行,就实现了包括增删改查等各种操作的8个接口以及这么多种查询!

事实上用APIJSON根本就不用自己写接口!这3行代码其实是为了做权限管理!

像个人博客、非商业的新闻资讯网站这种可以没有权限控制的,

改下全局配置,不做权限校验,那就连一行代码都不用写了!!!

 

 

APIJSON - 自动化接口和文档

 

Github源码及文档(右上角点Star支持下吧^_^

https://github.com/TommyLemon/APIJSON

下载客户端(测试服务器地址: http://apijson.cn:8080

APIJSONClientApp.apk

 

© 著作权归作者所有

孤独的探索号

孤独的探索号

粉丝 157
博文 23
码字总数 29911
作品 7
深圳
私信 提问
加载中

评论(68)

AK_诚
AK_诚
很多不愿进步的人,总喜欢怪别人走的太快,开源是为了推动大家互相学习进步,也是鞭策大家时代在进步,是时候清醒了,AI写代码已经离我们很近, 可以肯定不远的将来,只会存在初级程序员跟架构师,架构师负责设计, 初级程序员负责接手那些AI不好实现的细分业务
孤独的探索号
孤独的探索号 博主
是啊,保守落后最后就被淘汰了,机器语言 -> 汇编 -> C -> Java,EJB -> SSH -> SSM, 原生 -> JQuery -> 3大框架, MVC -> MVP -> MVVM,手动管理内存 -> 自动 GC,手工装配 -> 机器人自动装配... 历史总是惊人地相似。
孤独的探索号
孤独的探索号 博主
感谢支持 APIJSON ^_^
尚浩宇
尚浩宇
抽象之后再抽象,代码少了,灵活度增加了,但是麻烦也多了,灵活意味着复杂的适配,走rest就要遵循他的约定,该干什么就干什么,ORM无论多抽象都无所谓因为大部分时间都是你自己用,但API不行,不要祈求别人会花时间看你的代码或者文档,别人也不喜欢猜,见名知意,他会找他认为对的接口
孤独的探索号
孤独的探索号 博主
前面认同,但是后面 “不要祈求别人会花时间看你的代码或者文档”,
你把 APIJSON 换成其他 ORM 库或者 MyBatis 也是一样,都是要看代码或者文档才会用。

如果你说的“文档“ 是指调用 HTTP 接口的文档,APIJSON 项目提供的 Demo
(APIJSONBoot 基于 SpringBoot,APIJSONFinal 基于 JFinal) 也都是 HTTP 接口,
通过 JSON 传参,返回 JSON 结果,这方面并没有本质区别。

而且 APIJSON 生态内提供了 APIAuto 自动化接口管理工具,后端上传 URL 和 JSON 参数,
前端点开就知道了,哪里还需要猜呢?
如果是传统方式,不给文档也得猜啊,而且还很难准确猜到;
APIJSON 的话,大部分增删改查需求前端看协议自己都能写,都不需要猜。

自动化接口管理工具,自动生成代码、自动静态检查、自动化回归测试、自动生成文档与注释等。
http://apijson.org/auto/
尚浩宇
尚浩宇
刚看了APIJSON,立马就回我了😂
斯内克brien
斯内克brien

引用来自“孤独的探索号”的评论

引用来自“帅的冒泡美的掉渣”的评论

引用来自“孤独的探索号”的评论

引用来自“帅的冒泡美的掉渣”的评论

有没有聪明的给我简单概括一下这个东西到底是什么?我很笨,看不懂。。。如果单单想一个接口就返回各种json格式的数据,那么spring mvc的异步技术就可以实现了
后端无需再编写大量 逻辑重复但又难以抽象 的 CRUD 代码,
前端无需再等待后端 开发接口、编写文档 才能 调用接口实现功能,
spring mvc的异步技术能做到?
https://gitee.com/TommyLemon/APIJSON/wikis/Home

其实就是一个通用api接口?我还以为是什么神奇的东西,我公司一个项目有这么个东西,只是没你这么完善,前端也不喜欢用,因为终究还是得按协议来,他们还嫌麻烦呢,并且没有哪个项目的接口就是简单的增删查改,总是要有业务逻辑的,难道业务逻辑由着前端请求api的逻辑来?不现实

引用来自“孤独的探索号”的评论

除了简单的增删改查,还支持复杂的查询。
APIJSON Server 不生成任何静态代码,只生成动态的 SQL 语句,
前端改了 JSON 参数,后端就生成新的 SQL 语句, 满足新的需求,
不需要后端写任何代码来实现上面的说 模糊搜索、分组排序 等,
还有自动化 JOIN 也不需要后端写代码:
```js
{
"[]": {
"count": 10, // LIMIT 10
"join": "

引用来自“孤独的探索号”的评论

以上 JSON 会导致在评论里显示不全。

APIJSONLibrary 生成
```sql
SELECT `Comment`.*, `User`.`id`, `User`.`name` FROM `sys`.`Comment` AS `Comment` WHERE `Comment`.`content` REGEXP 'a'
LEFT JOIN (SELECT `id`, `name` FROM `sys`.`apijson_user`) AS `User` ON `User`.`id` = `Comment`.`userId`
GROUP BY `Comment`.`momentId` ORDER BY `Comment`.`date` ASC LIMIT 10 OFFSET 0
```
业务逻辑一部分可以直接通过 APIJSON 协议来实现,和以前写在 SQL 里的业务逻辑一样。
另一部分可以通过远程函数来扩展,后端拿到请求参数或查询结果,想怎么 校验参数、修改数据或结构 都行。
https://github.com/TommyLemon/APIJSON/blob/master/Document.md#3.2

你这两个评论说明你根本没有实践依据,可能连文档都没认真看,先了解清楚再说吧
https://github.com/TommyLemon/APIJSON

我明白你这项目能干嘛,也很厉害。我说的我们项目的那通用api,是增删查改对应的四个通用api,那项目是配置化的,不需要开发人员就能配出简单的项目,对数据库有整理,所以有做通用api的基础,并做了四个通用api,也能按照协议来模糊查询什么的,只是仅此而已,没有你这么多的功能。。你说我没这个项目的实践,那是肯定的,我只看了你的这个文章和文档。我只是说说我的感受而已,我大概也不会去实践一下你的项目,因为我个人对我们公司的那个项目就不喜欢了,我不是针对你,谢谢
孤独的探索号
孤独的探索号 博主

引用来自“帅的冒泡美的掉渣”的评论

引用来自“孤独的探索号”的评论

引用来自“帅的冒泡美的掉渣”的评论

有没有聪明的给我简单概括一下这个东西到底是什么?我很笨,看不懂。。。如果单单想一个接口就返回各种json格式的数据,那么spring mvc的异步技术就可以实现了
后端无需再编写大量 逻辑重复但又难以抽象 的 CRUD 代码,
前端无需再等待后端 开发接口、编写文档 才能 调用接口实现功能,
spring mvc的异步技术能做到?
https://gitee.com/TommyLemon/APIJSON/wikis/Home

其实就是一个通用api接口?我还以为是什么神奇的东西,我公司一个项目有这么个东西,只是没你这么完善,前端也不喜欢用,因为终究还是得按协议来,他们还嫌麻烦呢,并且没有哪个项目的接口就是简单的增删查改,总是要有业务逻辑的,难道业务逻辑由着前端请求api的逻辑来?不现实

引用来自“孤独的探索号”的评论

除了简单的增删改查,还支持复杂的查询。
APIJSON Server 不生成任何静态代码,只生成动态的 SQL 语句,
前端改了 JSON 参数,后端就生成新的 SQL 语句, 满足新的需求,
不需要后端写任何代码来实现上面的说 模糊搜索、分组排序 等,
还有自动化 JOIN 也不需要后端写代码:
```js
{
"[]": {
"count": 10, // LIMIT 10
"join": "

引用来自“孤独的探索号”的评论

以上 JSON 会导致在评论里显示不全。

APIJSONLibrary 生成
```sql
SELECT `Comment`.*, `User`.`id`, `User`.`name` FROM `sys`.`Comment` AS `Comment` WHERE `Comment`.`content` REGEXP 'a'
LEFT JOIN (SELECT `id`, `name` FROM `sys`.`apijson_user`) AS `User` ON `User`.`id` = `Comment`.`userId`
GROUP BY `Comment`.`momentId` ORDER BY `Comment`.`date` ASC LIMIT 10 OFFSET 0
```
业务逻辑一部分可以直接通过 APIJSON 协议来实现,和以前写在 SQL 里的业务逻辑一样。
另一部分可以通过远程函数来扩展,后端拿到请求参数或查询结果,想怎么 校验参数、修改数据或结构 都行。
https://github.com/TommyLemon/APIJSON/blob/master/Document.md#3.2

你这两个评论说明你根本没有实践依据,可能连文档都没认真看,先了解清楚再说吧
https://github.com/TommyLemon/APIJSON
孤独的探索号
孤独的探索号 博主

引用来自“帅的冒泡美的掉渣”的评论

引用来自“孤独的探索号”的评论

引用来自“帅的冒泡美的掉渣”的评论

有没有聪明的给我简单概括一下这个东西到底是什么?我很笨,看不懂。。。如果单单想一个接口就返回各种json格式的数据,那么spring mvc的异步技术就可以实现了
后端无需再编写大量 逻辑重复但又难以抽象 的 CRUD 代码,
前端无需再等待后端 开发接口、编写文档 才能 调用接口实现功能,
spring mvc的异步技术能做到?
https://gitee.com/TommyLemon/APIJSON/wikis/Home

其实就是一个通用api接口?我还以为是什么神奇的东西,我公司一个项目有这么个东西,只是没你这么完善,前端也不喜欢用,因为终究还是得按协议来,他们还嫌麻烦呢,并且没有哪个项目的接口就是简单的增删查改,总是要有业务逻辑的,难道业务逻辑由着前端请求api的逻辑来?不现实

引用来自“孤独的探索号”的评论

除了简单的增删改查,还支持复杂的查询。
APIJSON Server 不生成任何静态代码,只生成动态的 SQL 语句,
前端改了 JSON 参数,后端就生成新的 SQL 语句, 满足新的需求,
不需要后端写任何代码来实现上面的说 模糊搜索、分组排序 等,
还有自动化 JOIN 也不需要后端写代码:
```js
{
"[]": {
"count": 10, // LIMIT 10
"join": "
以上 JSON 会导致在评论里显示不全。

APIJSONLibrary 生成
```sql
SELECT `Comment`.*, `User`.`id`, `User`.`name` FROM `sys`.`Comment` AS `Comment` WHERE `Comment`.`content` REGEXP 'a'
LEFT JOIN (SELECT `id`, `name` FROM `sys`.`apijson_user`) AS `User` ON `User`.`id` = `Comment`.`userId`
GROUP BY `Comment`.`momentId` ORDER BY `Comment`.`date` ASC LIMIT 10 OFFSET 0
```
孤独的探索号
孤独的探索号 博主

引用来自“帅的冒泡美的掉渣”的评论

引用来自“孤独的探索号”的评论

引用来自“帅的冒泡美的掉渣”的评论

有没有聪明的给我简单概括一下这个东西到底是什么?我很笨,看不懂。。。如果单单想一个接口就返回各种json格式的数据,那么spring mvc的异步技术就可以实现了
后端无需再编写大量 逻辑重复但又难以抽象 的 CRUD 代码,
前端无需再等待后端 开发接口、编写文档 才能 调用接口实现功能,
spring mvc的异步技术能做到?
https://gitee.com/TommyLemon/APIJSON/wikis/Home

其实就是一个通用api接口?我还以为是什么神奇的东西,我公司一个项目有这么个东西,只是没你这么完善,前端也不喜欢用,因为终究还是得按协议来,他们还嫌麻烦呢,并且没有哪个项目的接口就是简单的增删查改,总是要有业务逻辑的,难道业务逻辑由着前端请求api的逻辑来?不现实
除了简单的增删改查,还支持复杂的查询。
APIJSON Server 不生成任何静态代码,只生成动态的 SQL 语句,
前端改了 JSON 参数,后端就生成新的 SQL 语句, 满足新的需求,
不需要后端写任何代码来实现上面的说 模糊搜索、分组排序 等,
还有自动化 JOIN 也不需要后端写代码:
```js
{
"[]": {
"count": 10, // LIMIT 10
"join": "
斯内克brien
斯内克brien

引用来自“孤独的探索号”的评论

引用来自“帅的冒泡美的掉渣”的评论

有没有聪明的给我简单概括一下这个东西到底是什么?我很笨,看不懂。。。如果单单想一个接口就返回各种json格式的数据,那么spring mvc的异步技术就可以实现了
后端无需再编写大量 逻辑重复但又难以抽象 的 CRUD 代码,
前端无需再等待后端 开发接口、编写文档 才能 调用接口实现功能,
spring mvc的异步技术能做到?
https://gitee.com/TommyLemon/APIJSON/wikis/Home

其实就是一个通用api接口?我还以为是什么神奇的东西,我公司一个项目有这么个东西,只是没你这么完善,前端也不喜欢用,因为终究还是得按协议来,他们还嫌麻烦呢,并且没有哪个项目的接口就是简单的增删查改,总是要有业务逻辑的,难道业务逻辑由着前端请求api的逻辑来?不现实
孤独的探索号
孤独的探索号 博主
已经有热心的开发者实现了 Python 版的 APIJSON,
经测试,除了基本的查询(分页、排序等),还实现了自动化的权限控制。
最近作者又新增了自动化 API post。

创作不易,给作者点 ⭐Star 支持下吧^_^
https://github.com/zhangchunlin/uliweb-apijson
孤独的探索号
孤独的探索号 博主

引用来自“rz”的评论

让我想起了GraphQL
完爆 Facebook 出的 GraphQL。
https://juejin.im/post/5ae80edd51882567277433cf
孤独的探索号
孤独的探索号 博主

引用来自“帅的冒泡美的掉渣”的评论

有没有聪明的给我简单概括一下这个东西到底是什么?我很笨,看不懂。。。如果单单想一个接口就返回各种json格式的数据,那么spring mvc的异步技术就可以实现了
后端无需再编写大量 逻辑重复但又难以抽象 的 CRUD 代码,
前端无需再等待后端 开发接口、编写文档 才能 调用接口实现功能,
spring mvc的异步技术能做到?
https://gitee.com/TommyLemon/APIJSON/wikis/Home
自动生成API和文档 - APIJSON

APIJSON English 通用文档 视频教程 在线工具 APIJSON是一种为API而生的JSON网络传输协议。 为 简单的增删改查、复杂的查询、简单的事务操作 提供了完全自动化的API。 能大幅降低开发和沟通成...

孤独的探索号
2016/12/08
1.9W
31
uliweb_apijson 0.1.2 发布,自动化接口和文档 Python 实现

uliweb_apijson 0.1.1-0.1.2 更新内容: 新增自动化权限管理,支持 UNKNOWN, LOGIN, OWNER, ADMIN 4 种角色; 新增自动化数据和结构校验,支持 ADD, DISALLOW, NECESSARY 3 中操作方法; 新增...

孤独的探索号
2019/08/14
1.6K
0
vue vue-router vuex element-ui axios的学习笔记(十八)写后台页面admin,login

先写后台页面的原因是我需要先添加商品,然后才好在前端测试 1、先把后端的主页大体写出来,主要是后端路由部分 admin.vue 测试一下 1.gif 路由切换没有问题 2、管理员登录页面 adminlogin.v...

思吾谓何思
2018/01/03
0
0
FEBS-Cloud 发布 2.0-RELEASE,Spring Cloud 微服务权限系统

更新内容 完善使用教程和二次开发教程,让您更容易上手; 集成K8S集群部署; starter封装常用模块,通过几行配置开箱即用; 完善代码生成,加入分布式任务调度,分布式事务; 整合Knife4J,几...

mrbird
04/19
2.4K
4
我是怎么写出eos的(RPC印象)

1 引言 在eos中,一般我们都有client和server两个应用,server端写了服务PersonService,在client中直接可以调用,上代码: PersonService service = com.sunsharing.eos.client.ServiceCon...

ulyn
2015/12/01
555
0

没有更多内容

加载失败,请刷新页面

加载更多

Portworx on OpenShift 原理讲解视频

Portworx on RedHat OpenShift https://v.qq.com/x/page/g0975mnzln0.html 欢迎回到Portworx技术讲解系列视频。我们今天介绍红帽Openshift上的Portworx。我们讨论基本的OpenShift部署,包括本...

Portworx
24分钟前
18
0
type_traits类型特征萃取

type_traits库提供一组特征(traits)类——元函数,可以在编译期确定类型是否具有某些特征。 根据返回类型type_traits库里的元函数可以分为以下两大类: 检查元数据属性的值元函数:以::val...

零落年华
29分钟前
17
0
3 年经验的 Java 后端妹子,横扫阿里、滴滴、美团,整理出这份厚厚的 8000 字面经!

自序 这次面试的公司有一点点多,主要是因为毕业后前两份工作找的都很草率,这次换工作就想着,emm,毕业三年了,该找个工作好好沉淀几年了。 先说下这次面试的结果吧: 到 hr 面的:阿里、美...

码农突围
34分钟前
15
0
Oracle中关于视图-序列-同义词-索引的详解

一.视图 1.什么是视图 简单来说 视图就是一个虚拟表,实体表的映射 什么时候使用视图 在开发中,有一些表结构是不希望过多的人去接触,就把实体表映射为一个视图。(表结构简化) 在项目过程...

煌sir
36分钟前
18
0
lodash之_.chunk _.compact _.concat方法

注:前提引入lodash.min.js 1、_.chunk _.chunk(array, [size=1]) chunk:英文释义:厚块; 厚片; 大块; 相当大的量; 话语组成部分; 组块; 功能:将数组(array)拆分成多个size长度的区块,...

一生懸命吧
48分钟前
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部