日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

QueryDSL

發布時間:2023/12/20 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QueryDSL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.問題的提出

  有的人可能會遇到這樣的代碼,看了后難以忍受,缺點如下所述:

  • 返回類型Object[]數組,至于每一個下標對應哪個字段,沒法直觀的看到,例如object[11]是什么類型? 字段名是什么? 這個就無法直觀得知 .
  • sql中復雜的關系導致不可維護,每一個接手的人都要研究sql半天
  • 該種動態拼接條件方法導致類似的代碼會大量重復,所以IDEA打開的時候黃了半邊天.
  • 該查詢為分頁查詢,這樣寫的話,還要再copy一個count查詢才能拿到總數,無疑又是代碼重復.
  • JPA之類框架目的就是少些原生sql語句,大量這樣的操作的話,還不如使用dbUtil這樣的工具類查詢.
  • 1 @Override 2 public List<Object[]> findByPcardCardOrder( 3 PcardCardOrder pcardCardOrder,String applyInstName2,Integer page, Integer rows) { 4 StringBuffer sql = new StringBuffer( 5 "SELECT p.*" 6 +",p2.vcard_make_des" 7 +",p3.cardnum_rule_id,p3.vtype_nm" 8 +",p4.cn_card_bin,p4.cn_nm" 9 +",p5.inst_id,p5.inst_name,p5.apply_range,p5.card_name,p5.card_type,p5.bin_card_material" 10 +",p6.inst_name AS apply_inst_name " 11 +",p7.inst_name AS apply_inst_name2" 12 + ",p8.inst_name as receive_inst_name" 13 + " FROM " 14 +" tbl_pcard_card_order p LEFT JOIN tbl_pcard_vcard_make p2 ON p.make_id = p2.vcard_make_id" 15 +" LEFT JOIN tbl_pcard_vtype p3 ON p2.vcard_make_vtype_id=p3.vtype_id" 16 +" LEFT JOIN tbl_pcard_cardnum_rule p4 ON p3.cardnum_rule_id=p4.cn_id" 17 +" LEFT JOIN tbl_pcard_cardbin p5 ON p4.cn_card_bin=p5.card_bin" 18 +" LEFT JOIN tbl_pcard_institution p6 ON p5.apply_range=p6.inst_id" 19 +" LEFT JOIN tbl_pcard_institution p7 ON p.apply_inst_id=p7.inst_id" 20 +" LEFT JOIN tbl_pcard_institution p8 ON p.receive_inst=p8.inst_id" 21 +" WHERE 1=1 "); 22 int i = 1; 23 Map<String, Object> map = new HashMap<String, Object>(); 24 25 if (!StringUtils.isEmpty(pcardCardOrder.getCordId())) { 26 sql.append(" and p.cord_id="); 27 sql.append("?" + i); 28 map.put(i + "", pcardCardOrder.getCordId()); 29 i++; 30 } 31 if (!StringUtils.isEmpty(pcardCardOrder.getAppointMchtcard())) { 32 sql.append(" and p.appoint_mchtcard="); 33 sql.append("?" + i); 34 map.put(i + "", pcardCardOrder.getAppointMchtcard()); 35 i++; 36 } 37 38 if (!StringUtils.isEmpty(pcardCardOrder.getMakeId())) { 39 sql.append(" and p.make_id like "); 40 sql.append("?" + i); 41 map.put(i + "","%%"+ pcardCardOrder.getMakeId()+"%%"); 42 i++; 43 } 44 45 if (!StringUtils.isEmpty(applyInstName2)) { 46 sql.append(" and p7.inst_name like "); 47 sql.append("?"+i); 48 map.put(i+"","%%"+applyInstName2+"%%"); 49 i++; 50 } 51 52 sql.append(" order by p.ct_dm desc"); 53 Query query = entityManager.createNativeQuery(sql.toString()); 54 for (String key : map.keySet()) { 55 query.setParameter(key, map.get(key)); 56 } 57 if (page != null && rows != null) { 58 query.setFirstResult(rows * (page - 1)); 59 query.setMaxResults(rows); 60 } 61 return query.getResultList(); 62 } Problem Code

    ?

    2.學習QueryDSL

      而QueryDSL就可以避免上面全部的問題,在解決問題之前先學習如何使用 .

      2.1 QueryDSL簡介

  • QueryDSL僅僅是一個通用的查詢框架,專注于通過Java API構建類型安全的SQL查詢。
  • QueryDSL可以通過一組通用的查詢API為用戶構建出適合不同類型ORM框架或者是SQL的查詢語句,也就是說QueryDSL是基于各種ORM框架以及SQL之上的一個通用的查詢框架。
  • 借助QueryDSL可以在任何支持的ORM框架或者SQL平臺上以一種通用的API方式來構建查詢。目前QueryDSL支持的平臺包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。
  • 官網地址:點擊進入
  •   2.2配置到項目

        首先對于queryDSL有兩個版本,com.mysema.querydsl和com.querydsl,前者是3.X系列,后者是4.X系列,這里使用的是后者.

        第一步: Maven引入依賴

    <!--query dsl--><dependency><groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId> <version>${querydsl.version}</version> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId> <version>${querydsl.version}</version> <scope>provided</scope> </dependency> <!--query dsl end-->

        第二步: 加入插件,用于生成查詢實例

    <!--該插件可以生成querysdl需要的查詢對象,執行mvn compile即可--><plugin><groupId>com.mysema.maven</groupId> <artifactId>apt-maven-plugin</artifactId> <version>1.1.3</version> <executions> <execution> <goals> <goal>process</goal> </goals> <configuration> <outputDirectory>target/generated-sources/java</outputDirectory> <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor> </configuration> </execution> </executions> </plugin>

        執行mvn compile之后,可以找到該target/generated-sources/java,然后IDEA標示為源代碼目錄即可.



    借鑒鏈接:https://www.jianshu.com/p/2b68af9aa0f5

    共同學習,共同進步,若有補充,歡迎指出,謝謝!

    轉載于:https://www.cnblogs.com/dengguangxue/p/10496273.html

    總結

    以上是生活随笔為你收集整理的QueryDSL的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。