Spring Cloud + MyBatis Plus + GraphQL 完整示例

Spring Cloud + MyBatis Plus + GraphQL 完整示例

  • 1、创建Spring Boot子项目
    • 1.1 配置POM,添加必要的依赖
    • 1.2 配置MyBatis-Plus
  • 2、集成GraphQL
    • 2.1 定义schema.graphqls
    • 2.2 添加GraphQL解析器
    • 2.3 配置schame文件配置
  • 3、访问测试
    • 3.1 查询测试(演示)
    • 3.2 添加测试(演示)
    • 3.3 修改测试(演示)
    • 3.4 删除测试(演示)

为了创建一个完整的Spring Cloud应用,结合MyBatis-Plus和GraphQL,构建一个简单的微服务项目。这个示例将包括以下几个部分:- 创建Spring Boot子项目。
- 配置MyBatis-Plus以进行数据库操作。
- 集成GraphQL以提供查询接口。
- 我们将假设有一个简单的实体类Person,并为其创建CRUD操作和GraphQL查询。

1、创建Spring Boot子项目

1.1 配置POM,添加必要的依赖

  • 首先,我们需要创建一个新的Spring Boot项目,并添加必要的依赖项。以下是Maven pom.xml配置文件的内容:
          <!--graphql--><dependency><groupId>com.graphql-java-kickstart</groupId><artifactId>graphql-spring-boot-starter</artifactId><version>11.0.0</version></dependency><dependency><groupId>com.graphql-java-kickstart</groupId><artifactId>graphiql-spring-boot-starter</artifactId><version>11.0.0</version></dependency><!--mybatisPlus&mysql--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.2.0</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.4.1</version></dependency>

1.2 配置MyBatis-Plus

  • 接下来,我们配置MyBatis-Plus来处理我们的数据访问层。首先,定义一个Person实体类:
package com.springboot.demo.domain;import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;/*** 用户表** @author water* @version 1.0.0* @date 2024-12-04 17:45*/
@Data
@TableName("demo_person")
public class Person {private Long id;private String name;private int age;}
  • 然后,创建对应的Mapper接口:
package com.springboot.demo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.springboot.demo.domain.Person;/*** @author water* @version 1.0.0* @date 2024-12-05 08:11*/
public interface PersonMapper extends BaseMapper<Person> {
}
  • 最后,在Spring Boot主类上启用MyBatis-Plus扫描器:
package com.springboot.demo;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;/*** springboot -demo** @Author: water* @Date: 2024/12/4 18:09* @Version : 1.0.0*/
@SpringBootApplication
@MapperScan("com.springboot.demo.mapper")
@EnableDiscoveryClient
@EnableFeignClients
public class SpringbootDemoApp {public static void main(String[] args) {SpringApplication.run(SpringbootDemoApp.class, args);}}
  • 同时,配置application.yml文件来设置数据库连接信息:
spring:profiles:active: clouddatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/spring-dmeo?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=falseusername: demopassword: Spring@demo24hikari:maximum-pool-size: 10minimum-idle: 1idle-timeout: 30000max-lifetime: 1800000transaction:default-timeout: 30graphql:graphiql:enabled: true#mybatis-plus
mybatis-plus:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.springboot.demo.**.domainconfiguration:map-underscore-to-camel-case: true# 默认日志输出: org.apache.ibatis.logging.slf4j.Slf4jImpl# 更详细的日志输出 会有性能损耗: org.apache.ibatis.logging.stdout.StdOutImpllog-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl #关闭日志记录 (可单纯使用 p6spy 分析)cache-enabled: falseauto-mapping-behavior: fullglobal-config:banner: falsedb-config:id-type: assign_id# 默认1删除logic-delete-value: 1# 正常0logic-not-delete-value: 0
#  日志
logging:level:com:example: debugorg:springframework:security: debugsecurity.access: debugsecurity.web: debugsecurity.web.access: debugweb: debugmanagement:endpoints:web:exposure:include: health,info

2、集成GraphQL

2.1 定义schema.graphqls

接下来,我们集成GraphQL以暴露API供客户端查询使用。首先,创建一个GraphQL schema文件schema.graphqls:
# src/main/resources/schema.graphqls
type Query {users: [Person]personById(id: ID!): Person
}type Mutation {addUser(name: String!, age: Int!): PersonupdateUser(id: ID!, name: String, age: Int): PersondeleteUser(id: ID!): Boolean
}type Person {id: ID!name: String!age: Int!
}

2.2 添加GraphQL解析器

  • 然后,为这些GraphQL查询和变更创建解析器:
package com.springboot.demo.resolver;import com.springboot.demo.domain.Person;
import com.springboot.demo.mapper.PersonMapper;
import graphql.kickstart.tools.GraphQLMutationResolver;
import graphql.kickstart.tools.GraphQLQueryResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.List;/*** GraphQL 查询创建解析器。** @author water* @version 1.0.0* @date 2024-12-05 11:29*/
@Component
public class UserQuery implements GraphQLQueryResolver, GraphQLMutationResolver {@Autowiredprivate PersonMapper personMapper;public List<Person> users() {return personMapper.selectList(null);}public Person personById(String id) {personMapper.selectById(id);return personMapper.selectById(id);}public Person addUser(String name, int age) {Person user = new Person();user.setName(name);user.setAge(age);personMapper.insert(user);return user;}public Person updateUser(Long id, String name, Integer age) {Person user = personMapper.selectById(id);if (user != null) {if (name != null) {user.setName(name);}if (age != null) {user.setAge(age);}personMapper.updateById(user);}return user;}public boolean deleteUser(Long id) {return personMapper.deleteById(id) > 0;}}

2.3 配置schame文件配置

  • 最后,配置GraphQL工具包以加载schema文件和其他相关配置:
package com.springboot.demo.config;import graphql.schema.idl.SchemaParser;
import graphql.schema.idl.TypeDefinitionRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;/*** @author water* @version 1.0.0* @date 2024-12-05 14:30*/
@Configuration
public class GraphQLConfig {@Beanpublic Resource graphQLSchemaFile() {return new ClassPathResource("schema.graphqls");}@Beanpublic TypeDefinitionRegistry typeDefinitionRegistry(Resource resource) throws Exception {SchemaParser parser = new SchemaParser();return parser.parse(resource.getInputStream());}
}

至此,我们就完成了一个整合了Spring Cloud、MyBatis-Plus和GraphQL的简单示例项目的搭建。 您可以启动应用程序并在浏览器中访问http://localhost:8080/graphiql来测试GraphQL API。
在这里插入图片描述

3、访问测试

  • 测试请求的脚本
# Welcome to GraphiQL
#
# GraphiQL is an in-browser tool for writing, validating, and
# testing GraphQL queries.
#
# Type queries into this side of the screen, and you will see intelligent
# typeaheads aware of the current GraphQL type schema and live syntax and
# validation errors highlighted within the text.
#
# GraphQL queries typically start with a "{" character. Lines that start
# with a # are ignored.
#
# An example GraphQL query might look like:
#
#     {
#       field(arg: "value") {
#         subField
#       }
#     }
#
# Keyboard shortcuts:
#
#  Prettify Query:  Shift-Ctrl-P (or press the prettify button above)
#
#     Merge Query:  Shift-Ctrl-M (or press the merge button above)
#
#       Run Query:  Ctrl-Enter (or press the play button above)
#
#   Auto Complete:  Ctrl-Space (or just start typing)
#
query select {personById(id:"1"){idnameage}}
query selectList {users{idnameage}}
mutation addUser{addUser(name:"王麻子", age:22){idnameage}
}mutation updateUser{updateUser(id:1864582448746012673,name:"钢蛋", age:31){idnameage}
}mutation updateUserById{updateUser(id:1864569571339378690,name:"赵六六"){idname}
}mutation deleteUser{deleteUser(id:1864582448746012673)
}

3.1 查询测试(演示)

  • 根据Id查询
    在这里插入图片描述
  • 查询所有
    在这里插入图片描述

