JPA查詢返回自定義對象
說明:
select後面是new + 實例化對象的全路徑,構造函數就是構建自己想要寫入該實體對象對應的屬性的值,且語法與hql寫法相同,注意不要設置@Query註解nativeQuery屬性的值,使用默認值即可;
import cn.alqingge.dto.FilingHistoryDTO;
import cn.alqingge.entity.FilingFinancialAccountingSystemEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
/**
* @author [email protected]
* @date 2020/6/15 11:29
*/
public interface FilingFinancialAccountingSystemRepository extends JpaRepository<FilingFinancialAccountingSystemEntity, String> {
/**
* 通過用戶id查詢用戶提交的歷史記錄
*
* @param userId
* @return
*/
@Query(value = "SELECT new cn.gogpay.dcb.province.taxation.dto.FilingHistoryDTO(s.name, s.startDate, s.endDate) " +
"FROM FilingFinancialAccountingSystemEntity AS s WHERE s.userId = ?1")
List<FilingHistoryDTO> findAllByUserId(String userId);
}
package cn.alqingge.dto;
import com.alibaba.fastjson.JSON;
/**
* @author [email protected]
* @date 2020/6/15 11:34
*/
public class FilingHistoryDTO {
/**
*名稱
*/
private String name;
/**
* 有效期起
*/
private String startTime;
/**
* 有效期止
*/
private String endTime;
public FilingHistoryDTO() {
}
public FilingHistoryDTO(String name, String startTime, String endTime) {
this.name = name;
this.startTime = startTime;
this.endTime = endTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}