更新方法中的可选项始终运行并将值设置为0

如何解决更新方法中的可选项始终运行并将值设置为0

我正在使用Optionals的更新方法,该方法一旦运行将更新其各自的postgres db列,前几个是字符串,并且更新良好。最后两个是INT(授权和ChapterProgress),当我调用它们中的第一个以更新其值时,它将另一个基于INT的可选值设置为0,反之亦然。问题代码是下面的最后两个可选选项:

private final UserDao userDao;

//constructor
@Autowired
public UserService(@Qualifier("postgres1")UserDao userDao) {
    this.userDao= userDao;
}
//methods

public int addUser(UUID id,User user) {
    UUID newId = Optional.ofNullable(id)
            .orElse(UUID.randomUUID());
    return userDao.insertUser(newId,user);
}

public List<User> getAllUsers(){
    return userDao.selectAllUsers();
}

@GetMapping
public Optional<User> getUserById(UUID id){
    return userDao.selectUserByID(id);
}

public int deleteUser(UUID id) {
    return userDao.deleteUserById(id);
}

@PutMapping
public void updateUser(UUID id,User user) {

Optional.ofNullable(user.getSurname())
.filter(surname -> !StringUtils.isEmpty(surname))
.map(StringUtils::capitalize)
.ifPresent(surname -> userDao.updateSurname(id,surname));

Optional.ofNullable(user.getFirstname())
.filter(firstname -> !StringUtils.isEmpty(firstname))
.map(StringUtils::capitalize)
.ifPresent(firstname -> userDao.updateFirstname(id,firstname));

Optional.ofNullable(user.getUsername())
.filter(uname -> !StringUtils.isEmpty(uname))
.ifPresent(uname -> userDao.updateUsername(id,uname));

Optional.ofNullable(user.getPassword())
.filter(pw -> !StringUtils.isEmpty(pw))
.ifPresent(pw -> userDao.updatePassword(id,pw));

Optional.ofNullable(user.getAuthorisation())
.filter(auth -> !StringUtils.isEmpty(auth))
.ifPresent(auth -> userDao.updateAuthorisation(id,auth));

Optional.ofNullable(user.getChapterProgress())
.filter(cp -> !StringUtils.isEmpty(cp))
.ifPresent(cp -> userDao.updateChapterProgress(id,cp));

}

我尝试注释掉每个过滤器上的.filter行,但没有任何改变。

使用者Dao看起来像这样。

public interface UserDao {

int insertUser(UUID id,User user);//good

default int insertUser(User user) {//good
    UUID id = UUID.randomUUID();
    return insertUser(id,user);
}

List<User> selectAllUsers();//good

Optional<User> selectUserByID(UUID id);//good

int deleteUserById(UUID id);//good

int updateUserById(UUID id,User newUser);//good

int updateSurname(UUID id,String surname);//good

int updateFirstname(UUID id,String firstname);//good

int updateUsername(UUID id,String username);//good

int updatePassword(UUID id,String password);//good

int updateAuthorisation(UUID id,int authorisation);//

int updateChapterProgress(UUID id,int chapterProgress);//

并在UserDataAccessServcie中实现,如下所示:

private JdbcTemplate jdbcTemplate;

@Autowired
public UserDataAccessService(JdbcTemplate jdbcTemplate) {
    this.jdbcTemplate= jdbcTemplate;
}

@Override//create
public int insertUser(UUID id,User user) {
    String sql ="INSERT INTO users(id,surname,firstname,username,password,authorisation,chapterprogress) VALUES (?,?,?);";
    return jdbcTemplate.update(sql,id,user.getSurname(),user.getFirstname(),user.getUsername(),user.getPassword(),user.getAuthorisation(),user.getChapterProgress()
    );
}

@Override//read all
public List<User> selectAllUsers() {
final String sql= "SELECT * FROM users";
    return jdbcTemplate.query(sql,(resultSet,i)->{
        return new User(UUID.fromString(
                resultSet.getString("id")),resultSet.getString("surname"),resultSet.getString("firstName"),resultSet.getString("userName"),resultSet.getString("password"),resultSet.getInt("authorisation"),resultSet.getInt("chapterProgress"));
    });
}

@Override//read single
public Optional<User> selectUserByID(UUID id) {
    final String sql= "SELECT * FROM users WHERE id=?";
    User user= jdbcTemplate.queryForObject(sql,new Object[] {id},i) ->{
        return new User(
                UUID.fromString(resultSet.getString("id")),("firstName"),("userName"),("password"),resultSet.getInt("chapterProgress"));
    });
    return Optional.ofNullable(user);
}

@Override//update//possibly to authorisation problem,consider changing 
        //to void to stop returning a '0'
public int updateUserById(UUID id,User newUser) {
    return 1;
}

@Override
public int updateSurname(UUID id,String surname) {
    String sql ="UPDATE users"
            + " SET surname = ? "
            + "WHERE id = ?";
    return jdbcTemplate.update(sql,id);
}

@Override
public int updateFirstname(UUID id,String firstname) {
    String sql ="UPDATE users SET firstName = ? WHERE id = ?";
    return jdbcTemplate.update(sql,id);
}

@Override
public int updateUsername(UUID id,String username) {
    String sql = "UPDATE users SET username = ? WHERE id = ?";
    return jdbcTemplate.update(sql,id);
}

@Override
public int updatePassword(UUID id,String password) {
    String sql = "UPDATE users SET password = ? WHERE id = ?";
    return jdbcTemplate.update(sql,id);
}

@Override
public int updateAuthorisation(UUID id,int authorisation) {
    String sql = "UPDATE users SET authorisation = ? WHERE id = ?";
    return jdbcTemplate.update(sql,id);
}

@Override
public int updateChapterProgress(UUID id,int chapterProgress) {
    String sql = "UPDATE users SET chapterprogress = ? WHERE id = ?";
    return jdbcTemplate.update(sql,chapterProgress,id);
}

@Override//delete
    public int deleteUserById(UUID id) {
        final String sql= "DELETE FROM users WHERE id=?";
        jdbcTemplate.update(sql,id);
        return 1;
    }

我有种忘记/做一些简单的事情的感觉,但是对我的帮助非常感谢

谢谢

解决方法

结果是这是两个get方法的返回类型。通过使用Integer作为数据类型并返回Integer而不是int,它允许db操作并存储它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-