范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

用WebFlux写个CURD是什么体验?

  今天我们继续来搞 WebFlux!
  WebFlux 最为人所诟病的是数据库的支持问题,毕竟数据是一个应用的生命,我们接触的大部分应用程序都是有数据库的,而 WebFlux 在这一方面的支持行一直比较弱,这也是大家总是吐槽它的原因。
  不过从 Spring5 开始,这一问题得到了一定程度的缓解。
  Spring 官方在 Spring5 发布了响应式 Web 框架 Spring WebFlux 之后急需能够满足异步响应的数据库交互 API,不过由于缺乏标准和驱动,Pivotal 团队开始自己研究响应式关系型数据库连接 Reactive Relational Database Connectivity,并提出了 R2DBC 规范 API 用来评估可行性并讨论数据库厂商是否有兴趣支持响应式的异步非阻塞驱动程序。最早只有 PostgreSQL 、H2、MSSQL 三家数据库厂商,不过现在 MySQL 也加入进来了,这是一个极大的利好。目前 R2DBC 的最新版本是 0.9.0.RELEASE。
  松哥在接下来的文章中将会和大家演示 R2DBC 的用法,但是今天我们还是先来看看 WebFlux+MongoDB 的用法,毕竟这是 WebFlux 较早支持的数据库之一,各种 API 都比较成熟,我们一步一步来。  1.项目创建
  方便起见,我们这里就直接创建 Spring Boot 项目,首先创建一个 Spring Boot 项目,引入 MongoDB 依赖和 WebFlux 依赖,如下:
  注意我们这里选择的 MongoDB 依赖是 Spring Data Reactive MongoDB,千万别选错了。
  项目创建完成后,我们先在 application.properties 中对 MongoDB 进行简单配置,如下(如果小伙伴们尚不熟悉 MongoDB 的操作,可以在公众号底部菜单找到松哥原创的 MongoDB 教程):  spring.data.mongodb.port=27017 spring.data.mongodb.host=127.0.0.1 spring.data.mongodb.username=madmin spring.data.mongodb.password=m123 spring.data.mongodb.database=test spring.data.mongodb.authentication-database=admin
  多说一句,在之前的 Spring Boot 视频教程中,松哥对 MongoDB 也有过介绍,感兴趣的小伙伴戳这里:Spring Boot+Vue+微人事视频教程。
  配置完 MongoDB 后,我们的准备工作就算完成了。  2.实体类与 Dao
  接下来我们需要准备一个操作的实体类,这些都是 JPA 的基本操作,松哥就不再赘述,如果小伙伴们不熟悉的话,可以公号后台回复 666 查看原创的 Spring Boot 教程,里边有涉及到,实体类如下:  @Document public class User {     @Id     private String id;     private String username;     private String address;      public String getId() {         return id;     }      public void setId(String id) {         this.id = id;     }      public String getUsername() {         return username;     }      public void setUsername(String username) {         this.username = username;     }      public String getAddress() {         return address;     }      public void setAddress(String address) {         this.address = address;     } }
  接下来我们再提供一个实体类操作的接口,如下:  @EnableMongoRepositories public interface UserDao extends ReactiveMongoRepository { }
  自定义一个空的接口继承自 ReactiveMongoRepository,里边什么都不用写,这套路就和松哥之前视频中介绍的 JPA 的用法如出一辙(毕竟都是 Spring Data 家族),所以这块就没啥好说的,不赘述。  3.测试接口
  接下来我们来看看测试接口。  3.1 添加
  首先我们来看看添加数据。  @RestController @RequestMapping("/user") public class UserController {     @Autowired     UserDao userDao;      @PostMapping("/")     public Mono addUser(@RequestBody User user) {         return userDao.save(user);     } }
  添加完成后,返回刚刚添加成功的对象。save 方法的返回值就是 Mono。
  我们来看看测试效果:
  3.2 查询
  再来看看查询效果:  @GetMapping("/") public Flux getAll() {     return userDao.findAll(); } @GetMapping(value = "/stream/all", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux streamGetAll() {     return userDao.findAll(); }
  我们提供了两个查询接口,一个就是返回 Flux,里边包含多个对象,还有一个我设置了响应的 Content-Type 为 text/event-stream,通过响应式流返回数据,具体参见【服务端推送数据,除了 WebSocket 你还能想到啥?】一文。
  我们来看看查询效果:
  可以看到两种不同的查询方式返回的数据格式也有差异。前者是以数组形式一次性返回数据,后者是以 SSE 的形式多次返回数据。  3.3 删除
  再来看看删除。
  按照 RESTful 规范,如果删除成功请求响应码就是 200,如果删除失败请求响应码就是 404,因此,我们开发出来的接口如下:  @DeleteMapping("/{id}") public Mono> deleteUser(@PathVariable String id) {     return userDao.findById(id)             .flatMap(user -> userDao.delete(user).then(Mono.just(new ResponseEntity(HttpStatus.OK))))             .defaultIfEmpty(new ResponseEntity(HttpStatus.NOT_FOUND)); }
  首先从数据库中查询出相关的数据,然后调用 flatMap,在 flatMap 中对数据进行删除处理,删除完成后,给出一个 200 的响应码,如果查询的时候没有查询到数据,就给一个 404 响应码。
  可以看到,删除成功后,响应码为 200:
  删除失败后,响应码为 404:
  3.4 修改
  再来看看修改,和前面的删除类似,先查询,再修改:  @PutMapping("/") public Mono> updateUser(@RequestBody User user) {     return userDao.findById(user.getId())             .flatMap(u -> userDao.save(user))             .map(u->new ResponseEntity(u,HttpStatus.OK))             .defaultIfEmpty(new ResponseEntity(HttpStatus.NOT_FOUND)); }
  如果修改的数据不存在的话,就会给出一个 404 响应:
  3.5 自定义查询方法
  松哥之前的 Spring Data Jpa 中讲的一些查询 API,这里同样是适用的(公号后台回复 666 获取之前的教程)。
  例如我们可以在 UserDao 中自定义一个查询方法:  @EnableMongoRepositories public interface UserDao extends ReactiveMongoRepository {     Flux findUserByUsernameContaining(String name); }
  然后添加一个接口调用该方法:  @GetMapping("/byname") public Flux getUserByName(String name) {     return userDao.findUserByUsernameContaining(name); }
  这样该接口就可以查询名字中包含某关键字的所有用户了。
  其他关于 JPA 的用法这里都是适用的,因为在之前的文章中讲过,松哥这里就不再赘述了。  4.小结
  好啦,今天我们就用 WebFlux 写了一个简单的 CURD,大家先来感受下 WebFlux 的基本用法,后面的文章将和大家分享 WebFlux 如何连接关系型数据库,敬请期待。
  原文链接:https://mp.weixin.qq.com/s/KUDS8ss6BRIkMW_wjCe_Yg

大话西游2龙兔修罗领悟终极技能赫赫神威!下面的去疾不服了哈喽!小伙伴们大家好,我是一心,很高兴和大家在这里相遇。转眼间,紧张刺激的一周又过去了,距离2022年元旦也越来越近了,这期内容,一心带大家一起回顾一下上周有哪些鸡驴事件荣登热榜吧尘埃落定,NH战队成PCL赛区希望,HS表现亮眼获赞虎牙直播绝地求生PGC全球总决赛已经进行到了比赛的最后一周,在这场全球最高规格的吃鸡赛事中,来自四大赛区世界各地的32支队伍将仅仅能决胜出最后的一个冠军队伍,残酷的赛制正如比赛的规LPL全明星成国家队预选赛!Ale有望入选!明水组合表现优异相信很多LOL玩家们都知道,在前段时间杭州亚运会组委会宣布了英雄联盟成为了2022年亚运会的正式项目,这一刻让大家觉得非常地自豪,因为这么多年过去,电子竞技已然成为了体育里一项重要传奇3怀旧,神舰玩法完美传承现在小伙伴们都知道传奇3很火,很感谢各位玩家对传奇3的支持与厚爱!传奇3开服至今,每天都会有大量的老玩家回归,从端游到手游,完美复刻,游戏画风不变,神舰跑船模式,篝火活动,经典玩法承认吧!元气森林的广撒网娱乐营销就是人傻钱多品牌观察02作者小藕编辑阿笔新消费赛道中,跑在最前面的几个,永远是最早抓住细分品类机会的那几个。以在饱受争议中逐渐被人们习惯的0糖气泡水为例元气森林的崛起,走的并非饮料行业常规操作。2016年斗罗大陆魂师对决值得推荐的4位非SSR魂师深度分析今天的攻略我们来聊一聊目前游戏中几位并不平凡的非SSR魂师,他们不仅拥有非常不俗的魂环技能,同时在队伍搭配和核心英灵辅助支持方面都有着不俗的表现,维一也是非常真心的将他们推荐给大家新斗罗评书将开场新斗罗大陆抖音奇妙夜12。16邀你相约观玲珑万象纵横千古,品文脉奇珍游戏钱坤。当评书遇上游戏,会制造怎样的奇遇?时代有斗罗,传承永不落,12月16日2000,抖音奇妙漫游夜盛典将在一声醒木声响中,震撼开启,你准备好了吗仙剑奇侠传九野剧情介绍,九野剧情故事怎么样?仙剑奇侠传在早期凭借着优秀剧情让广大玩家认识这款国产武侠IP,李逍遥赵灵儿等至今仍刻在仙剑迷们的脑海中。而后仙剑三翻拍电视剧大火,让仙剑奇侠传这个名字真正达到火到出圈。九野作为上软绅士游戏之重返单身小说式游戏剧情,内容给力又有趣大家好,我是小瑞子!今天小瑞子为大家介绍一款高质量绅士游戏,这款游戏是小作中的神作游戏,是小瑞子玩了几年绅士游戏中通关了也不舍得删的游戏,往常小瑞子玩绅士游戏玩一遍之后就会删了,但云顶之弈变异大虫子横行新版本,完美转职后,还能和九五掰手腕在云顶之弈S6,像大虫子这种坦度又高成长属性又好的强力单卡,必然会受到重视。只不过此前版本赌狗阵容太多,强行加快游戏节奏的大嘴狼人黑白魔和巨魔等,对发育型的阵容十分不友好,大虫子的活动预告寻宝奇兵辽东主题活动开启亲爱的小将军雪作须眉云作衣,辽东宝地寻灵石新一期寻宝奇兵活动将于明日上线!诸位小将军将进入辽东宝地继续寻宝,参与寻宝就有机会获得无双列传石无双星魂石无双觉醒石无双战魂石无双阵法石体
6号新赛季碎片商店大更新,消耗钻石兑换妲己新星元王者荣耀S26赛季的更新时间已经确定,将会在6号正式开启,新赛季开启的同时会有一位新英雄上架,这个英雄就是暃,目前暃已经在体验服中测试一个多月时间,不少拥有体验服的玩家都觉得暃战斗王者荣耀S26新赛季,典藏皮个性按键竟要花钱,暃伴生只换衣服相信小伙伴们都知道,王者荣耀S26新赛季很快就要开始了,之后会有不少的新变化,赶紧来看看官方都有哪些操作吧!首先就是最近被大家吐槽得比较多的按键个性皮肤。官方在新赛季即将上线四款皮万国觉醒丨四大先锋激烈碰撞,玩家自制传说装备失落之地头条快报S21036服第二赛季,285286274服对阵282280277276278服285以一敌二杀出重围,成功入驻关五,五国联盟再次携大军前来压制。286274千里奔原神巴西20余名男子Cos可莉跳舞为了更能吸引玩家的注意,当下愈来愈多的游戏都会设计出带有明显二次元风格的角色,这些角色往往着装十分清凉,令玩家们频频侧目。在原神里就有不少这样的角色,譬如罗莎莉亚甘雨之类的,被不少海贼王人气角色克尔拉新手办调皮可爱做工精良曾经在2015年推出的海贼王人气角色克尔拉手办即将复刻回归,整体设计优异,做工精良,原作角色克尔拉的气质魅力展示无疑,一起来了解下。克尔拉有着橘黄色的头发,小时候的克尔拉的头发乱蓬2022年LPL春季赛B级战队盘点WBG和BLG,莫让失望大于期望2022年LPL春季常规赛开赛时间已经确认,将于1月10日正式开赛,而在农历新年到来之前,LPL春季赛将进行两周半的比赛,并且没有一个休赛日,这对于想要在春季赛取得好成绩的战队来说原神外观调整系遭举报?网曝玩家不满暴露,将继续举报申鹤甘雨在2。4版本更新之际,官方放出了一个特别的公告消息,那就是几位女角色的服装外观将会调整。原因似乎是涉及到审核问题,所以临时对琴莫娜安柏罗莎莉亚等几位女角色进行了服装修改,这些修改将我在完美世界幻塔给BOSS刮痧作者李好编辑钊幻塔加油,我的原神自选五星就靠你了!最近,好友洪杰告诉我,号称年底最强开放世界游戏幻塔开放公测,为此他单独定好9点的闹钟参加公测,由于游戏太过火爆还需要排队2个小时才原神成就每日委托成就获取攻略汇总(截至2。3版本)Hello,旅行者们好本次是关于每日委托成就的总结。只有大概的总结,如果每个成就都写上具体获取方式太复杂了(有些成就几十个字讲不完的,或者不好让人理解),具体成就的获得方式大家就自大叔的传奇,暗黑传说暗黑传说游戏技巧1。玩家摆摊可自动启动离线功能。玩家下线时摆摊可以保留宝宝2。法师有多只宝宝,可以控制单只宝宝的攻击与休息3。去比奇城找任务使者接任务可获得大量经验金币,小首饰可卖STEAM21年度大奖,跟你想象的一样吗?今天小编在STEAM官方找到一份非常有意思的资料,是由玩家投票评选出来的一份游戏榜单,这份榜单并不是游戏的排名,感觉就像是玩家的恶搞。下面就让大家一起来看看上榜的游戏都有哪些吧。首