Модель пользователя
@Entity
@Table(name = "user",uniqueConstraints = {@UniqueConstraint(columnNames = {"email"}) })
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 382892255440680084L;
private int id;
private String email;
private String userName;
private Set<Role> roles = new HashSet<Role>();
public User() {}
}
Мой соответствующий пользовательский репо:
package hello.repository;
import org.springframework.data.repository.CrudRepository;
import hello.model.User;
public interface UserRepository extends CrudRepository<User,Long> {
}
В контроллере я делаю:
@GetMapping(path="/all")
public @ResponseBody Iterable<User> getAllUsers() {
// This returns a JSON or XML with the users
return userRepository.findAll();
}
Я нахожу, что это извлекает всю таблицу пользователей. Но это не то, что я хочу. Мое требование - это только столбец электронной почты из таблицы пользователя.
Как получить только электронную почту из таблицы пользователей? ---> SQL Query, как SELECT электронная почта от пользователя;
Создайте запрос с помощью @Query
annoatation в вашем UserRepository
следующим образом:
public interface UserRepository extends CrudRepository<User,Long> {
@Query("select u.email from User u")
List<String> getAllEmail();
}
И назовите его в своем контроллере
@GetMapping(path="/user/email")
public @ResponseBody List<String> getAllEmail() {
return userRepository.getAllEmail();
}
Если вы не хотите писать запрос, вы можете использовать прогнозы для получения только необходимых вам полей:
public interface UserProjection {
String getEmail();
}
public interface UserRepo extends CrudRepository<User, Long> {
List<UserProjection> getUserDtoBy();
Projection getUserDtoById(Long userId);
// Even in dynamic way:
<T> List<T> getUserDtoBy(Class<T> type);
<T> T getUserDtoById(Long userId, Class<T> type);
}
Затем он выбирает только указанные поля. В приведенном выше примере проектирования он сделает запрос SQL следующим образом:
select p.email from users u ...
Например, вы всегда можете указать свой пользовательский запрос, чтобы выбрать только одно поле (как сказал @AjitSoman):
@Query("select distinct u.email from User u)
List<String> getAllEmails();
(Я думаю, что здесь не нужны дублирующие значения...)
@Query
, и в качестве значения этой аннотации вы указываете@Query
запрос. docs.spring.io/spring-data/jpa/docs/current/reference/html/… . Кажется, вы не читали документацию. Почему не ты?