{"id":15089349,"url":"https://github.com/geloodev/learning-spring-boot","last_synced_at":"2026-02-11T08:42:36.507Z","repository":{"id":182633681,"uuid":"668829549","full_name":"geloodev/learning-spring-boot","owner":"geloodev","description":"My first learning Spring Boot project, through the Amigoscode's course.","archived":false,"fork":false,"pushed_at":"2023-08-15T17:45:33.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-09T14:52:14.276Z","etag":null,"topics":["java","maven","postgres","postgresql","spring","spring-boot","yml"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/geloodev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-20T17:24:57.000Z","updated_at":"2023-07-20T17:29:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"fa3d474e-cc3b-4b1b-9bca-852c84908665","html_url":"https://github.com/geloodev/learning-spring-boot","commit_stats":{"total_commits":4,"total_committers":2,"mean_commits":2.0,"dds":0.5,"last_synced_commit":"a8a9121e96dcdacb48f5502723f37e691d150e20"},"previous_names":["geloodev/learning-spring-boot"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/geloodev/learning-spring-boot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geloodev%2Flearning-spring-boot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geloodev%2Flearning-spring-boot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geloodev%2Flearning-spring-boot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geloodev%2Flearning-spring-boot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/geloodev","download_url":"https://codeload.github.com/geloodev/learning-spring-boot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geloodev%2Flearning-spring-boot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29330203,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T06:13:03.264Z","status":"ssl_error","status_checked_at":"2026-02-11T06:12:55.843Z","response_time":97,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","maven","postgres","postgresql","spring","spring-boot","yml"],"created_at":"2024-09-25T08:45:04.170Z","updated_at":"2026-02-11T08:42:36.474Z","avatar_url":"https://github.com/geloodev.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Learning Spring Boot 🍃\n\nThis project was created to learning the basics of the Spring Boot framework while following Amigoscode’s Spring Boot for Beginners course.\n\n### Tools\n[![My Skills](https://skillicons.dev/icons?i=java,spring,docker,postgres,postman,vscode)](https://skillicons.dev)\n\n## Java Files\nThe Java files follow a simple MVC-like architecture:\n\n- **Model:** Customer.java\n- **Controller:** CustomerController.java\n- **Repository:** CustomerRepository.java\n\n### Customer.java\nAnnotations: ```@Entity``` defines the Entity Table, ```@Id``` designates the Primary Key, ```@SequenceGenerator``` creates the PK in a sequential manner, and ```@GeneratedValue``` specifies how the PK will be generated.\n\n```java\npackage com.geloodev;\n\nimport java.util.Objects;\n\nimport jakarta.persistence.Entity;\nimport jakarta.persistence.GeneratedValue;\nimport jakarta.persistence.GenerationType;\nimport jakarta.persistence.Id;\nimport jakarta.persistence.SequenceGenerator;\n\n@Entity\npublic class Customer {\n\n    @Id\n    @SequenceGenerator(\n        name = \"customer_id_sequence\",\n        sequenceName = \"customer_id_sequence\",\n        allocationSize = 1\n    )\n    @GeneratedValue(\n        strategy = GenerationType.SEQUENCE,\n        generator = \"customer_id_sequence\"\n    )\n    private Integer id;\n\n    private String name;\n    private String email;\n    private Integer age;\n\n    public Customer(Integer id, String name, String email, Integer age) {\n        this.id = id;\n        this.name = name;\n        this.email = email;\n        this.age = age;\n    }\n\n    public Customer() {}\n\n    public Integer getId() {\n        return id;\n    }\n\n    public void setId(Integer id) {\n        this.id = id;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public String getEmail() {\n        return email;\n    }\n\n    public void setEmail(String email) {\n        this.email = email;\n    }\n\n    public Integer getAge() {\n        return age;\n    }\n\n    public void setAge(Integer age) {\n        this.age = age;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (this == o) return true;\n        if (o == null || getClass() != o.getClass()) return false;\n\n        Customer customer = (Customer) o;\n        return Objects.equals(id, customer.id)  \u0026\u0026\n               Objects.equals(name, customer.name)  \u0026\u0026\n               Objects.equals(email, customer.email)  \u0026\u0026\n               Objects.equals(age, customer.age);\n    }\n\n    @Override\n    public int hashCode() {\n        return Objects.hash(id, name, email, age);\n    }\n\n    @Override\n    public String toString() {\n        return \"Customer{\" +\n               \"id=\" + id +\n               \", name='\" + name + '\\'' +\n               \", email='\" + email + '\\'' +\n               \", age=\" + age +\n               '}';\n\n    }\n}\n  ```\n\n### CustomerController.java\nAnnotations: ```@RestController``` designates the class as a REST Controller, ```@RequestMapping``` is specifies the path where functions will make HTTP Requests, ```@GetMapping``` sets the function to do GET Requests, and the same are to ```@PostMapping``` for POST Requests, ```@DeleteMapping``` for DELETE Requests and ```@PutMapping``` for PUT Requests. Additionally, ```@RequestBody``` maps the HTTP Request Body to a object, and ```@PathVariable``` handle template variables in the request URI and set then as method parameters.\n\n```java\npackage com.geloodev;\n\nimport java.util.List;\n\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\nimport org.springframework.web.bind.annotation.*;\n\n\n@RestController\n@RequestMapping(\"api/v1/customers\")\npublic class CustomerController {\n    \n    private final CustomerRepository customerRepository;\n\n    public CustomerController(CustomerRepository customerRepository) {\n        this.customerRepository = customerRepository;\n    }\n\n    @GetMapping\n    public List\u003cCustomer\u003e getCustomers() {\n        return customerRepository.findAll();\n    }\n\n    record CustomerRequest(\n        String name,\n        String email,\n        Integer age\n    ) {}\n\n    @PostMapping\n    public void addCustomer(@RequestBody CustomerRequest request) {\n        Customer customer = new Customer();\n        customer.setName(request.name());\n        customer.setEmail(request.email());\n        customer.setAge(request.age());\n        customerRepository.save(customer);\n    }\n\n    @DeleteMapping(\"/{customerId}\")\n    public void deleteCustomer(@PathVariable(\"customerId\") Integer id) {\n        customerRepository.deleteById(id);\n    }\n\n    @PutMapping(\"/{id}\")\n    public void updateCustomer(\n        @PathVariable(\"id\") Integer id,\n        @RequestBody CustomerRequest request\n    ) {\n        Customer customer = customerRepository.findById(id)\n            .orElseThrow();\n        \n        customer.setName(request.name());\n        customer.setEmail(request.email());\n        customer.setAge(request.age());\n\n        customerRepository.save(customer);\n    }\n}\n```\n\n### Customer.java\n```JpaRepository``` extends the ```CrudRepository``` and receives the domain class and the ID type that it should handle.]\n\n```java\npackage com.geloodev;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\n\npublic interface CustomerRepository extends JpaRepository\u003cCustomer, Integer\u003e {\n    \n}\n```\n\n## Other Files\n### pom.xml\nThe Maven configuration for dependencies, plugins, etc.\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cproject xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003e\n\t\u003cmodelVersion\u003e4.0.0\u003c/modelVersion\u003e\n\t\u003cparent\u003e\n\t\t\u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n\t\t\u003cartifactId\u003espring-boot-starter-parent\u003c/artifactId\u003e\n\t\t\u003cversion\u003e3.1.1\u003c/version\u003e\n\t\t\u003crelativePath/\u003e \u003c!-- lookup parent from repository --\u003e\n\t\u003c/parent\u003e\n\t\u003cgroupId\u003ecom.geloodev\u003c/groupId\u003e\n\t\u003cartifactId\u003elearning-spring-boot\u003c/artifactId\u003e\n\t\u003cversion\u003e0.0.1-SNAPSHOT\u003c/version\u003e\n\t\u003cname\u003elearning-spring-boot\u003c/name\u003e\n\t\u003cdescription\u003eDemo project for Spring Boot\u003c/description\u003e\n\t\u003cproperties\u003e\n\t\t\u003cjava.version\u003e17\u003c/java.version\u003e\n\t\u003c/properties\u003e\n\t\u003cdependencies\u003e\n\t\t\u003cdependency\u003e\n\t\t\t\u003cgroupId\u003eorg.postgresql\u003c/groupId\u003e\n\t\t\t\u003cartifactId\u003epostgresql\u003c/artifactId\u003e\n\t\t\t\u003cscope\u003eruntime\u003c/scope\u003e\n\t\t\u003c/dependency\u003e\n\t\t\u003cdependency\u003e\n\t\t\t\u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n\t\t\t\u003cartifactId\u003espring-boot-starter-data-jpa\u003c/artifactId\u003e\n\t\t\u003c/dependency\u003e\n\t\t\u003cdependency\u003e\n\t\t\t\u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n\t\t\t\u003cartifactId\u003espring-boot-starter-web\u003c/artifactId\u003e\n\t\t\u003c/dependency\u003e\n\n\t\t\u003cdependency\u003e\n\t\t\t\u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n\t\t\t\u003cartifactId\u003espring-boot-starter-test\u003c/artifactId\u003e\n\t\t\t\u003cscope\u003etest\u003c/scope\u003e\n\t\t\u003c/dependency\u003e\n\t\u003c/dependencies\u003e\n\n\t\u003cbuild\u003e\n\t\t\u003cplugins\u003e\n\t\t\t\u003cplugin\u003e\n\t\t\t\t\u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n\t\t\t\t\u003cartifactId\u003espring-boot-maven-plugin\u003c/artifactId\u003e\n\t\t\t\u003c/plugin\u003e\n\t\t\u003c/plugins\u003e\n\t\u003c/build\u003e\n\n\u003c/project\u003e\n```\n\n### docker-compose.yml\nThe Docker configuration to manage the PostgreSQL container.\n\n```yaml\nservices:\n  db:\n    container_name: first-spring-boot\n    image: postgres\n    environment:\n      POSTGRES_USER: postgres\n      POSTGRES_PASSWORD: password\n      PGDATA: /data/postgres\n    volumes:\n      - db:/data/postgres\n    ports:\n      - \"5433:5432\"\n    networks:\n      - db\n    restart: unless-stopped\n\nnetworks:\n  db:\n    driver: bridge\n\nvolumes:\n  db:\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeloodev%2Flearning-spring-boot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeloodev%2Flearning-spring-boot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeloodev%2Flearning-spring-boot/lists"}