私は、どの「受信者」を選択するか決定するためのロジックとして機能するいくつかのパラメータを保存したテーブルを持っています。私は、次のSQL使用正しい受信を選択するデータをフェッチする際のJavaとSQLの比較
:私は以下、このテーブルのコンテンツ/データを図示しているSQLの上方ため
SELECT *
FROM tableOfReceivers
WHERE client = 'DU'
AND (country = countryOfDestination OR '*' = countryOfDestination)
AND (
(packages >= minNumberOfPackages OR minNumberOfPackages IS NULL) AND
(packages <= maxNumberOfPackages OR maxNumberOfPackages IS NULL)
)
AND (
(weight >= minNetWeight OR minNetWeight IS NULL) AND
(weight <= maxNetWeight OR maxNetWeight IS NULL)
)
ORDER BY priority;
変数がある:
country = BE
packages = 5
weight = 50
SQLは正常に動作し、私は必要な結果を得ます。しかし、私はこれをJavaに変換する必要があります。そうする際には、複雑すぎると感じています。これを行うのが簡単になると思っています。
ArrayList<tableOfReceivers > listOfReceivers = getPersistenceManager().getQueryManager().queryAll(
tableOfReceivers.class, "this.client = ?1", "this.client", new Object[] { client }, 0);
ArrayList<tableOfReceivers> result = new ArrayList<tableOfReceivers>();
for (tableOfReceivers rec : listOfReceivers) {
if ((StringUtils.equals(countryOfDestination, rec.getCountryOfDestination())
|| StringUtils.equals("*", rec.getCountryOfDestination()))) {
if (((numberOfPackages >= nvl(rec.getMinNumberOfPackages(), 0))
|| rec.getMinNumberOfPackages() == null)
&& (numberOfPackages <= nvl(rec.getMaxNumberOfPackages(),0))
|| rec.getMaxNumberOfPackages() == null) {
if (((totalNetWeight >= nvl(rec.getMinNetWeight(),0)) || rec.getMinNetWeight() == null)
&& (totalNetWeight <= nvl(rec.getMaxNetWeight(),0)) || rec.getMaxNetWeight() == null) {
result.add(rec);
}
}
}
}
Collections.sort(result, new Comparator<tableOfReceivers >() {
@Override
public int compare(tableOfReceivers o1, tableOfReceivers o2) {
return o1.getPriority().compareTo(o2.getPriority());
}
});
System.out.println("Receiver selection result is:" + "\n");
if(!result.isEmpty()){
System.out.println(result.get(0).getReceiver() + "\n");
}
}
public static Integer nvl(Integer value, Integer alternateValue) {
if (value == null)
return alternateValue;
return value;
}
だから、私はここだけのJavaを使用して必要なものをフェッチするより簡単に、より良い方法があります:
ここで私は、現在使用しているJavaコードはありますか?
ありがとうございます!
のようなヘルパーメソッドを使用することができますなぜあなたはJavaだけを使用しますか? SQLは索引などの情報を使用してデータベースをより効果的に照会できます。 –
Java 8でストリームを使用しないのはなぜですか?これははるかに簡単です。 –