Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
49 / 44 / 8
Регистрация: 06.09.2010
Сообщений: 419

Правильная работа с БД посредством Спринга

23.06.2013, 00:09. Показов 2678. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Итак. Есть проект на Spring, база данных MySQL.
Использую JdbcTemplate. Возник такой вопрос: как лучше вынимать многострочные результаты запроса?
Использовать RowMapper или использовать метод ниже:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public List<Customer> findAll(){
 
    String sql = "SELECT * FROM CUSTOMER";
 
    List<Customer> customers = new ArrayList<Customer>();
 
    List<Map> rows = getJdbcTemplate().queryForList(sql);
    for (Map row : rows) {
        Customer customer = new Customer();
        customer.setCustId((Long)(row.get("CUST_ID")));
        customer.setName((String)row.get("NAME"));
        customer.setAge((Integer)row.get("AGE"));
        customers.add(customer);
    }
 
    return customers;
}
Просто в первом случае создается в два раза больше классов (один для POJO, второй для самого RowMapper), а во втором методы для работы с БД массивнее.
Подскажите, как это делать правильнее?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.06.2013, 00:09
Ответы с готовыми решениями:

Правильная работа с БД
У меня есть небольшое приложение в котором реализованы функции выборки данных из БД (select ...), изменение записи (update ...) и сейчас...

Правильная работа с БД
и постоянно встречаю сто после запроса соединение надо закрывать как тут например: mysql_query(&quot;CREATE TABLE _myTable ( id...

Правильная работа с файлами
Я написал небольшой скрипт, который разбирает текстовый файл со строками (разделенными табуляциями) в виде html, проводит небольшую их...

5
66 / 55 / 11
Регистрация: 16.04.2010
Сообщений: 190
Записей в блоге: 1
23.06.2013, 11:38
Я использую RowMapper.
В приведенном вами примере за вас для каждой строки результата запроса Spring создает Map, к которому вы обращаетесь.
Т.е. работает так: ResultSet -> Map -> Customer
Использование RowMapper избегает создание Map и явного приведения типов.
1
49 / 44 / 8
Регистрация: 06.09.2010
Сообщений: 419
23.06.2013, 18:33  [ТС]
@raiderx, ну а как насчет того, что создается очень большое кол-во классов? Ведь для каждого многострочного запроса - своя модель, свой роумаппер...
0
66 / 55 / 11
Регистрация: 16.04.2010
Сообщений: 190
Записей в блоге: 1
23.06.2013, 18:39
@Neon-z, у меня один RowMapper, не только класс, но и экземпляр этого класса, для нескольких методов, например, findAll, findById, findByName и т.д. Один для класса модели, например, CustomerRowMapper.
А модель - если вы имеет ввиду создание экземпляра Custоmer в вашем примере - вы же тоже создаете его экземпляр для каждой строки результата запроса, не так ли?
1
49 / 44 / 8
Регистрация: 06.09.2010
Сообщений: 419
23.06.2013, 22:58  [ТС]
@raiderx, Спасибо большое.

Добавлено через 4 часа 16 минут
@raiderx, Не могли бы Вы привести пример, как вы сделали с помощью роумаппера несколько методов и использовали как один класс, так и один экземпляр?
0
66 / 55 / 11
Регистрация: 16.04.2010
Сообщений: 190
Записей в блоге: 1
24.06.2013, 11:20
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@Repository
public class UserDaoImpl implements UserDao {
 
    public static final String SQL_SELECT_USERS_BY_ID =
            "SELECT USERS_ID, LAST_NAME, SECOND_NAME, FIRST_NAME, LOGIN, PASSWD FROM USERS " +
            "WHERE USERS_ID = ?";
    public static final String SQL_SELECT_USERS =
            "SELECT USERS_ID, LAST_NAME, SECOND_NAME, FIRST_NAME, LOGIN, PASSWD FROM USERS";
 
    private final UserRowMapper rowMapper = new UserRowMapper();
 
    @Autowired
    private JdbcTemplate jdbcTemplate;
 
    @Override
    public User getUserById(long id) {
        try {
            return jdbcTemplate.queryForObject(SQL_SELECT_USERS_BY_ID,
                    new Object[] {id}, rowMapper);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }
 
    @Override
    public List<User> getAllUsers() {
        return jdbcTemplate.query(SQL_SELECT_USERS, rowMapper);
    }
 
    public static final class UserRowMapper implements RowMapper<User> {
 
        @Override
        public User mapRow(ResultSet rs, int rowNum) throws SQLException {
            User user = new User();
            user.setId(rs.getLong("USERS_ID"));
            user.setLastName(rs.getString("LAST_NAME"));
            user.setFirstName(rs.getString("FIRST_NAME"));
            user.setSecondName(rs.getString("SECOND_NAME"));
            user.setLogin(rs.getString("LOGIN"));
            user.setPassword(rs.getString("PASSWD"));
            return user;
        }
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.06.2013, 11:20
Помогаю со студенческими работами здесь

Цикл for не правильная работа
Есть такой код $(document).ready(function(){ for (i=0; i&lt;3; i++) { dem = $('&gt;*', '#demont').eq(i).attr('id'); dem1 =...

Не правильная работа ini
Короче суть проблемы - данные выводятся не как надо - label1 и 2 записываются,а 3 нет,либо в нём тоже самое,что в 2. IniFile :=...

Не правильная работа listview
Здравствуйте! Вывожу в listview элементы с checbox При нажатии на checkbox что его отметить, элемент отмечается, но тут же перестает...

не правильная работа strtok
Всем привет. У меня не большая проблемка с strtok. Он мне постоянно выдает первое значение. Вот как это выглядит у меня: char *cmd =...

Не правильная работа TSOP1738
Работаю с TSOP1738. Написал тестовую программу: #ymstude &lt;avr/io.h&gt; #ymstude &lt;avr/interrupt.h&gt; #defyme F_CPU 8000000 int main...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru