Spring Data Jpa之@Query注解


1.1   HQL查詢

  1.1.1 普通查詢

    @Query(“ select t.name,t.age from ArchWorkPlan t where t.id >?1 ”)

    List<ArchWorkPlan> queryData(int id)

  1.1.2 模糊查詢

    @Query(“ select t from ArchWorkPlan t where t.name like %:name% ”)

    List<ArchWorkPlan> queryData(@Param(“name”)String name)

      --HQL查詢對查詢出的出參個數沒有要求

1.2   SQL查詢

  1.2.1 普通查詢

    @Query(value=“ select * from arch_work_plan t where t.id>?1 “,nativeQuery=true)

    List<ArchWorkPlan> queryData(int id)

  1.2.2 模糊查詢

    @Query(value=“select * from arch_work_plan t where t.name like %?1% “,nativeQuery=true)

    List<ArchWorkPlan> queryData(String name)

      --模糊查詢中的%不需要加單引號,加上會報錯

      --SQL查詢必須要查詢出表中的所有字段,否則報“列名無效”

1.3   命名參數和索引參數

  1.3.1 命名參數

    @Query(“ select t from ArchWorkPlan t where t.id >:id ”)

    List<ArchWorkPlan> queryData(@Param(“id”)int id)

      --使用@param注解需要導包,導org.springframework.data.repository.query.Param

  1.3.2 索引參數

    @Query(“ select t from ArchWorkPlan t where t.id >?1 and t.name=?2”)

    List<ArchWorkPlan> queryData(int id,String name )

      --不管是命名參數還是索引參數,在解析參數的時候都會給參數自動加上單引號,所以在傳遞動態表名或視圖名時不要采用@Query方法,建議使用實體管理器的方式

1.4   分頁查詢

  1.4.1 dao層

    @Query(value=" select * from arch_work_plan where name=:name order by ?#{#pageable} ",countQuery=" select count(*) from arch_work_plan where name=:name ",nativeQuery=true)

    Page<ArchWorkPlan> queryPage(@Param("name") String name , Pageable pageable);

  1.4.2 service層

    Pageable pageable = new PageRequest(pageNumber, pageSize,Sort.Direction.ASC,"id"); //按照id字段降序排列

1.5   多表查詢

  1.5.1 采用遍歷Map形式取值

    dao層:

      @Query(“ select t1.name,t2.age from a t1,b t2 where t1.sys_id =t2.sys_id ”)

      List<Object> queryData()

    service層:

      List<Object> output = testDao.queryData();

      List out = new ArrayList();

      for (int i=0;i<output.size();i++) {

                Object[] rowArray = (Object[]) output.get(i);

                Map<String, Object> mapArr = new HashMap<String, Object>();

                mapArr.put("name", rowArray[0]);

                mapArr.put("age", rowArray[1]);       

                out.add(mapArr);                                              

      }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM