- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
public final static String sqlCottOpen = new StringBuilder()
.append("select\n")
.append("rtt.object_id as rtt_id,\n")
.append("rtt.name as rtt_name,\n")
.append("stt.object_id as stt_id,\n")
.append("stt.name as stt_name,\n")
.append("(SELECT status_value.value\n")
// Ещё 40 строчек апендов
.append(" and rownum = 1) stt").toString();
1. какого хуя™ клеить стрингбилдером вручную, + вполне так же перегружен
2. какого хуя™ не в одной строчке
3. какого хуя™ в константе хранить запрос
4. какого хуя™ вообще запрос в явном виде (да еще и с мускульным акцентом)
1. Тут создаётся стрингбилдер, 50 раз дёргается его метод append, а потом он преобразовывается в строку. Это совершенно лишние операции поскольку можно сразу задать строковый литерал.
2. Многострочные константы это потенциальный источник гемора, особенно если пропустить пробел или символ переноса строки.
3. Запросы не желательно хранить в константах, они не рассчитаны для этого. Лучше их загружать из шаблона или оформить его в хранимую процедуру. Иногда бывает нужно что-то дописывать в запрос, тогда хранимая процедура не поможет.
4. См. пункт 3. Хотя возможно комментатор имел в виду наличие SQL'ного форматирования внутри (отступы, переносы строк).
2. лишние операции, можно было в строку
3. совершенно нецелесообразно хранить запрос sql в константе
4. существует jdbc и querybuilder/orm фреймворки для более удобного и красивого обращения с базой
2. Не согласен. Ниже приведем пример того как бы это выглядело в строчку. Считаю, что в данном случае, многострочно выглядит выгоднее.
3. Почему нецелесообразно? Как можно сделать лучше? Тот же самый jpa со своими @NamedQuery по сути и есть хранение запроса в константе.
4. А если в проекте всего 3-4 таблицы и используется не больше 10 запросов и заведомо известно, что дальнейшего роста проекта не будет? Про целесообразность библиотек мы уже поговорили в #7177.
П. С. Неплохо бы указывать размер проекта, когда постится код.
П. С. С. Учитывая название константы, это все же скорее всего говнокод.
А вот если часть строки генерируется динамически, тогда да, "string" + func() эквивалентно new StringBuilder().append("string").append( func()).toString(). Хотя опять же компилятор оптимизирует байт-код по сравнению с явным вызовом StringBuilder.
Явно вызывать StringBuilder имеет смысл лишь в циклах, когда промежуточные результаты присваиваются временной переменной.
откуда эта фраза? чем знаменита?
ХА-ХА-ХА-ХА