2016-05-04 10 views
0

私はエクスポートするレポートがたくさんあり、データには春データjpaが照会されていますが、コーディングすると面倒です。 いくつかのコード:クエリが複雑な場合にspringデータjpaをエスケープする方法は?

public Object getReportBySupplier(ReportSupplierSearch reportSearch) { 
     // 查询统计数据 
     StringBuffer sql = new StringBuffer("SELECT ifnull(sum(apply_money), 0) money_count, count(1) itemCount FROM cash WHERE confirm_status = 2 "); 
     sql.append("and supplier_id = " + reportSearch.getSupplierId()); 
     String start = null; 
     String end = null; 
     if (!StringUtils.isEmpty(reportSearch.getStime())) { 
      start = reportSearch.getStime() + " 00:00:00"; 
      sql.append(" and paying_time >= " + "'" + start + "'"); 
     } 
     if (!StringUtils.isEmpty(reportSearch.getEtime())) { 
      end = reportSearch.getEtime() + " 23:59:59"; 
      sql.append(" and paying_time <= " + "'" + end + "'"); 
     } 
     sql.append(" UNION ALL"); 
     sql.append(" SELECT ifnull((sum(t1.pay_money)), 0) money_count, count(1) itemCount FROM pay_info t1 "); 
     sql.append(" where t1.supplier_id =" + reportSearch.getSupplierId()); 
     if (!StringUtils.isEmpty(reportSearch.getStime())) { 
      sql.append(" and pay_time >= " + "'" + start + "'"); 
     } 
     if (!StringUtils.isEmpty(reportSearch.getEtime())) { 
      sql.append(" and pay_time <= " + "'" + end + "'"); 
     } 
     Query query = em.createNativeQuery(sql.toString()); 
     List result = query.getResultList(); 
     return assembleReportBean(result); 
    } 

答えて

1

どちらか@query注釈やqueryexecuterdslを使用しています。 これは、管理可能な形式でクエリを作成するのに役立ちます。

+0

ですが、クエリは常に動的です。 –

+0

上記の方法を使用すると、クエリを動的にすることができます。サブクエリクエリ(動的結果)の結果をメインクエリに使用するには、Naming Parameterクエリを使用します。 もしこのメソッドがあなたのニーズを満たしていなければ、上記のような独自のメソッドとその実装を提供することができます。 –

関連する問題