A data model is the set of objects that represents the concepts in your problem domain, whose data you will want to ultimately store in a database.
For example in a music playlist application, the data model would consist of artists, albums, and tracks, and the possible relations between them.
Applying the @Entity annotation to a class with JPA declares that the class definition will correspond to a database table with a similar name.
The @Id annotation can be applied to a member of a class to designate that this member will uniquely identify the entity in the database.
@Entity@Table(name="Library")public class Book {@Idprivate Integer id;@Column(name="Title")private String Title;}
The @GeneratedValue annotation can be used with parameters alongside @Id to designate how an entity’s unique ID value will be generated. If no parameters are provided, the ID will be generated according to the default algorithm used by the underlying database.
@Entity@Table(name="TELEVISIONS")public class Television {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private Integer id;@Column(name="Brand")private String brand;}
With Spring Data JPA, the developer creates a data repository by writing a repository interface and adding custom finder methods. Spring provides the implementation automatically.
import org.springframework.data.repository.CrudRepository;import com.codecademy.people.entities.Person;public interface PersonRepository extends CrudRepository<Person, Integer> {}
With Spring Data JPA, listing repositories as properties allows them to be made available to other classes. This functionality is facilitated by the repository instance being injected into the class at runtime.
import org.springframework.web.bind.annotation.RestController;import com.codecademy.people.repositories.PersonRepository;@RestControllerpublic class PersonController {private final PersonRepository personRepository;public PersonController(final PersonRepository personRepository) {this.personRepository = personRepository;}
The save method of the CrudRepository can be used to create or update an entity in the database. It returns the newly-saved / updated entity.
@PostMapping("/people")public Person createNewPerson(@RequestBody Person person) {Person newPerson = this.personRepository.save(person);return newPerson;}
The findAll method of the CrudRepository returns an iterable collection of entities from the database.
@GetMapping("/people")public Iterable<Person> getAllPeople() {return this.personRepository.findAll();}
The delete method of the CrudRepository removes a given entity.
@DeleteMapping("/people/{id}")public Person deletePerson(@PathVariable("id") Integer id) {Optional<Person> personToDeleteOptional = this.personRepository.findById(id);if (!personToDeleteOptional.isPresent()) {return null;}Person personToDelete = personToDeleteOptional.get();this.personRepository.delete(personToDelete);return personToDelete;}
The findById method of the CrudRepository retrieves an entity by its ID.
@GetMapping("/people/{id}")public Optional<Person> getPersonById(@PathVariable("id") Integer id) {return this.personRepository.findById(id);}
Spring Boot configures an H2 console that allows developers to inspect the application’s database. The console can be accessed via the browser at the URI /h2-console.