Jawa / Говнокод #9530 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
private static final String QUERY = 
        new StringBuffer("SELECT p.id FROM policysummary p ") 
            .append(" WHERE p.currentRevisionInd     = 1 ") 
            .append("AND p.policyStatusCd          IN ('issued') ") 
            .append("AND p.timedPolicyStatusCd     IN ('inForce') ") 
            .append("AND p.txType                  IN ('policy','renewal','endorsement','reinstatement') ") 
            .append("AND p.expiration <= :requestDate ") 
            .append("AND :requestDate <= (p.expiration + :requestTo) ") 
            .append("AND NOT EXISTS ") 
            .append("  (SELECT prs.id ") 
            .append("  FROM PolicyReportStatus prs ") 
            .append("  WHERE prs.policyId  = p.id ") 
            .append("  AND prs.mvrOrderDt IS NOT NULL ") 
            .append("  )") 
            .toString();

Недавно выдавили заграничные коллеги

Запостил: roman-kashitsyn roman-kashitsyn, (Updated )

Комментарии (27) RSS

  • Интересно, почему в нашем проекте никто (кроме меня) не использует @NamedQuery, всё через конкатенацию строк...
    Ответить
    • судя по всему, и на говнокод никто из вашего проекта не заходит (кроме тебя)
      Ответить
    • Так ведь в @NamedQuery вроде как один фиг текст запроса придется забивать?
      Да и не всегда они удобны. Даже хотел бы услышать в чем их преимущества =)
      Ответить
      • 1. Они разбираются один раз на старте приложения, потому выполняются быстрее (не надо каждый раз разбирать текст запроса и строить АСД).
        2. Соответственно, ошибки в таких запросах обнаруживаются сразу, а не случайным образом в рантайме.
        Ответить
        • +1 за ответ.

          К сожалению, мое приложение не позволяет из активно юзать. =)
          Ответить
  • Самое забавное, что через + будет быстрее, потому что + использует StringBuilder, который быстрее StringBuffer.

    А вообще советую этим товарищам открыть для себя QueryDSL.
    Ответить
    • мы тут недавно этот вопрос выясняли: конкатенацию константных строк выполняет компилятор.
      Ответить
      • а из-за двойных кавычек они не перестают быть константными? или только при появлении в них переменных?

        кстати у меня на работе ровнять код как минимум поощряется. видимо из-за того, что пишем на дельфи. видимо тарас руку приложил.
        Ответить
        • В одинарных кавычках в жабе может находиться только один символ ('a', 'b', но не 'ab'). Строки окружаются двойными кавычками. Автоподстановки строковых переменных ("Hello, ${user}!") в жабе нет, для этого нужно использовать String.format(template, args). Под константными строками я имел в виду строки, извесные на этапе компиляции (включая именованные константы). По идее все строки в жабе иммутабельны. Пример, когда конкатенацию не сможет выполнить компилятор:
          public String f(String p) {
              return "The param is " + p;
          }
          Тут p заранее неизвестно, и код будет преобразован компилятором в конструкцию
          public String f(String p) {
              return new StringBuilder("The param is ").append(p).toString();
          }
          Ответить
        • Ну вот если не знаешь, зачем лезешь?
          $ cat Test.java
          public class Test {
              public static final String A = "Hello";
              public static final String B = "World";
              public static final String C = A + ", " + B + "!";
          };
          
          $ javap -constants Test.class 
          Compiled from "Test.java"
          public class Test {
            public static final java.lang.String A = "Hello";
            public static final java.lang.String B = "World";
            public static final java.lang.String C = "Hello, World!";
            public Test();
          }
          Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8