Java 在服务类中创建方法以在Spring Boot中从存储库获取数据
我试图创建一个方法,返回特定角色的所有用户的列表。我在服务类中有不同的方法,如findUserByName等,但当我尝试使用role属性查找用户列表时,它不起作用。我在用户模型中定义了角色 用户模型:Java 在服务类中创建方法以在Spring Boot中从存储库获取数据,java,mysql,spring,spring-boot,jpa,Java,Mysql,Spring,Spring Boot,Jpa,我试图创建一个方法,返回特定角色的所有用户的列表。我在服务类中有不同的方法,如findUserByName等,但当我尝试使用role属性查找用户列表时,它不起作用。我在用户模型中定义了角色 用户模型: @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "user_id") private Int
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private Integer id;
@Column(name = "user_name")
@Length(min = 5, message = "*Your user name must have at least 5 characters")
@NotEmpty(message = "*Please provide a user name")
private String userName;
@Column(name = "email")
@Email(message = "*Please provide a valid Email")
@NotEmpty(message = "*Please provide an email")
private String email;
@Column(name = "password")
@Length(min = 5, message = "*Your password must have at least 5 characters")
@NotEmpty(message = "*Please provide your password")
private String password;
@Column(name = "first_name")
@NotEmpty(message = "*Please provide your name")
private String firstName;
@Column(name = "last_name")
@NotEmpty(message = "*Please provide your last name")
private String lastName;
@Column(name = "active")
private Boolean active;
@ManyToMany(cascade = CascadeType.MERGE)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
}
用户服务:
@Service
public class UserService {
private UserRepository userRepository;
private RoleRepository roleRepository;
private BCryptPasswordEncoder bCryptPasswordEncoder;
@Autowired
public UserService(UserRepository userRepository,
RoleRepository roleRepository,
BCryptPasswordEncoder bCryptPasswordEncoder) {
this.userRepository = userRepository;
this.roleRepository = roleRepository;
this.bCryptPasswordEncoder = bCryptPasswordEncoder;
}
public User findUserByEmail(String email) {
return userRepository.findByEmail(email);
}
public User findUserByUserName(String userName) {
return userRepository.findByUserName(userName);
}
//method to find user by role
public List<User> findUsersByRole() {
return ;
}
public User saveUser(User user, String role) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
user.setActive(true);
Role userRole = roleRepository.findByRole(role);
user.setRoles(new HashSet<Role>(Arrays.asList(userRole)));
return userRepository.save(user);
}
}
@服务
公共类用户服务{
私有用户存储库用户存储库;
私人角色扮演者角色扮演者;
专用BCryptPasswordEncoder BCryptPasswordEncoder;
@自动连线
公共用户服务(UserRepository UserRepository,
角色扮演者角色扮演者角色扮演者,
BCryptPasswordEncoder(BCryptPasswordEncoder){
this.userRepository=userRepository;
this.roleRepository=roleRepository;
this.bCryptPasswordEncoder=bCryptPasswordEncoder;
}
公共用户FindUserByMail(字符串电子邮件){
返回userRepository.findByEmail(电子邮件);
}
公共用户findUserByUserName(字符串用户名){
返回userRepository.findByUserName(用户名);
}
//方法按角色查找用户
公共列表FindUserByRole(){
返回;
}
公共用户saveUser(用户用户,字符串角色){
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword());
user.setActive(true);
Role userRole=roleRepository.findByRole(角色);
user.setRoles(新的HashSet(Arrays.asList(userRole));
返回userRepository.save(用户);
}
}
角色存储库:
@Repository
public interface RoleRepository extends JpaRepository<Role, Integer> {
Role findByRole(String role);
}
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByEmail(String email);
User findByUserName(String userName);
}
@存储库
公共接口角色库扩展了JPA角色库{
角色findByRole(字符串角色);
}
用户存储库:
@Repository
public interface RoleRepository extends JpaRepository<Role, Integer> {
Role findByRole(String role);
}
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByEmail(String email);
User findByUserName(String userName);
}
@存储库
公共接口用户存储库扩展了JpaRepository{
用户findByEmail(字符串电子邮件);
用户findByUserName(字符串用户名);
}
您需要在UserRepository
中编写查询以使用多用户角色关联:
List<User> findByRolesId(Long id); // using here ID of the role
列出findByRolesId(长id);//在此处使用角色的ID