Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save agvxov/27523ee3d4ca114ea7e5e620a7699b25 to your computer and use it in GitHub Desktop.

Select an option

Save agvxov/27523ee3d4ca114ea7e5e620a7699b25 to your computer and use it in GitHub Desktop.
{
// --- 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