3.2 添加测试(演示)

在这里插入图片描述

3.3 修改测试(演示)

在这里插入图片描述

3.4 删除测试(演示)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/484992.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL书籍推荐

《高性能MySQL&#xff08;第4版&#xff09;》-西尔维亚博特罗斯 系统层次 Mysql性能优化和高可用架构实践 2020 系统基础 MySQL性能调优与架构设计 系统基础 Mysql技术大全 2021 综合 MySQL数据库应用案例教程 综合实战 从入门到项目实践 综合实战 丰富 超值 MySQ…

MR30分布式IO模块赋能喷水织机

纺织行业作为我国传统支柱产业&#xff0c;历经数千年的演变&#xff0c;如今仍面临着诸多困境&#xff0c;在纺织行业中&#xff0c;每一次技术的飞跃都是对行业边界的勇敢探索。在纺织行业&#xff0c;喷水织机作为关键生产设备&#xff0c;其性能直接影响到产品质量和产能。…

nodejs循环导出多个word表格文档

文章目录 nodejs循环导出多个word表格文档一、文档模板编辑二、安装依赖三、创建导出工具类exportWord.js四、调用五、效果图nodejs循环导出多个word表格文档 结果案例: 一、文档模板编辑 二、安装依赖 // 实现word下载的主要依赖 npm install docxtemplater pizzip --save/…

LabVIEW中“this VI‘s owning library is missing”错误及解决

问题描述 当加载或打开一个VI时&#xff0c;如果其所属的项目库未加载到内存&#xff0c;LabVIEW将提示错误&#xff1a;“this VIs owning library is missing”&#xff08;该VI的所属库不存在&#xff09;。 该问题通常发生在以下情况下&#xff1a; 项目库文件丢失或路径…

LongVU:用于长视频语言理解的空间时间自适应压缩

晚上闲暇时间看到一种用于长视频语言理解的空间时间自适应压缩机制的研究工作LongVU&#xff0c;主要内容包括&#xff1a; 背景与挑战&#xff1a;多模态大语言模型&#xff08;MLLMs&#xff09;在视频理解和分析方面取得了进展&#xff0c;但处理长视频仍受限于LLM的上下文长…

sphinx基本使用

sphix是一个文档生成工具 本文介绍一些基础技能&#xff0c;如果想深入学习&#xff0c;可以查看官方文档 Sphinx官方文档 1.安装虚拟环境 # ubuntu # 使用 venv 创建 .venv虚拟环境 python3 -m venv .venv# 激活虚拟环境 source .venv/bin/activate# windows # 创建虚拟环境…

爬虫第四篇:Xpath 路径表达式全解析:从网页基础到爬取百度贴吧图片实战

简介&#xff1a;本文围绕 Xpath 路径表达式展开讲解&#xff0c;先是介绍了网页相关基础如 html、css、vue 以及前后端分离的概念与示例&#xff0c;包括各部分的结构、作用及简单代码展示&#xff0c;随后详细阐述了 xml 的节点关系、选取节点、谓语等理论知识&#xff0c;最…

HarmonyOS NEXT开发进阶(一):初识 HarmonyOS NEXT开发

文章目录 一、前言二、HarmonyOS NEXT 开发框架三、HarmonyOS NEXT开发指导3.1 Windows环境准备 四、项目拆解4.1 工程目录4.2 全局配置4.2.1 APP全局配置: AppScope层&#xff08;AppScope/app.json5&#xff09;4.2.3 签名全局配置 4.3 APP代码初始化4.4 APP签名文件配置4.5 …

Chrome控制台 网站性能优化指标一览

打开chrome-》f12/右键查看元素-》NetWrok/网络 ctrlF5 刷新网页&#xff0c;可以看到从输入url到页面资源请求并加载网页&#xff0c;用于查看资源加载&#xff0c;接口请求&#xff0c;评估网页、网站性能等&#xff0c;如下图&#xff1a; request、stransferred、resour…

【C++】入门【六】

