@GetMapping("/admin/users/filtered")
public String adminUserPageFiltered(@RequestParam String role, Model model) {
ExampleMatcher matcher = ExampleMatcher
.matchingAll()
.withIgnoreNullValues()
.withMatcher("role", contains().ignoreCase());
User example = new User();
example.setRole(role);
System.out.println("example role: " + example.getRole());
Iterable<User> userList = userRepository.findAll(Example.of(example, matcher));
System.out.println("Userlist: " + userList);
model.addAttribute("users", userList);
return "adminUserPage";
}
正如您在这里看到的,基本的程序流程是将一个param传递到这条路由,它用param设置的值创建一个新的用户对象(当前只有“role”,但我希望它会随着时间的推移而改变)
然后,findAll方法查找role=角色参数值的所有记录;
换句话说,我的SQL查询将如下所示:
SELECT * FROM users WHERE role="myParam"
在role=“admin”处运行此查询当前返回1条记录,这是预期的。
但是上面java代码中的findAll(示例)返回0条记录。
有人能告诉我为什么findAll方法没有找到任何记录,并且返回和空列表吗?
public class User {
@Id
@Column(name = "user_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String username;
private String password;
private String role;
private boolean enabled;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setRole(String role) {
this.role = role;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public String getPassword() {
return password;
}
public String getUsername() {
return username;
}
public String getRole() {
return role;
}
public boolean getEnabled() {
return enabled;
}
public Long getId() {
return id;
}
}
import com.example.sprintauthexample.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
public interface UserRepository extends JpaRepository<User, Long> {
@Query("SELECT u FROM User u WHERE u.username = :username")
public User getUserByUsername(@Param("username") String username);
@Query("SELECT COUNT(u) FROM User u WHERE u.enabled = true")
public int getUserCount();
@Query("SELECT COUNT(role) FROM User u WHERE u.role='USER' AND u.enabled=true")
public int getUserRoleCount();
}
select user0_.user_id as user_id1_0_, user0_.enabled as enabled2_0_, user0_.password as password3_0_, user0_.role as role4_0_, user0_.username as username5_0_ from users user0_ where (lower(user0_.role) like ? escape ?) and user0_.enabled=?
带绑定
2021-02-17 20:29:35.214 TRACE 14700 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - [%admin%]
2021-02-17 20:29:35.214 TRACE 14700 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [CHAR] - [\]
2021-02-17 20:29:35.215 TRACE 14700 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [3] as [BOOLEAN] - [false]
老实说,我不是很清楚这是什么意思。我正在阅读它目前,但如果有人知道,我当然很感激,如果你分享你的知识或能给我的正确的方向。
我很乐意根据需要添加更多的信息。感谢任何找到答案的人!
我不是Java专家,但我已经解决了这个问题,下面是如何解决的。
对于数据库中的每个用户,“Enabled”字段设置为TRUE。生成的示例启用了“false”
我相信这是因为布尔值中的NULL值为false。在JavaScript中就是这样的,JavaScript是我的主要语言。Java我还在学习,但我对这个解释很满意。也许对Java有更多了解和经验的人可以纠正我。
所以,我的问题在于title-crudepository方法返回一个空列表。我重写了Crud的方法,因为它返回的是iterable而不是list。 我尝试使用而不是(当时我没有覆盖方法),但得到了相同的结果。 我的代码: Event.java 城市JAVA 事件Controller.java 事件条目。html 我正在使用一个嵌入式H2数据库,其中有一个用于将数据填充到数据库中的文件(我没有文件,
如果我跑: 我会得到一张空名单。我猜它与名称空间有关,但我不知道如何修复它。
问题内容: 我在Android中有一个客户端应用程序,用于将文件发送到服务器。服务器使用Apache Commons FileUpload API来解析表单数据值。 该发送该请求: 服务器代码: 问题就在这里。返回的列表为空,我无法获取表单数据值。 问题答案: 如果您已经(隐式)预先解析了请求正文,则此位置将为空。HTTP请求正文只能被读取/解析 一次 (因为客户端仅发送一次,并且不会多次发送)。
我对Spring编程是新手。我正在用Reactor/Webflux项目测试反应式编程。 数据库注册通过POST工作得很好。 我的模型: 我的存储库 我的用户服务
我试图使用JPA findAll获取所有记录。如果我在终端中运行相同的查询,结果会得到一些行,但不是通过JPA。我在stackoverflow上尝试了其他答案,但都不起作用。我尝试添加公共getter和setter,尽管我假设这是通过注释完成的。 型号类别: 服务等级: 编辑:添加存储库代码:
本文向大家介绍PowerShell函数一次返回多个返回值示例,包括了PowerShell函数一次返回多个返回值示例的使用技巧和注意事项,需要的朋友参考一下 本文介绍在自定义PowerShell函数时,如何让函数返回值,如何接收返回值,如何让不相干的内容不放到返回值数组中。 PowerShell函数体中的任何输出,一般来说,都会以返回值的形式返回给函数调用者。多个输出的内容是放到一个返回值数组中的。