Welcome to the Spring Boot GraphQL repository! 🚀 This project demonstrates how to use GraphQL with Spring Boot to build a scalable, high-performance API.
GraphQL is a query language for APIs that provides a more efficient, flexible, and powerful alternative to REST. With GraphQL, you can:
- Fetch only the data you need.
- Combine multiple resources in a single request.
- Get predictable responses from your API.
For more details, visit the GraphQL official documentation.
- Built with Spring Boot.
- Implements a GraphQL API for querying and mutating data.
- Supports in-memory H2 database for easy testing.
- Ready-to-use sample schema and queries.
- Java: Backend programming language.
- Spring Boot: Framework for building production-ready Java applications.
- GraphQL: Query language and runtime for APIs.
- H2 Database: Lightweight, in-memory database.
- Maven: Build automation tool.
Follow these instructions to set up and run the project on your local machine.
- Java 11 or higher installed.
- Maven installed.
- A code editor or IDE (e.g., IntelliJ IDEA, Eclipse).
- 
Clone the Repository: git clone https://github.com/thusithz/spring-boot-graphql.git cd spring-boot-graphql
- 
Build the Project: mvn clean install 
- 
Run the Application: mvn spring-boot:run 
- 
Access the GraphQL Playground: Open your browser and navigate to http://localhost:8080/graphql. 
type Query {
    departments: [Department]
    department(id: ID!): Department!
}
type Mutation {
    newDepartment(department: DepartmentInput!): Department
}
input DepartmentInput {
    name: String!
    organizationId: Int
}
type Department {
    id: ID!
    name: String!
    organization: Organization
    employees: [Employee]
}extend type Query {
  employees: [Employee]
  employeesWithFilter(filter: EmployeeFilter): [Employee]
  employee(id: ID!): Employee!
}
extend type Mutation {
  newEmployee(employee: EmployeeInput!): Employee
}
input EmployeeInput {
  firstName: String!
  lastName: String!
  position: String!
  salary: Int
  age: Int
  organizationId: Int!
  departmentId: Int!
}
input EmployeeFilter {
  salary: FilterField
  age: FilterField
  position: FilterField
}
input FilterField {
  operator: String!
  value: String!
}
type Employee {
  id: ID!
  firstName: String!
  lastName: String!
  position: String!
  salary: Int
  age: Int
  department: Department
  organization: Organization
}extend type Query {
    organizations: [Organization]
    organization(id: ID!): Organization!
}
extend type Mutation {
    newOrganization(organization: OrganizationInput!): Organization
}
input OrganizationInput {
    name: String!
}
type Organization {
    id: ID!
    name: String!
    employees: [Employee]
    departments: [Department]
}To fetch data, you can use the following example query:
query {
  departments {
    id
    name
    employees {
      firstName
      lastName
    }
  }
}To add new data, use this example mutation:
mutation {
  newDepartment(department: { name: "HR", organizationId: 1 }) {
    id
    name
  }
}Run tests using Maven:
mvn testContributions are welcome! Feel free to:
- Fork the repository.
- Create a new branch.
- Submit a pull request with your changes.
- Author: Thusitha Kariyawasam
- GitHub: https://github.com/thusithz
This project is licensed under the MIT License. See the LICENSE file for details.