本节目标 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 八、继承的总结和反思 九、笔试面试题 一、继承的概念及定义 1.继承的概念 继承是面向对象…

MacOS安装sshfs挂载远程电脑硬盘到本地

文章目录 sshfs简介sshfs安装下载安装macFUSE安装sshfs sshfs使用注意事项 sshfs简介 SSHFS&#xff08;SSH Filesystem&#xff09;是一种基于FUSE&#xff08;用户空间文件系统&#xff09;的文件系统&#xff0c;它允许你通过SSH协议挂载远程文件系统。使用SSHFS&#xff0…

亚马逊云(AWS)使用root用户登录

最近在AWS新开了服务器&#xff08;EC2&#xff09;&#xff0c;用于学习&#xff0c;遇到一个问题就是默认是用ec2-user用户登录&#xff0c;也需要密钥对。 既然是学习用的服务器&#xff0c;还是想直接用root登录&#xff0c;下面开始修改&#xff1a; 操作系统是&#xff1…

深度学习中的迁移学习:应用与实践

引言 在深度学习领域&#xff0c;迁移学习&#xff08;Transfer Learning&#xff09;是一个非常强大且日益流行的概念&#xff0c;它通过将从一个任务中学到的知识应用于另一个任务&#xff0c;能够显著加快模型训练速度并提高其泛化能力。迁移学习在许多实际应用中都得到了广…

股市复盘笔记

复盘是股市投资中非常重要的一个环节&#xff0c;它指的是投资者在股市收盘后&#xff0c;对当天的市场走势、个股表现以及自己的交易行为进行回顾和总结&#xff0c;以便更好地指导未来的投资决策。以下是对复盘的详细解释&#xff1a; 一、复盘的目的 总结市场走势&#xff…

ubuntu18.04+qt 5.12.12+安装和实验

引用 【QT | 开发环境搭建】Linux系统(Ubuntu 18.04) 安装 QT 5.12.12 开发环境 ubuntu18.04 安装qt5.12.8及环境配置 1.安装包链接 第一篇中写了 http://download.qt.io/archive/qt/5.12/5.12.12/qt-opensource-linux-x64-5.12.12.run2.安装 到下载目录下 sudo chmod ax…

【目标跟踪】AntiUAV600数据集详细介绍

AntiUAV600数据集的提出是为了适应真实场景&#xff0c;即无人机可能会随时随地出现和消失。目前提出的Anti-UAV任务都只是将其看做与跟踪其他目标一样的任务&#xff0c;没有结合现实情况考虑。 论文链接&#xff1a;https://arxiv.org/pdf/2306.15767https://arxiv.org/pdf/…

LabVIEW氢同位素单质气体定量分装系统

氢同位素单质气体在多个行业中有重要应用&#xff0c;如能源和化工。传统的分装方法面临精度和自动化程度不足的问题。为此&#xff0c;开发了一套基于LabVIEW和质量流量控制器的定量分装系统&#xff0c;提高分装精度和效率&#xff0c;同时减少资源浪费和环境污染。 项目背景…

使用Oracle通过gateway连接MSSQL

环境概述 某医院的his系统Oracle数据库要和体检系统进行数据通讯&#xff0c;需要从Oracle能查到sqlserver的数据。本次通过Oracle gateway来解决此问题。 HIS服务器&#xff1a;windows server 2016数据库oracle11.2.0.4&#xff0c;假设IP是192.168.100.9 体检服务器&…

跑一下pyapp

文档&#xff1a;How-to - PyApp 首先没有rust要安装 安装 Rust - Rust 程序设计语言 查看是否安装成功 然后clone下pyapp https://github.com/ofek/pyapp/releases/latest/download/source.zip -OutFile pyapp-source.zip 进入目录中&#xff0c;cmd&#xff0c;设置环境…

Vue网页屏保

Vue网页屏保 在vue项目中&#xff0c;如果项目长时间未操作需要弹出屏幕保护程序&#xff0c;以下为网页屏保效果&#xff0c;看板内容为连接的资源。 屏保组件 <template><div v-if"isActive" class"screensaver" click"disableScreens…