
El artículo está dirigido a ti, vagando en la oscuridad de la noche. Tú, cuyo camino está iluminado solo por luciérnagas solitarias. En general, un programador que estudia Spring Boot y la relación ManyToMany en Hibernate.
Hizo una tarea de prueba sobre un tema musical abstracto: escribir un servicio para almacenar datos sobre músicos, canciones, álbumes, utilizando Java, Spring, Hibernate. Parte de la tarea fue la creación de las clases "Composiciones" y "Intérpretes". Muchos artistas pueden realizar una composición, y un artista intérprete o ejecutante puede realizar muchas composiciones. Actitud bidireccional típica de ManyToMany.
Los cursos de Khasang enseñaron cómo evitar las solicitudes de descanso recorriendo Spring usando una clase DTO, pero Spring Boot es una historia diferente. En los sitios en idioma ruso vi respuestas como "Sí, todo es elemental", pero sin explicaciones específicas. Daré un ejemplo para resolver este problema. El código completo se encuentra en el github, enlace a continuación.
Primero, crea Entity: People y SongPlayers. Se omiten getters y setters por brevedad.
@Entity public class People { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String human;
@Entity public class SongPlayers { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String song;
Luego creamos interfaces de repositorio para la clase People.
@Repository public interface PeopleRepository extends JpaRepository<People, Long> { @Query("select h from People h where h.human=?1") List<People> searchByHuman(String human); List<People> findPeopleByHuman(String human); }
Y para la clase SongPlayers
@Repository public interface SongPlayersRepository extends JpaRepository<SongPlayers, Long> { List<SongPlayers> findSongPlayersBySong(String song); List<SongPlayers> findSongPlayersByComposer(String composer); List<SongPlayers> findSongPlayersByPoet(String poet); }
La anotación del
repositorio extiende la anotación de
componentes , lo que permite que la clase implementada sea un bean y, en consecuencia, un autowire.
La extensión de la interfaz JpaRepository le permite realizar las operaciones CRUD necesarias sin una descripción adicional y otras cosas útiles.
Ahora necesita crear clases DTO para Entity People y SongPlayers. Aquí citaré solo PeopleDTO para no saturar el artículo. Getters y setters nuevamente bajados.
public class PeopleDTO { private long id; private String human; private RockGroups rockGroups; private List<SongPlayersDTO> songPlayersList; public List<PeopleDTO> getPeopleDTOList(List<People> peopleList){ List<PeopleDTO> peopleDTOList = new ArrayList<>(); for (People people : peopleList){ songPlayersList = new ArrayList<>(); PeopleDTO peopleDTO = new PeopleDTO(); peopleDTO.setId(people.getId()); peopleDTO.setHuman(people.getHuman()); peopleDTO.setRockGroups(people.getRockGroups()); for (SongPlayers songPlayers : people.getSongItems()){ SongPlayersDTO songPlayersDTO = new SongPlayersDTO(); songPlayersDTO.setId(songPlayers.getId()); songPlayersDTO.setSong(songPlayers.getSong()); songPlayersDTO.setPoet(songPlayers.getPoet()); songPlayersDTO.setComposer(songPlayers.getComposer()); songPlayersDTO.setAlbum(songPlayers.getAlbum()); songPlayersList.add(songPlayersDTO); } peopleDTO.setSongPlayersList(songPlayersList); peopleDTOList.add(peopleDTO); } return peopleDTOList; }
Por analogía, también se crea la clase SongPlayersDTO. Seleccionamos los campos necesarios para mostrar en la respuesta del resto.
Crea un controlador para las personas. ¡Atención, cuídate las manos!
@RestController @RequestMapping("/people") public class PeopleController { @Autowired private PeopleRepository repository; @GetMapping("/all") public List<PeopleDTO> getAllPeople(){ PeopleDTO peopleDTO = new PeopleDTO(); return peopleDTO.getPeopleDTOList(repository.findAll()); }
Si, tu dices. Esto no va a funcionar. ¿Dónde está la implementación de la interfaz PeopleRepository?
¡Funcionará, la clase PeopleRepository se crea sobre la marcha! Simplemente fantástico
Ahora compare el número de clases e interfaces creadas para un proyecto idéntico en Spring y Spring Boot
clases en un proyecto de primavera | clases en bota de primavera |
---|
 |  |
---|
Les deseo a todos una programación exitosa. Esperando sus comentarios.
Literatura utilizada:
- Bota de primavera Felipe Gutiérrez Pro
- Craig Walls Spring en acción 5ª edición