
这篇文章是给你写的,在夜色中徘徊。 您,只有孤独的萤火虫照亮您的道路。 通常,是一名研究Hibernate中的Spring Boot和ManyToMany关系的程序员。
他做了一个抽象音乐主题的测试任务:使用Java,Spring,Hibernate编写了一项服务,用于存储有关音乐家,歌曲,专辑的数据。 任务的一部分是创建“组合”和“表演者”类。 构图可以由许多表演者执行,并且表演者可以执行许多构图。 ManyToMany的典型双向态度。
Khasang课程讲授了如何避免使用DTO类在Spring周围产生休息请求,但是Spring Boot则是另一回事。 在俄语网站上,我看到诸如“是的,这都是基本知识”之类的答案,但没有具体解释。 我将举一个解决这个问题的例子。 完整的代码位于github,下面的链接。
首先,创建实体:People和SongPlayers。 为了简洁起见,省略了获取器和设置器。
@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;
然后,我们为People类创建Repository接口。
@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); }
对于SongPlayers类
@Repository public interface SongPlayersRepository extends JpaRepository<SongPlayers, Long> { List<SongPlayers> findSongPlayersBySong(String song); List<SongPlayers> findSongPlayersByComposer(String composer); List<SongPlayers> findSongPlayersByPoet(String poet); }
Repository批注扩展了
Component批注,该批注允许实现的类成为bean,并因此自动装配。
JpaRepository接口的扩展使您可以执行必要的CRUD操作,而无需进行其他描述和其他有用的操作。
现在,您需要为Entity People和SongPlayers创建DTO类。 在这里,我仅引用PeopleDTO,以免使文章混乱。 吸气剂和二传手再次降低。
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; }
以此类推,还创建了SongPlayersDTO类。 我们选择必要的字段以显示在其余答案中。
为人员创建一个控制器。 注意,注意双手!
@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()); }
是的,你说。 这是行不通的。 PeopleRepository接口的实现在哪里?
将起作用,PeopleRepository类是动态创建的! 太棒了。
现在比较在Spring和Spring Boot上为相同项目创建的类和接口的数量
春季项目中的课程 | 春季靴类 |
---|
 |  |
---|
祝大家编程成功。 等待您的评论。
二手文献:
- Felipe Gutierrez Pro春季靴子
- Craig Walls Spring in Action第5版