栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot集成GraphQL

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot集成GraphQL

项目整体结构

实现结果
(根据用户id查询用户所发布的文章)

实现步骤

  1. 引入整个demo所需要的依赖
    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-web
        

        
        
            com.graphql-java
            graphql-spring-boot-starter
            5.0.2
        
        
            com.graphql-java
            graphql-java-tools
            5.2.4
        
        
            com.graphql-java-kickstart
            graphiql-spring-boot-starter
            8.0.0
            runtime
        
        

        
            org.projectlombok
            lombok
        

        
        
            mysql
            mysql-connector-java
        
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.14
        

        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.1
        

        
            cn.hutool
            hutool-core
            5.7.22
        

    
  1. 配置文件
server:
  port: 8080
graphql:
  servlet:
  corsEnabled: true
  mapping: /graphql
  enabled: true
  tools:
    schemaLocationPattern: schema*.graphqls

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/graphql_test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true&useAffectedRows=true&rewriteBatchedStatements=true&useSSL=false
    username: root
    password: root

  1. 新建数据库 (建了一个用户表和文章表模拟实战常见)
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `username` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '用户名',
  `real_name` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '真实名称',
  `email` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


CREATE TABLE `post` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `content` longtext COLLATE utf8_bin,
  `category` varchar(20) COLLATE utf8_bin DEFAULT NULL,
  `user_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  1. 新建实体以及相关类
@Data
@TableName("user")
public class User {

    @TableId(type = IdType.AUTO)
    private Integer id;

    private String username;

    private String realName;

    private String email;

}

@Data
@TableName("post")
public class Post {

    @TableId(type = IdType.AUTO)
    private Integer id;

    private String title;

    private String content;

    private String category;

    private int userId;

}
  1. 编写要实现的接口方法
@Service
public class UserServiceImpl extends ServiceImpl implements UserService, GraphQLQueryResolver {

    @Resource
    PostMapper postMapper;
    
    
    @Override
    public GetUserRequest getUserPostList(int id) {
        User user = this.getById(id);
        GetUserRequest request = BeanUtil.copyProperties(user, GetUserRequest.class);
        List posts = postMapper.selectList(Wrappers.lambdaQuery().eq(Post::getUserId, user.getId()));
        request.setPosts(BeanUtil.copyToList(posts, GetPostListRequest.class));
        return request;
    }

}


@Service
public class PostServiceImpl extends ServiceImpl implements PostService, GraphQLQueryResolver {

    
    @Override
    public GetPostListRequest getPostById(int id) {
        Post post = this.getById(id);
        return BeanUtil.copyProperties(post, GetPostListRequest.class);
    }

}
  1. 新建graphQL文件,每个类之间的关系以及接口方法
schema {
    query: Query,
}

type Query {
    getUserPostList(id:Int) : GetUserRequest

    getPostById(id:Int) : GetPostListRequest
}

type GetUserRequest {
    id : ID!,
    username : String,
    realName : String,
    email : String,
    posts : [GetPostListRequest], #表示这是一个数组
}

type GetPostListRequest {
    id : ID!, #表示这个字段非空
    title : String,
    content : String,
    category: String
}

7.在浏览器输入以下地址,就会出现该页面

http://127.0.0.1:8080/graphiql

点击右上角的Docs就可看到已经有的接口, 在左边输入需要查询的字段点击最上面运行图标就可以在右边空白看到结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/880762.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号