spring data jpa 会用的 原生sql 查询方式

目录

 

(1)按某个字段统计数据

(2)几个表组建视图查询


(1)按某个字段统计数据

                  这里是根据detectSn进行统计,并且过滤掉重复数据(DISTINCT),不需要过滤去掉DISTINCT就可以了。后面跟查询条件。

                  传的值在上面获取需要用 :value  参数需要价格@Param(“value”)

    @Query(value = "select count(DISTINCT detectSn) from tbl_zjpt_vehicleInfo where ifExistAj = :ifExistAj", nativeQuery = true)
    Integer queryByIfExistAj(@Param("ifExistAj")String ifExistAj);

(2)几个表组建视图查询

       首先需要new com.dcsoft.vo.OutViewVehicleInfo  结果info用来存放返回数据。as后面跟与info相同的字段名。 info里面一定要有构造方法。参数为所有的字段。给别名C  和  p ,用c. 和 p. 表示哪个字段需要取哪个数据表里的数据。

            后面跟where条件。参数与上面的方式一样,就不多说了。

      需要传一个entity  把主查询表entity传上吧

public interface OVVRepository extends JpaRepository<Entity, String>, JpaSpecificationExecutor<Entity>,PagingAndSortingRepository<Entity,String>

     page page 参数是info  对应的上面的info 而不是 entity

    @Query(value = "select new com.vo.OutViewVehicleInfo(c.drId as drId ,c.vehicleNo as vehicleNo," +
            "c.insertTime as insertTime," +
            "c.plateColorCode as plateColorCode,c.detectSn as detectSn,c.detectType as detectType," +
            "c.detectDate as detectDate,p.detectResult as detectResult) " +
            "FROM OutDetectRecordEntity c , OutDetectReportEntity p WHERE c.drId = p.drId and c.vehicleNo like :vehicleNo ")
    Page queryAllByVehicleNo(@Param("vehicleNo") String vehicleNo,Pageable pageable);

         下面这段代码 是对应的  page  参数 为  页码  每页数据个数  排序方式。

PageRequest pageRequest = new PageRequest(vehicleQueryParam.getPageNum() - 1,
                vehicleQueryParam.getPageSize(), new Sort(new Order(Direction.DESC, "insertTime")));
        Page page = null;

 碰到其他的再更新吧...

有nativeQuery = true 和 没有的区别:

有nativeQuery = true时,是可以执行原生sql语句,所谓原生sql,也就是说这段sql拷贝到数据库中,然后把参数值给一下就能运行了,比如:

@Query(value = "select * from product_rel where audit_id=?1 and process_object=0 ",nativeQuery = true)
List findAllByProductAuditId(Integer id);
 

(3)统计近 5 年 每年的数据量 (联表查询也是相同的方式)

@Query(value = "select new com.dachengsoft.yszhjc.pojo.zhclglInfo.CountVehSum (count(a.clid) as amount,SUBSTRING(a.jdrq,1,4) as jdrq) from CheliangEntity a where ?1 < a.jdrq GROUP BY substring(a.jdrq,1,4)")
List count5(String year);

主要是针对,你所需要的字段,没有对应的实体来接收这些数据。

分析:首先创建接收info 字段要与 as 后的amount 和 jdrq  字段名一样且数据类型一样。

           第二:接收的info 一定要 有一个 全参 构造方法。

    如果说是想要查询两个表里的 某些字段,也是这种方式,新建一个vo  info类,字段名必须与 返回数据的字段名一致,必须有一个全参构造方法。

 

你可能感兴趣的:(spring,boot,java基础)