JPQL语句查询出来的数据如何直接用DTO去接

3 篇文章 0 订阅
2 篇文章 0 订阅

1.JPQL语句这样写的:

@Repository
public interface IEntitlementRelevantEntitlementViewRepository extends JpaRepository<RelevantEntitlementView, String>
{


    /**
     * 
     * Title: findRelevantEntitlementViewByEntlGuid Description: through entitlement guid getting
     * RelevantEntitlementViews
     * 
     * @param entitlementGuid
     * @return List<RelevantEntitlementView>
     */
    @Query(value = "select  new com.sap.csc.ems.admin.model.dto.entitlement.repository.RelevantEntlViewResponseDto(T.entitlementNo, T.entitlementType, T.sourceDocNo, T.sourceItemNo, T.relevantEntlPKView.relation, T.relevantEntlPKView.relevantEntlGuid)"
        + " from RelevantEntitlementView T  where T.relevantEntlPKView.guid = ?1 and T.relevantEntlPKView.langCode = ?2")
    List<RelevantEntlViewResponseDto> findRelevantEntitlementViewsByEntlGuid(String entitlementGuid, String langCode);
}

2.接收的Dto定义这样的:

public class RelevantEntlViewResponseDto implements Serializable, Comparable<RelevantEntlViewResponseDto>
{
    private static final long serialVersionUID = 2684804377793829074L;
    private Long entitlementNo;
    private String entitlementType;
    private String sourceDocNo;
    private String sourceItemNo;
    private String relation;
    private String guid;

public RelevantEntlViewResponseDto()
    {
        super();
    }

 public RelevantEntlViewResponseDto(Long entitlementNo, String entitlementType, String sourceDocNo, String sourceItemNo, String relation,
        String guid)
    {
        super();
        this.entitlementNo = entitlementNo;
        this.entitlementType = entitlementType;
        this.sourceDocNo = sourceDocNo;
        this.sourceItemNo = sourceItemNo;
        this.relation = relation;
        this.guid = guid;
    }

 @Override
    public int compareTo(RelevantEntlViewResponseDto responseDto)
    {
        //return this.getEntitlementNo().compareTo(responseDto.getEntitlementNo());
        return this.entitlementNo > responseDto.getEntitlementNo() ? 1 : -1;
    }

}


3.RelevantEntitlementView 的定义:

@Entity(name = "")
@Table(name = "")
public class RelevantEntitlementView implements Serializable
{
    private static final long serialVersionUID = -2203166632368793389L;
    @Column(name = HanaDbColumnConstants.ENTITLEMENT_TYPE)
    private String entitlementType;
    @Column(name = HanaDbColumnConstants.RELEVANT_ENTITLEMENT_NO)
    private long entitlementNo;
    @Column(name = HanaDbColumnConstants.RELEVANT_ENTITLEMENT_REF_DOC_NO)
    private String sourceDocNo;
    @Column(name = HanaDbColumnConstants.RELEVANT_ENTITLEMENT_REF_ITEM_NO)
    private String sourceItemNo;
    @EmbeddedId
    private RelevantEntitlementPKView relevantEntlPKView;

}

4.RelevantEntitlementPKView 定义:

@Embeddable
public class RelevantEntitlementPKView implements Serializable
{
    private static final long serialVersionUID = -1335267199925253148L;
    @Column(name = HanaDbColumnConstants.ENTITLEMENT_GUID, nullable = false)
    private String guid;
    @Column(name = HanaDbColumnConstants.RELEVANT_ENTITLEMENT_GUID, nullable = false)
    private String relevantEntlGuid;
    @Column(name = HanaDbColumnConstants.RELATION)
    private String relation;

}

这样就不用在通过view去接收之后再get,set进dto。通过构造函数直接用Dto接收更加方便!


JPA(Java Persistence API)是Java平台中用于持久化数据的规范,它允许开发者通过Java来管理关系型数据。在使用JPA时,通常会通过Repository口来操作数据库,而Spring Data JPA为这个过程提供了便利,允许我们通过定义口来实现数据访问层(DAO)的编写。 在Spring Data JPA的Repository中,你可以使用Spring提供的查询方法命名规则来声明查询,也可以使用`@Query`注解直接编写原生的SQL语句JPQL语句。如果你需要将查询结果直接映射到一个数据传输对象(DTO),而不是JPA实体类,你可以使用构造函数绑定的方式。 构造函数映射到DTO通常涉及以下几个步骤: 1. 定义一个DTO类,这个类通常不包含任何JPA注解。 2. 在Repository口中,使用`@Query`注解编写SQL查询语句,并指定返回值类型为DTO类的实例。 3. 使用`@Query`注解的`nativeQuery`属性来指定是否为原生SQL查询。 4. 使用`ConstructorResult`和`ConstructorExpression`来指定构造函数参数,这些参数将与查询结果的列名相对应。 以下是一个简单的例子: ```java // DTO类 public class MyDto { private final String columnOne; private final Integer columnTwo; public MyDto(String columnOne, Integer columnTwo) { this.columnOne = columnOne; this.columnTwo = columnTwo; } // getters and setters } // Repository口 public interface MyEntityRepository extends JpaRepository<MyEntity, Long> { @Query(value = "SELECT new MyDto(e.columnOne, e.columnTwo) FROM MyEntity e") List<MyDto> findCustomDto(); } ``` 在这个例子中,`findCustomDto`方法使用`@Query`注解定义了一个查询,返回值是一个DTO对象列表。查询结果将通过`MyDto`的构造函数映射到DTO对象中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值