当QueryWrapper<User> queryWrapper = new QueryWrapper<>();定义为全局时,每个方法执行时都会调用其他方法中的条件。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
@Autowired
private UserDao userDao;
@Override
public boolean login(User user) {
queryWrapper.eq("username",user.getUsername());
User user1 = userDao.selectOne(queryWrapper);
if (user1!=null&&user1.getPassword().equals(user.getPassword())){
return true;
}else {
return false;
}
}
@Override
public Page<User> getAllusersByPage(String username, Integer current, Integer size) {
queryWrapper.like("username",username);
Long count = userDao.selectCount(queryWrapper);
return userDao.selectPage(new Page<>(current,size,count),queryWrapper);
}
@Override
public User queryUserByUsername(String username) {
queryWrapper.eq("username",username);
return userDao.selectOne(queryWrapper);
}
当我执行此方法时,
@Override
public Page<User> getAllusersByPage(String username, Integer current, Integer size) {
queryWrapper.like("username",username);
Long count = userDao.selectCount(queryWrapper);
return userDao.selectPage(new Page<>(current,size,count),queryWrapper);
}
其sql语句为下图,会把其他方法中的条件执行,出现不是我们想要的结果
==> Preparing: SELECT COUNT(*) AS total FROM user WHERE isdelete = 0 AND (username = ? AND username = ? AND username LIKE ?)
==> Parameters: user(String), user(String), %%(String)
<== Columns: total
<== Row: 1
<== Total: 1
正确写法为
@Autowired
private UserDao userDao;
@Override
public boolean login(User user) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("username",user.getUsername());
User user1 = userDao.selectOne(queryWrapper);
if (user1!=null&&user1.getPassword().equals(user.getPassword())){
return true;
}else {
return false;
}
}
@Override
public Page<User> getAllusersByPage(String username, Integer current, Integer size) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("username",username);
Long count = userDao.selectCount(queryWrapper);
return userDao.selectPage(new Page<>(current,size,count),queryWrapper);
}
@Override
public User queryUserByUsername(String username) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("username",username);
return userDao.selectOne(queryWrapper);
}