春データJPAは、動的なクエリのケースをHQL

目的:様々なパラメータの条件、WHERE句内の動的アセンブリHQL。

1.コードを実装

  公共の一覧<WrapStatis> queryStatisCriteriaBuilder(文字列のstartTime、endTimeは文字列、文字列collectName、

                                                       IMEI文字列){ 
        一覧 <WrapStatis>一覧= 新しい新しいのArrayList <> ();
         試み{ 
            CriteriaBuilder CB = entityManager.getCriteriaBuilder();
             // WrapStatisクエリ結果は、指定されたカスタムオブジェクトに返され 
            CriteriaQuery <WrapStatis>クエリ= cb.createQuery( 。WrapStatisのクラス)、
            ルート <StatisEntity> = query.fromルート(StatisEntity。クラス
            パス <カレンダー> timePath = root.get( "CREATETIME" ); 
            パスの<string> statisName = root.get( "statisName");
            パス <文字列> statisNum = root.get( "statisNum" ); 
            パス <ダブル> statisRate = root.get( "statisRate" ); 
            一覧 <述語> predicateList = 新しいのArrayList <述語> (); 
            日付たstartDate = DateUtils.parse(のstartTime、DateUtils.YMD_DASH_WITH_TIME)。
            日endDateに = DateUtils.parse(endTimeは、DateUtils.YMD_DASH_WITH_TIME)。
            もし(!のstartTime = NULL ){ 
                predicateList.add(cb.between(root.get( "CREATETIME" )、たstartDate、endDateに))。
            } 
            場合(StringUtils.isNotEmpty(collectName)){ 
                predicateList.add(cb.equal(root.get( "collectName" )、collectName))。
            } 

            であれば(StringUtils.isNotEmpty(IMEI)&& imei.equals( "全て"! )){ 
                predicateList.add(cb.equal(root.get( "IMEI" )、IMEI))。
            } 
            述語[]述語 = 新しい述語[predicateList.size()]。
            述語 = predicateList.toArray(述語)。
            // 加上ここ条件
            query.where(述語)。
            // 指定查询项、選択后面的东西
            式<文字列> timeStr = cb.function( "DATE_FORMAT"、文字列。クラス、timePath、cb.parameter(文字列。クラス、 "formatStr")); // 格式化日期 
            query.multiselect(timeStr、statisName、statisNum、statisRate)。// 返回列
 //             query.groupBy(root.get(conditionName)、timeStr)。// 分组
 //             query.orderBy(cb.asc(timeStr)); // 排序 
            TypedQuery <WrapStatis> typedQuery = entityManager.createQuery(クエリ); 
typedQuery.setParameter(
"formatStr" 、Constant.STATIS_DAY)。 リスト =typedQuery.getResultList(); } キャッチ(はParseException電子){ log.error( "StatisService queryStatisCriteriaBuilderがエラーで呼び出し" 、E)。 } 戻りリスト。 }
Constant.STATIS_DAY値:日フォーマットによる%D%のY-M-%で、印刷が完了したSQLが実行されます。
選択 DATE_FORMAT(statisenti0_.create_time、?)としてcol_0_0_、
    statisenti0_.statis_name としてcol_1_0_、
    statisenti0_.statis_num としてcol_2_0_、
    statisenti0_.statis_rateのようcol_3_0_ 
         からSTATISのstatisenti0_ 
        (statisenti0_.create_time 及び?) 
          statisenti0_.collect_name = そして statisenti0_.kepler_version = そして statisenti0_.device_brand = そしてstatisenti0_.rom_version = そして statisenti0_.alipay_version =

2.パッケージはwrapStatis.classです

  

パブリック クラスWrapStatis { 

    プライベート文字列の日付。
    プライベート文字列statisName。
    プライベート文字列statisNum。
    プライベートダブルstatisRate。

    // 省略取得/セット/构造方法

}

 

  

おすすめ

転載: www.cnblogs.com/jiangds/p/11004947.html