Created
January 29, 2025 13:09
-
-
Save agvxov/27523ee3d4ca114ea7e5e620a7699b25 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| // --- AnimalRepository.java --- | |
| /* By using the Farm package here, | |
| * we make the contents of | |
| * FarmApplication.java visible | |
| */ | |
| package com.example.Farm; | |
| import org.springframework.data.jpa.repository.JpaRepository; | |
| public interface AnimalRepository extends JpaRepository<FarmApplication.Animal, Long> {} | |
| // --- FarmApplication.java --- | |
| /* By using the Farm package here, | |
| * we make the contents of | |
| * AnimalRepository.java visible | |
| */ | |
| package com.example.Farm; | |
| import java.util.List; | |
| import jakarta.persistence.*; | |
| import org.springframework.boot.*; | |
| import org.springframework.boot.autoconfigure.SpringBootApplication; | |
| import org.springframework.context.annotation.*; | |
| import org.springframework.web.bind.annotation.*; | |
| /* Signals spring to perform component scanning. | |
| */ | |
| @SpringBootApplication | |
| public | |
| class FarmApplication { | |
| /* We mark Animal as and @Entity to signal to JTA that | |
| * we wish to abstarct this class as a database table. | |
| */ | |
| @Entity | |
| /* We declare Animal nested only for simplicity. | |
| */ | |
| public static | |
| class Animal { | |
| /* We mark id as the primary key for our table. | |
| * It could be further used by our program for querying, etc. | |
| */ | |
| @Id | |
| @GeneratedValue(strategy = GenerationType.IDENTITY) | |
| Long id; | |
| // - Public | |
| // will be visible by (API) queries | |
| public String name; | |
| // - Private | |
| // will NOT be visible by (API) queries | |
| private int weight; | |
| // - Private \w Getter | |
| // will be visible by (API) queries | |
| private int age; | |
| public int getAge(){ | |
| return this.age; | |
| } | |
| /* Constructor to be used only by US later on. | |
| */ | |
| Animal(String name, int age, int weight) { | |
| this.name = name; | |
| this.age = age; | |
| this.weight = weight; | |
| } | |
| /* Default constuctor required by @Entity | |
| * since we have another constuctor, | |
| * we have to specify it explicitly. | |
| */ | |
| Animal() { ; } | |
| } | |
| /* Marking cmdlr as @Bean makes it managed by spring. | |
| * In this case it means that it will be called on start up. | |
| */ | |
| @Bean | |
| public | |
| /* Spring expects a | |
| * CommandLineRunner Spring will pass the othetwise | |
| * instance for start private "global" repository | |
| * up configurations instance for us | |
| * | | | |
| * V V */ | |
| CommandLineRunner cmdlr(AnimalRepository repository) { | |
| return (args) -> { | |
| repository.save(new Animal("Bob", 3, 10)); | |
| }; | |
| } | |
| /* Marking this class as a @RestController makes spring scan it | |
| * for @*Mapping-s. | |
| * Otherwise they would be ignored. | |
| */ | |
| @RestController | |
| static | |
| class Controller { | |
| /* Internal copy of the global repository instance. | |
| */ | |
| private final | |
| AnimalRepository repository; | |
| Controller(AnimalRepository repository) { | |
| this.repository = repository; | |
| } | |
| /* Associate the calling of this function | |
| * with GET requests arriving to :URL:/hello | |
| */ | |
| @GetMapping("/hello") | |
| /* Making the return type List<Animal> will | |
| * result in a JSON of N auto serialized | |
| * Animal instances | |
| */ | |
| List<Animal> say_hello(){ | |
| return repository.findAll(); // findAll is inherited by AnimalRepository | |
| } | |
| } | |
| /* Finally, launch or spring application at once. | |
| * As we insstantiate SpringApplication and there by the spring eco-system, | |
| * we trigger its commandline, Inversion of Control, Database and web service | |
| * features in the process. | |
| */ | |
| public static | |
| void main(String[] args) { | |
| SpringApplication.run(FarmApplication.class, args); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment