Что может быть лучше, чем использование настроенного запроса в Java Spring Boot? - PullRequest
0 голосов
/ 28 мая 2018

Это написано в инфраструктуре Play в моем пакете Service:

public static BigInteger validUsername(JsonNode user) {     

    Query query = JPA.em().createNativeQuery("SELECT COUNT(u.userId) FROM "+USER_TABLE+" u where username = ? and status != 'deleted'");
    query.setParameter(1, user.findPath("userName").asText());
    BigInteger count =  (BigInteger) query.getSingleResult();

return count;
}

Есть ли лучший способ реализовать то же самое в приложении Java Spring Boot?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Для этого вы можете использовать JPA и Spring Data JPA .Это означает, что вы должны сопоставить свои таблицы с сущностями, например:

@Entity
@Table(name = "USER_TABLE")
public class User {
    @Id
    private Long userId;
    private String username;
    private String status;

    // Getters, setters, ...
}

После этого вы можете использовать Spring Data JPA для создания репозитория:

public interface UserRepository extends JPARepository<User, Long> {

}

Это также позволяет вамсоздавать пользовательские запросы несколькими способами, например, используя аннотацию @Query, методы запросов, ....

public interface UserRepository extends JPARepository<User, Long> {

    @Query("select count(u.userId) from User u where u.username = :username AND u.status != 'deleted'")
    int countNonDeletedUsersByUsername(@Param String username);
}

В этом запросе используется JPQL (язык запросов для JPA), ноесли вы предпочитаете писать собственные запросы, вы всегда можете включить флаг nativeQuery, как указано в документации :

Аннотация @Query позволяет запускать собственные запросы с помощьюустановка флага nativeQuery на true.

0 голосов
/ 28 мая 2018

Я могу посоветовать вам использовать репозиторий JPA. ЗДЕСЬ

вы можете найти множество примеров, как это реализовать.

Вкратце метод из репозитория должен выглядеть так:

public interface CustomerRepository extends CrudRepository<Customer, Long> {

List<Customer> findByLastName(String lastName);
}

Если вы хотите использовать нативную задницу запроса в качестве примера, вы можете использовать аннотацию @Query и ввести свой запрос в качестве параметра.

 @Query("SELECT t.title FROM Todo t where t.id = :id") 
String findTitleById(@Param("id") Long id);
...