MapTruct рд╕рдорд╕реНрдпрд╛ рдХрдИToMany рдХреЗ рд╕рд╛рде рд╕реБрд▓рдЭрд╛рдиреЗ



рдирдорд╕реНрдХрд╛рд░ рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдЬреЛ рд▓реЛрдЧ рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рд╡рд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, "рдХрдИ рдмреВрдЯрдореЛрдиреА рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди"

рдореИрдВрдиреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рджреНрд╡рд┐рджрд┐рд╢ рд╕рдВрдмрдВрдз ManyToMany рд╣реИред рдбреАрдЯреАрдУ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рд▓реЗрдЦ рд▓реВрдкрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд▓реВрдкрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MapStruct рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрдЭрд╛рдП рдЧрдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкрд╛рдардХред

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж , рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЪреАрдЬ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред MapStruct рд▓реВрдкрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ MapStruct рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред рд╕реНрд░реЛрдд рдХреЛрдб Github рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ

рдПрдВрдЯрд┐рдЯреА рдкреАрдкрд▓ рдФрд░ рд╕реЙрдиреНрдЧрдкреНрд▓реЗрд░реНрд╕ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реЗред рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рдХрдо рд╣реЛ рдЧрдПред

@Entity public class People { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String human; //      @ManyToOne(cascade = CascadeType.ALL) private RockGroups rockGroups; //     @ManyToMany(mappedBy = "songInstrumentalist",fetch = FetchType.EAGER) private List<SongPlayers> songItems; public People(){} public People(long id, String human){ this.id = id; this.human = human; } //. . . . . } 

 @Entity public class SongPlayers { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String song; //    private String composer; //     private String poet; //    private String album; //   //     @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) private List<People> songInstrumentalist; //. . . . . } 

рд╣рдо рд▓реЛрдЧ рдФрд░ рд╕реЙрдиреНрдЧрдкреНрд▓реЗрдпрд░реНрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЗрдВрдЯрд░рдлреЗрд╕ рднреА рдмрдирд╛рддреЗ рд╣реИрдВред

 @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); } 

 @Repository public interface SongPlayersRepository extends JpaRepository<SongPlayers, Long> { List<SongPlayers> findSongPlayersBySong(String song); List<SongPlayers> findSongPlayersByComposer(String composer); List<SongPlayers> findSongPlayersByPoet(String poet); } 

рд╣рдо рд▓реЛрдЧ рдФрд░ рд╕реЙрдиреНрдЧрдкреНрд▓реЗрдпрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдбреАрдЯреАрдУ рдХреНрд▓рд╛рд╕реЗрдЬ рднреА рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдм рдЗрддрдиреА рднрд╛рд░реА рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИрдВред рдЧреЗрдЯрд░реНрд╕ рдПрдВрдб рд╕реЗрдЯрд░реНрд╕ I рд▓реЛрдЕрд░ред

 public class PeopleDTO { private long id; private String human; private RockGroups rockGroups; private List<SongPlayersDTO> songPlayersList; // . . . . . } 

 public class SongPlayersDTO { private long id; private String song; private String composer; private String poet; private String album; // . . . . . } 

рд╕реНрд░реЛрдд рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдбреАрдЯреАрдУ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдирд┐рдпрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╡рд╛рдкрд╕ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдореИрдкрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд▓реВрдкрд┐рдВрдЧ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдБ PeopleMapper рдФрд░ SongPlayersMapper рд╣реИ

 @Mapper(uses = SongPlayersMapper.class) public interface PeopleMapper { PeopleMapper PEOPLE_MAPPER = Mappers.getMapper(PeopleMapper.class); @Mapping(source = "songItems", target = "songPlayersList") PeopleDTO fromPeople(People people); } 

 @Mapper/*(uses = {PeopleMapper.class})*/ public interface SongPlayersMapper { SongPlayersMapper SONG_PLAYERS_MAPPER = Mappers.getMapper(SongPlayersMapper.class); SongPlayersDTO fromSongPlayers(SongPlayers songPlayers); @InheritInverseConfiguration SongPlayers toSongPlayers(SongPlayersDTO songPlayersDTO); } 

рд╕реЗрд╡рд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рд╕реЗрд╡рд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдбрд╛рд▓рддреЗ рд╣реИрдВ (рдореИрдВ рдЗрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджреВрдВрдЧрд╛)ред

 public interface PeopleService { List<PeopleDTO> getAllPeople(); PeopleDTO getPeopleById(long id); People addPeople(People people); void delPeople(long id); ResponseEntity<Object> updPeople(People people, long id); List<RockGroups> getByHuman(String human); List<String> getSongByHuman(String human); } 

 @Service("peopleservice") public class PeopleServiceImpl implements PeopleService { @Autowired private PeopleRepository repository; @Override public List<PeopleDTO> getAllPeople() { List<PeopleDTO> peopleDTOList = new ArrayList<>(); List<People> peopleList = repository.findAll(); for (People people : peopleList){ peopleDTOList.add(PeopleMapper.PEOPLE_MAPPER.fromPeople(people)); } return peopleDTOList; } // . . . . . } 

рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ, рд╣рдо рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рддрджрдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ (рдХреЗрд╡рд▓ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ)

 @RestController @RequestMapping("/people") public class PeopleController { @Autowired private PeopleServiceImpl service; @GetMapping("/all") public List<PeopleDTO> getAllPeople(){ return service.getAllPeople(); } // . . . . . } 

ManyToMany рд╕рдВрдмрдВрдз рдХреЗ рд▓рд┐рдП рд▓реВрдкрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рд╕реЗ, рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ DTO рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рдФрд░ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ MapStruct рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдг рднреА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдбреАрдЯреАрдУ рд╡рд░реНрдЧ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдкрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд░рд▓ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВ рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рд╣реВрдВред

рдореИрдВ рдЪрд░реНрдЪрд╛ рдореЗрдВ рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж рдХрд░рддрд╛ рд╣реВрдВред рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИред

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХрд╛ рд▓рд┐рдВрдХред

рдЧрд┐рдердм рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХред

рдкреНрд░рдпреБрдХреНрдд рд╕рд╛рд╣рд┐рддреНрдп:

  • рдлреЗрд▓рд┐рдк рдЧреБрдЯрд┐рд░реЗрдЬ рдкреНрд░реЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ
  • рдХреНрд░реЗрдЧ рд╡реЙрд▓реНрд╕ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЗрди рдПрдХреНрд╢рди 5 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг

Source: https://habr.com/ru/post/hi433270/


All Articles