我需要一个具有5个列,DSC,语音,startDate,endDate,标志的DTO。
来自NatureEntity的desc,来自VoiceEntity的声音,来自QwertyEntity的其他三个
我不知道如何在同一JSON中检索此信息。
自然实体
@Data
@EqualsAndHashCode(callSuper=false)
@NoArgsConstructor
@Entity
@Table(name="NATURE")
public class NatureEntity {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="SEQ_NATURE", unique=true, nullable=false, precision=15)
private Long seqNature;
@Column(name="DESC", nullable=false, length=150)
private String desc;
@OneToMany(mappedBy="fkNature")
private List<VoiceEntity> VoiceAssociations;
}
语音实体
@Data
@EqualsAndHashCode(callSuper=false)
@NoArgsConstructor
@Entity
@Table(name="VOICE")
public class VoiceEntity {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="SEQ_VOICE", unique=true, nullable=false, precision=15)
private Long seqVoice;
@Column(name="VOICE", nullable=false, length=255)
private String voice;
@ManyToOne
@JoinColumn(name="FK_NATURE", nullable=false)
private NatureEntity fkNature;
@OneToMany(mappedBy="fkVoice")
private List<QwertyEntity> qwertyAssociations;
}
QwertyEntity
@Data
@EqualsAndHashCode(callSuper=false)
@NoArgsConstructor
@Entity
@Table(name="QWERTY")
public class QwertyEntity {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="SEQ_QWERTY",unique=true, nullable=false, precision=15)
private Long seqQwerty;
@ManyToOne
@JoinColumn(name="FK_VOICE", nullable=false)
private VoiceEntity fkVoice;
@Column(name="FLAG", nullable=true, length=1)
private String flag;
@Temporal(TemporalType.DATE)
@Column(name="START_DATE", nullable=false)
private Date startDate;
@Temporal(TemporalType.DATE)
@Column(name="END_DATE", nullable=false)
private Date endDate;
}
DTO
@Data
@EqualsAndHashCode(callSuper=false)
@NoArgsConstructor
public class AbcDTO {
private String desc;
private String voice;
private Date startDate;
private Date endDate;
private String flag;
}
映射器:
来自NatureEntity的desc来自VoiceEntity的语音startDate,endDate和来自QwertyEntity的标志
@Mapper(componentModel = "spring")
public interface AbcMapper {
@Mapping(source = "desc", target = "desc")
@Mapping(source = "voice", target = "voice")
@Mapping(source = "startDate", target = "startDate")
@Mapping(source = "endDate", target = "endDate")
@Mapping(source = "flag", target = "flag")
AbcDTO from(QwertyEntity qwerty);
}
资料库
我必须使用三个可选参数创建一个查询。
@Repository
public interface QwertyEntityRepository extends JpaRepository<QwertyEntity, Long> {
@Query("SELECT q FROM QwertyEntity q WHERE (:desc is null or q.desc = :desc) and (:startDate is null"
+ " or q.startDate = :startDate) and (:endDate is null or q.endDate = :endDate)")
List <QwertyEntity> findByDescAndStartDateAndEndDate(@Param("desc") String desc, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
}
服务
@Service
public interface AbcService {
public List<AbcDTO> findByDescAndStartDateAndEndDate(String desc, Date startDate, Date endDate);
}
服务实施
@Component
public class AbcServiceImpl implements AbcService {
@Autowired
private AbcMapper abcMapper;
@Autowired
private QwertyEntityRepository qwertyEntityRepository;
@Override
@Transactional
public List<AbcDTO> findByDescAndStartDateAndEndDate(String desc, Date startDate, Date endDate) {
List<AbcDTO> dtoList = new ArrayList<>();
List<QwertyEntity> qwertyList = qwertyEntityRepository.findByDescAndStartDateAndEndDate(desc, startDate, endDate);
for(QwertyEntity qwerty : qwertyList) {
dtoList.add(abcMapper.from(qwerty);
}
return dtoList;
}
}
REST控制器
@RestController
@RequestMapping("/services")
public class AbcRestController {
@Autowired
private AbcService abcService;
@GetMapping(value = "/abc", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<AbcDTO> getAbc(@PathVariable String desc, @PathVariable Date startDate, @PathVariable Date endDate){
return abcService.findByDescAndStartDateAndEndDate(desc, endDate, endDate);
}
}
您可以将其他“实体”对象添加为映射方法的参数,例如
@Mapper(componentModel = "spring",
unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface AbcMapper {
@Mapping(source = "nature.desc", target = "desc")
@Mapping(source = "voice.voice", target = "voice")
@Mapping(source = "qwerty.startDate", target = "startDate")
@Mapping(source = "qwerty.endDate", target = "endDate")
@Mapping(source = "qwerty.flag", target = "flag")
AbcDTO from(QwertyEntity qwerty, NatureEntity nature, VoiceEntity voice);
}
* unmappedTargetPolicy = ReportingPolicy.IGNORE
排除未映射的属性
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句