2015-05-06 2 views
0

В настоящее время я изучаю Java EE и как использовать JPA.Java EE и Entity: лучший способ получить результаты из базы данных

Я создал отличную базу данных, на одной из ее таблиц которой было больше 20 полей.

Мне было интересно, что является лучшим способом получить результаты из БД.

В настоящее время я использую @NamedQuery, который занимает 12 или 13 параметров.

Мне было интересно, могу ли я вместо этого использовать метод findAll(), а затем сделать цикл, который проверяет с помощью .contains() (для строки, конечно), если запись - это то, что я ищу.

С моей точки зрения, это выглядит менее сложным при использовании второго метода, может быть, потому что я лучше с Java, чем JPA (в данный момент)

Любой совет будет весьма признателен, спасибо много

ответ

0

Если вы получаете результаты с помощью метода findAll (из Spring Data JPA -thanks Neil Stockton), вы приносите в память огромное количество данных. Обычно лучше получить только нужные вам записи и использовать Java только для «работы» с ними, а не для их фильтрации из БД.

+0

Но если я просто использовать эти данные для контура на нем?Я мог бы также использовать NamedQuery в качестве первого фильтра, например, фильтрацию на пользователе – trichetriche

+1

Вы имеете в виду метод Spring Data JPA findAll(). JPA API не имеет такого –

+0

@trichetriche. Дело в том, вам нужны все данные? Я имею в виду, вы хотите сделать что-то со всеми записями в таблице или просто с некоторыми из них? –

0

Прежде всего, второе решение приведет к отправке на сервер гораздо большей базы данных данных, чем вам действительно нужно. Поскольку таблица будет расти, это может быть проблемой, насколько это касается производительности времени. Кроме того, по моему опыту, запрос, который приводит к меньшему количеству данных из-за ограничения where, будет выполняться быстрее в базе данных. В конце я бы не стал игнорировать тот факт, что основная функция базы данных - оптимизация запросов, которая предназначена для оптимизации выполнения запросов, и я думаю, что лучше использовать ее вместо обработки данных результата на Java.

+0

. Но учитывая тот факт, что мне все равно придется загружать все данные, было бы проще/быстрее использовать Java вместо JPA? Я мог бы сделать первый фильтр по 1 или 2 критериям, чтобы уменьшить количество сделанных записей – trichetriche

0

Если вы хотите найти данные в таблице на основе ваших критериев поиска, вы можете использовать другой подход, в JPA вы можете получить блоки данных, как это:

boolean existOnSessionArray=findInSessionArray(searchCriteria); 
int numMaxResultsPerBlock=50; 
int pageNumber=0; 
int firstResult=0; 
while(!sexistOnSessionArray){ 
    Query query=entityManager.createNamedQuery("yourQueryName"); 
    query.setMaxResults(numMaxResultsPerBlock);//you will retrieve only 50 records per block 
    query.setFirstResult(firstResult);//your first record to the 49 record 
    List fetchedData=query.getResultList(); 
    //Check if the new fetched list contains your expected result 
    boolean existInNewFetchedData=check(fetchedData,searchCriteria); 
    updateSessionArrayWithNewFetchedData(fetchedData); 
    if(!existInNewFetchedData){ 
     pageNumber++; 
     firstResult=pageNumber*numMaxResultsPerBlock; 
    }else{ 
     break; 
    } 
} 

В этом примере, вы будете найдите свои данные на основе ваших критериев поиска (значение вашего текстового поля ввода), ища блоки из 50 записей, если ваши критерии поиска существуют в этих первых 50 записях, эти записи будут храниться в вашем массиве сеансов, а затем вы будете искать, если ваш критерии поиска существуют в следующих 50 записях (51-100) и т. д., пока вы не найдете свои данные. Таким образом, вам не нужно изменять свое имя запроса. Единственная проблема, которую я вижу, заключается в том, что если вы сохраняете все свои данные в массиве сеансов при запуске приложения, что произойдет, если кто-нибудь обновит (вставляет или удаляет) данные из этой таблицы? вам также нужно будет обновить свой массив сеансов.

Надеюсь, это поможет ...

0

«Лучший» относительно.

Тем не менее, элегантный способ выполнения операций CRUD использует силу пружинного каркаса. Вы можете узнать, как это сделать от here при условии, что у вас есть базовое знание Spring, такое как создание bean-компонентов и то, как инфраструктура работает в базовом (что вы можете легко получить в предыдущих главах в последней ссылке) и простое знание MySQL и JDBC.

Spring берет на себя задачи низкого уровня, как создание соединений, подготовка и выполнение SQLs и т.д.