
Artikel ini ditujukan kepada Anda, berkeliaran di kegelapan malam. Anda, yang jalurnya hanya diterangi oleh kunang-kunang kesepian. Secara umum, seorang programmer yang mempelajari Spring Boot dan hubungan ManyToMany di Hibernate.
Dia melakukan tugas uji pada tema musik abstrak: menulis layanan untuk menyimpan data tentang musisi, lagu, album, menggunakan Java, Spring, Hibernate. Bagian dari tugas adalah penciptaan kelas "Komposisi" dan "Pelaku". Komposisi dapat dilakukan oleh banyak pemain, dan pemain dapat melakukan banyak komposisi. Sikap dua arah yang umum dari ManyToMany.
Kursus Khasang mengajarkan cara menghindari permintaan istirahat di sekitar Spring menggunakan kelas DTO, tetapi Spring Boot adalah cerita yang berbeda. Di situs berbahasa Rusia saya melihat jawaban seperti "Ya, itu semua dasar," tetapi tanpa penjelasan khusus. Saya akan memberikan contoh pemecahan masalah ini. Kode lengkapnya terletak di github, tautan di bawah.
Pertama, buat Entity: People dan SongPlayers. Getters dan setters dihilangkan untuk singkatnya.
@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;
Lalu kami membuat antarmuka Repositori untuk kelas 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); }
Dan untuk kelas SongPlayers
@Repository public interface SongPlayersRepository extends JpaRepository<SongPlayers, Long> { List<SongPlayers> findSongPlayersBySong(String song); List<SongPlayers> findSongPlayersByComposer(String composer); List<SongPlayers> findSongPlayersByPoet(String poet); }
Anotasi
Repositori memperluas anotasi
Komponen , yang memungkinkan kelas yang diimplementasikan menjadi kacang dan sesuai dengan autowire.
Perpanjangan antarmuka JpaRepository memungkinkan Anda untuk melakukan operasi CRUD yang diperlukan tanpa deskripsi tambahan dan hal-hal berguna lainnya.
Sekarang Anda perlu membuat kelas DTO untuk Entity People dan SongPlayers. Di sini saya hanya akan mengutip PeopleDTO agar tidak mengacaukan artikel. Getters dan setter kembali diturunkan.
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; }
Dengan analogi, kelas SongPlayersDTO juga dibuat. Kami memilih bidang yang diperlukan untuk ditampilkan dalam jawaban sisanya.
Buat pengontrol untuk orang-orang. Perhatian, perhatikan tangan Anda!
@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()); }
Ya, katamu. Ini tidak akan berfungsi. Di mana implementasi antarmuka PeopleRepository?
Akan bekerja, kelas PeopleRepository dibuat dengan cepat! Fantastis.
Sekarang bandingkan jumlah kelas dan antarmuka yang dibuat untuk proyek yang identik pada Spring dan Spring Boot
kelas dalam proyek musim semi | kelas di boot musim semi |
---|
 |  |
---|
Saya berharap Anda semua pemrograman sukses. Menunggu komentar Anda.
Literatur bekas:
- Felipe Gutierrez Pro Spring Boot
- Craig Walls Spring beraksi edisi ke-5