按用户在 spring 引导中的角色获取用户列表
getting list of users by their role in spring boot
我正在使用 spring 启动、休眠、mysql 数据库,我想按角色获取用户列表我有两个实体和一个枚举:
ERole.java
package com.gestionAbscences.entity;
public enum ERole {
ADMIN,
CHEF_DEPARTEMENT,
ENSIEGNANT,
ETUDIANT,
}
Role.java:
package com.gestionAbscences.entity;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Enumerated(EnumType.STRING)
@Column(length = 20)
private ERole name;
public Role(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public ERole getName() {
return name;
}
public void setName(ERole name) {
this.name = name;
}
}
User.java:
package com.gestionAbscences.entity;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
private String firstName;
@NotBlank
private String lastName;
@NotBlank
@Email
private String email;
@NotBlank
private String password;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_roles",joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
public User(){
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
我的管理控制器是一个 REST 控制器:
AdminController.java:
package com.gestionAbscences.controller;
import com.gestionAbscences.entity.Role;
import com.gestionAbscences.entity.User;
import com.gestionAbscences.services.RoleService;
import com.gestionAbscences.services.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class AdminController {
@Autowired
private UserService userService;
@Autowired
private RoleService roleService;
@GetMapping("/users?={role}")
public List<User> getUsers(@RequestParam int role){
return userService.getUsersByRole(role);
}
}
对于 userRepository.java 我不知道如何编写 sql 语句来获取具有指定角色的用户列表:
userRepository.java:
package com.gestionAbscences.repository;
import com.gestionAbscences.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface UserRepository extends JpaRepository<User,Long> {
//for this Query I don't know how to write it
@Query("")
List<User> findUserByRole(int role);
}
对于数据库的模式,它是这样的:
我用的java版本是openjdk11,我用的是spring2.6.4
据我了解,这应该可行!
@Query("SELECT user FROM User user LEFT JOIN user.roles role WHERE role.id = ?1")
List<User> findUserByRole(int role);
This 页面很有用。
我正在使用 spring 启动、休眠、mysql 数据库,我想按角色获取用户列表我有两个实体和一个枚举: ERole.java
package com.gestionAbscences.entity;
public enum ERole {
ADMIN,
CHEF_DEPARTEMENT,
ENSIEGNANT,
ETUDIANT,
}
Role.java:
package com.gestionAbscences.entity;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Enumerated(EnumType.STRING)
@Column(length = 20)
private ERole name;
public Role(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public ERole getName() {
return name;
}
public void setName(ERole name) {
this.name = name;
}
}
User.java:
package com.gestionAbscences.entity;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
private String firstName;
@NotBlank
private String lastName;
@NotBlank
@Email
private String email;
@NotBlank
private String password;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_roles",joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
public User(){
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
我的管理控制器是一个 REST 控制器:
AdminController.java:
package com.gestionAbscences.controller;
import com.gestionAbscences.entity.Role;
import com.gestionAbscences.entity.User;
import com.gestionAbscences.services.RoleService;
import com.gestionAbscences.services.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class AdminController {
@Autowired
private UserService userService;
@Autowired
private RoleService roleService;
@GetMapping("/users?={role}")
public List<User> getUsers(@RequestParam int role){
return userService.getUsersByRole(role);
}
}
对于 userRepository.java 我不知道如何编写 sql 语句来获取具有指定角色的用户列表:
userRepository.java:
package com.gestionAbscences.repository;
import com.gestionAbscences.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface UserRepository extends JpaRepository<User,Long> {
//for this Query I don't know how to write it
@Query("")
List<User> findUserByRole(int role);
}
对于数据库的模式,它是这样的:
我用的java版本是openjdk11,我用的是spring2.6.4
据我了解,这应该可行!
@Query("SELECT user FROM User user LEFT JOIN user.roles role WHERE role.id = ?1")
List<User> findUserByRole(int role);
This 页面很有用。