Pull to refresh

Comments 20

Спасибо за пример, это базис для начинающего разработчика, но порой даже эти шаги пройти не легко, по себе помню)
Зато когда проходишь всё это самостоятельно, дальше можно горы свернуть.

Хватит уже реплицировать простые приложения. Такие гайды уже давно на самом сайте Spring есть. Лучше рассмотрели вариант EventSourcing и прочих, а гайды для новичков уже переваливает все мыслимые рамки.

А вот мне понравилось)
Я не веб-разработчик, а мобильный. И было интересно глянуть как примерно это делается. Просто так гуглить бы я это не стал, тем более доки Spring'a. А тут в ленте появилось и что-то для себя и узнал.

>По пути java.com.zuk.connection создадим класс ConnectionManager, он должен отдавать нам соединение с БД, и с этим соединением мы в дальнейшем будем работать.
Вот после таких вот статей и пишут вместо DataSource всякую свою фигню.
Согласен с вами.
Статья рассчитана для новичков, и я хотел как можно меньше использовать коробочных решений.
Я изменил статью, указывая спорность данного способа.
Вот сколько я видел в своей жизни таких вот некоробочных решений — все они страдали например утечками коннектов. Потому что try/with начинающий автор еще не изучил, а Spring JDBC ему лень.

Поэтому все эти решения идут лесом, а начинающим надо всегда использовать то, что написали за них опытные люди. И не выпендриваться с велосипедами.
Тут с вами не соглашусь.
Я придерживаюсь такой «философии».
Процесс обучения довольно сложная штука, для многих людей нужен разный подход.
Есть люди, которым дают впервые велосипед, а они уже едут. Есть те, которые должны проездить с дополнительными колесами еще пол года. Но если у человека сломается велосипед, не многие смогут определить в чем проблема, тем более своими силами починить это.
Тут проблема в том, что ваш вот велосипед, после пары исправлений, все еще не ездит. Да и кроме меня вон ниже исправлений накидали. Так что варианты обычно сводятся к:
— велосипед, все свое, но неверное
— работающее решение

PreparedStatement pr = con.prepareStatement("SELECT * FROM DATABASE.User where LOGIN=?");
pr.setString(1 , login);
ResultSet resultSet = pr.executeQuery();//return sql result
if(resultSet.next()) {
...
}
pr.close();
con.close();


Вот это — не работающее. Потому что try/with нет, и потому что close нужно делать в finally, и ошибки обрабатывать хоть как-то.

Для меня выбор очевиден — учить надо на работающих.

Взять спринг и читать пропертя из файла (!!!), путь к которому прописан относительно корня исходников? (wall) (facepalm)

А взять spring boot, но не суметь использовать Spring JDBC...? А не закрыть при этом все ресурсы (Connection, Statement...), до единого? А вот это вот:

if(findUser.getPassword().equals(user.getPassword())){

не означает ли, что пароли хранятся в базе в исходном виде? Разве нет?
Такое прощать нельзя, спасибо.
Уже исправлено!
Относительно этого, я обновил пост и отвечал в комментарии выше.
В начале статьи, я написал, что буду использовать Spring по минимуму, также в блоке с подключением БД, указал на спорность данного метода и посоветовал почитать о работе с БД на сторонних ресурсах.
С Java/Spring работаю достаточно долго, поэтому не уверен что понял смысл статьи, ведь если была идея поделиться опытом, то присутствуют некоторые моменты, на которые стоит обратить внимание. Как статья-туториал для новичка, если честно слишком сыровата.
1. Для инициализации проекта проще использовать start.spring.io либо встроенный плагин в IDEA.
2. Насчет базы, опять же можно подрубить spring-data и общаться через более высокоуровневые объекты, чтобы не забывать закрывать connection и прочее. В данном случае закрытие коннекций неправильное. где try with resources?
3. Работа с DAO, User findByLogin(User user); — название не соответствует аргументам метода
4. POJO. Почему поля класса не private?
5. Обработка ошибок что-то с чем-то. Как вы поймете что findByLogin не нашел такого юзера, а как поймете что случилась ошибка?
6. Уровень контроллера также должен быть пересмотрен. RequestMapping("/registration") это должен быть PostMapping. Следите за REST контрактом. Пароли в урле?
ResponseBody спокойно забывается с помощью RestController.
7. etc…
Сорян в общем, но я бы порекомендовал все таки прежде чем публиковать статью-туториал немного довести код до ума, чтобы незнакомые со Spring/Java люди не наступили на грабли попытавшись на базе этого кода построить свое решение.
Спасибо за такой комментарий. Обширно и полезно.
Делал проект параллельно написанию статьи, некоторые моменты менялись и забывал менять в статье.
Вы заставили задуматься о небольшом расширении статьи.
Недочеты исправлю, еще раз спасибо.
не ну слой работы с БД это сильно, конечно
простите за токсичность, но это пример того, как делать не нужно
во всех гайдах спринг секьюрити есть и нормальные passwordEncryptor's и прочее. Зачем велосипедить если есть принятные и рабочие стандарты?
Обучать нужно не «магии», а тому, как на самом деле всё работает. Хотя автор, видимо, и сам мало что понимает.

Новичку нужна картина всей цепочки от браузера до базы данных. И в простом виде. Spring здесь совершенно неуместен именно из-за «магии», то есть он вводит непонятную (и ненужную в данном примере) функциональность.

Жаль, что подобные статьи размножаются. Общий тренд в обучении новичков такой — бери это, делай такие шаги, всё, ты обучен. Это обезьяний метод. Так «обучившийся» ничего не поймёт кроме того, что «где-то там магия всё сделает сама».

Я показал на мой взгляд необходимые слои веб-приложения, и показал их реализацию.
Понятное дело, что всегда можно рассказать глубже, можно было бы вернутся сервлетам, либо же рассказывать про реализации контейнеров, но мне кажется это просто бы спугнуло и было бы не эффективно.
Всегда существует грань слишком глубоко/поверхностно.
Человек, мне кажется, должен осознавать, что после прочтения стать он не может понимать все.
Для меня такой формат обучения лучше всего, если ты видишь что-то в первый раз. Слишком много — испугало, слишком мало/без примера — сам как-то врятли пойду дальше.
Те моменты, которые я упускал, которые называл «магией», мне кажется первое время можно обойтись и без них. Тем более есть много приятных сурсов с хорошими примерами/объяснениями.

Покажете нормальные статьи/примеры? Как новичок интересуюсь

Что вас именно интересует?
В статье собираюсь добавить полезную инфу в районе месяца, и ссылки, которые подробней рассказывают темы, которые я затрагиваю, но не объясняю подробно.
Извините за поздний ответ.

Only those users with full accounts are able to leave comments. Log in, please.