日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

boot spring 怎么执行hql_spring-boot 中使用graphql的正确姿势

發布時間:2024/9/27 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 boot spring 怎么执行hql_spring-boot 中使用graphql的正确姿势 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在spring-boot中使用graphql

首先構建spring-boot項目,pom.xml文件中加入

com.graphql-java-kickstart

graphql-java-tools

5.4.0

com.graphql-java

graphql-spring-boot-starter

5.0.2

com.graphql-java

graphiql-spring-boot-starter

5.0.2

接著定義graphql的schema,在resources目錄下任意位置的*.graphqls文件都會被掃描到,作為graphql 的schema。

這里在resources下先建一個文件夾/graphql,建立schema文件

schema.graphqls

type Query {

user(nickname: String): User

users: [User]

article(title: String!): Article

}

type Mutation {

addUser(mail: String!, nickname: String!, password: String!): User

addArticle(title: String!, content: String!, authorId: String!): Article

}

type User {

id: String!

mail: String!

nickname: String!

password: String!

description: String

}

type Article {

id: String!

author: User!

title: String!

content: String!

createBy: String

thumbUp: Int

}

Resolver 和數據類

GraphQL Java Tools可以將schema中定義的類型的屬性與java對象的屬性或方法對應起來。即上面的User類型,可以使用一個類與之對應

public class User {

@Id

private String id;

private String nickname;

private String mail;

private String password;

private String description;

// 構造器,getter和setter

}

但是在Article類型中author的屬性是User,我們該如何解決呢?

這時我們可以使用一個GraphQLResolver指定某個類型的解析

@Component

public class ArticleResolver implements GraphQLResolver {

private final UserRepository userRepository;

public ArticleResolver(UserRepository userRepository) {

this.userRepository = userRepository;

}

public User author(Article article) {

return userRepository.findById(article.getAuthorId()).get();

}

}

指定Article類型的解析方式,其中標量類型可以直接從Aritcle的java類屬性中獲取,所以不必寫方法,對于author這個屬性,其類型為User,我們指定author()方法進行解析。

那么到底type Article {...}schema里面的屬性怎么解析呢?是與數據類進行映射,還是與resolver中的方法進行映射?

官網上給出了映射的優先級:

首先是resolver

method 屬性名(...)

method is屬性名(...)

method get屬性名(...)

method getField屬性名(...)

其次是Data Class(即與類型對應的java類)

method 屬性名(...)

method is屬性名(...)

method get屬性名(...)

method getField屬性名(...)

field 屬性名

所以首先在ArticleResolver中查找author的映射,找不到的屬性則一致向下找到屬性的java類的get方法/屬性本身。

另外,要給Query和Mutation至少創建一個Resolver

@Component

public class QueryResolver implements GraphQLQueryResolver {

private final UserRepository userRepository;

private final ArticleRepository articleRepository;

public QueryResolver(UserRepository userRepository, ArticleRepository articleRepository) {

this.userRepository = userRepository;

this.articleRepository = articleRepository;

}

public Article article(String title) {

return articleRepository.findArticleByTitle(title);

}

public User user(String nickname) {

return userRepository.findUserByNickname(nickname);

}

public List users() {

return userRepository.findAll();

}

}

@Component

public class MutationResolver implements GraphQLQueryResolver, GraphQLMutationResolver {

private final ArticleRepository articleRepository;

private final UserRepository userRepository;

private final BCryptPasswordEncoder encoder;

public MutationResolver(ArticleRepository articleRepository, UserRepository userRepository, BCryptPasswordEncoder encoder) {

this.articleRepository = articleRepository;

this.userRepository = userRepository;

this.encoder = encoder;

}

public User addUser(String mail, String nickname, String password) {

if(userRepository.findUserByNickname(nickname) != null){

return null;

}

return userRepository.save(User.builder()

.nickname(nickname)

.mail(mail)

.password(encoder.encode(password))

.build());

}

public Article addArticle(String title, String content, String authorId) {

if(!userRepository.findById(authorId).isPresent()){

return null;

}

return articleRepository.save(Article.builder()

.authorId(authorId)

.title(title)

.content(content)

.createBy(new Date())

.thumbUp(0)

.build());

}

}

這里使用mongodb存儲數據。

運行,在http://localhost:8080/graphiql 中進行操作

總結

以上是生活随笔為你收集整理的boot spring 怎么执行hql_spring-boot 中使用graphql的正确姿势的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩中文字幕高清 | 婷婷色中文网 | av激情在线 | 国内性视频 | 99久久久精品免费观看国产 | 嫩草嫩草嫩草嫩草嫩草 | 欧美激情久久久 | 亚洲经典av | 欧美精品在线一区二区三区 | 粉嫩av网址 | 超碰97在线资源 | av优选在线观看 | 久久99精品波多结衣一区 | 亚洲欧美日韩精品久久 | 视频成人免费 | 亚洲2022国产成人精品无码区 | 国产在线观看黄色 | 欧美一级乱黄 | 四虎国产精品免费 | 国产aⅴ激情无码久久久无码 | 97超碰免费在线观看 | aaa黄色一级片 | c逼| 色亚洲天堂 | 成人精品亚洲人成在线 | 国产精品无码成人片 | 国产综合久久久久久鬼色 | 污片免费在线观看 | 欧美一区二区三区四区在线 | 久久美女性网 | 亚洲综合色成人 | 免费日批网站 | 欧美 丝袜 自拍 制服 另类 | 99久久亚洲精品 | 91偷拍一区二区三区精品 | 色免费看 | 国产污视频在线 | 又粗又大又硬毛片免费看 | 亚洲二三区 | 国产精品亚洲二区 | 日韩人妻精品一区二区三区 | jlzzjlzz亚洲女人| 丰满人妻熟女aⅴ一区 | 国产精品一区二区小说 | 亚洲另类春色 | 17c国产精品| 男人插女人网站 | 九九热这里有精品视频 | 欧美日韩免费网站 | 国产黄| 在线看日本 | 在线看一区二区 | 操出白浆视频 | 五月天激情四射 | 精品欧美一区二区久久久 | 国产黄频 | 成人a视频在线观看 | av动漫免费观看 | 全黄毛片 | 欧洲精品无码一区二区 | 国内精品小视频 | 国产精品第七页 | 性开放视频 | 九九视频在线观看 | 最近中文字幕免费mv视频7 | 亚洲精品国产精品乱码不99 | 噼里啪啦动漫高清在线观看 | 亚洲视频 中文字幕 | 懂色一区二区三区免费观看 | av激情久久 | 一级黄色大片网站 | 成人性做爰片免费视频 | 日批在线观看视频 | 乱人伦xxxx国语对白 | 中国女人做爰视频 | 亚洲日本视频在线观看 | 国产精品久久久久久久一区探花 | 久久精品九九 | 日本精品一区二区三区四区的功能 | av在线浏览 | 波多野结衣在线观看视频 | 亚洲永久免费观看 | 边添小泬边狠狠躁视频 | 成人激情四射 | 亚洲香蕉在线观看 | 女人18毛片水真多18精品 | 久久只有这里有精品 | 伊人超碰| 国内偷拍第一页 | 黄色网免费看 | 欧美性插动态图 | 日本人做爰全过程 | 西比尔在线观看完整视频高清 | 亚洲AV永久无码国产精品国产 | 免费毛片在线 | 亚洲一级黄色片 | 日韩美女免费线视频 | 成人特级片| 在线免费观看成年人视频 |