java - 如何在 Java 中仅更新 @Transactional 方法中更改的字段?
问题描述
美好的一天亲爱的开发者!我需要解决一些与我的方法相关的问题。我需要创建一个允许我更改对象的编辑/更新方法。
条件之一是只有用户更改的字段才能在数据库中更改。不应覆盖所有字段。示例:旧值名称 -> “Jack”,新值名称 -> “Bob”,应该更改 . 但是,如果旧值是 name ->“Jack”,而新值是 name ->“Jack”,则不应覆盖该字段,因为值相等。
我需要我的方法来仅检查和更改已更改的字段并在数据库中插入更改。
我尝试使用 sql 完成任务,但不幸的是我不知道如何设置值(如果新值现在与 DB 中的值相同,则不执行任何更新):
@Transactional(transactionManager = TransactionManagerConfig.TX_MANAGER_MAIN)
public void editUserContacts(User user) {
Connection connection = DataSourceUtils.getConnection(mainDataSource);
String sql = "UPDATE `" + userSchema + "`.l_user " +
" SET user_phone_number = @phoneNumber," +
"firstname = @fullName," +
"user_country = @userCountry," +
"house_phone_number = @phoneAlternative," +
" WHERE l_user_id=? , " +
"user_phone_number != @phoneNumber OR IS NULL," +
"firstName != @fullName OR IS NULL," +
"user_country != @userCountry OR IS NULL," +
"house_phone_number != @phoneAlternative OR IS NULL,;
try (
PreparedStatement statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)
) {
statement.executeUpdate();
statement.getUpdateCount();
} catch (SQLException e) {
throw new DAOException(e);
}
}
也许我需要先做 SELECT ,或者使用 equals 比较每个字段?请告诉我至少一个值的示例,我怎样才能正确地执行我的任务?
PS如果新值不等于旧值,我想更新我的值。但是如果新旧值相等,则什么都不会发生
我将非常感谢您的帮助!
解决方案
推荐阅读
- angular - localStorage.getItem('user') 为空
- java - 调试 gradle bootRun 有 server=n
- sql - 使用 postgres 表中另一列的值更新列
- azure - Azure 函数调用外部 REST API,4 分钟后出现 504 服务器错误
- javascript - 在脚本控制下的 Google Docs 中,插入表格后自动插入的段落可以通过编程方式解决吗?
- html - 显示微调器,直到从 HTTP 请求自动完成字段加载结果
- docker - docker rebase 一个层到一个新的图像?
- python - 根据值移除键值对
- angular - 注入器解决方法后的 Angular 服务循环依赖警告,这对我来说是好的还是糟糕的设计?
- laravel - Laravel 中的条纹支付集成问题。当我提交表格时,它在下面给出