竹一一 2024-02-06 20:56 采纳率: 10.5%
浏览 2
已结题

关于SqlServer的更新操作

Spring Boot+Sqlserver的一个更新操作,如果更新的列有空值,那么更新时会将更新的内容填入,但是已存在的字段不会更新。

更新数据:

img

更新完成之后的数据:

img

name,position字段的数据还是原来的数据,求告知解决方案。

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-06 21:00
    关注

    引自免费微信小程序:皆我百晓生

    在Spring Boot中与SQL Server进行交互时,如果您想在更新操作中保留已存在但未在更新语句中指定的字段值,确保它们不被重置为空,关键在于构造正确的UPDATE SQL语句。您需要仅针对有新值的字段执行更新。

    假设您的实体类是Employee,并且您使用了JPA或MyBatis等ORM框架,那么在更新操作中,通常会根据主键找到对象并修改需要更新的属性,其余未更改的属性会被自动保留(除非您显式地将它们设置为空)。

    以下是使用JPA的Repository方法示例:

    @Repository
    public interface EmployeeRepository extends JpaRepository<Employee, Long> {
        @Transactional
        @Modifying
        @Query("UPDATE Employee e SET e.email = :email, e.salary = :salary WHERE e.id = :id")
        int updateEmployee(@Param("id") Long id, @Param("email") String email, @Param("salary") Double salary);
    }
    

    在这个例子中,我们只更新了emailsalary字段,如果nameposition字段在请求时不提供新值,则它们不会被修改。

    如果您直接编写SQL语句,并且希望手动控制哪些字段参与更新,可以构建一个动态的SQL更新语句,只包含那些非空的新值:

    String sql = "UPDATE employees SET ";
    if (StringUtils.isNotBlank(newEmail)) {
        sql += "email = :newEmail, ";
    }
    if (newSalary != null) {
        sql += "salary = :newSalary, ";
    }
    // 去掉末尾多余的逗号和空格,并添加WHERE条件
    sql = sql.trim().substring(0, sql.lastIndexOf(",")) + " WHERE id = :employeeId";
    
    jdbcTemplate.update(sql, new MapSqlParameterSource()
            .addValue("newEmail", newEmail)
            .addValue("newSalary", newSalary)
            .addValue("employeeId", employeeId));
    

    以上代码片段基于Spring的JdbcTemplate进行更新操作,它会根据提供的新值动态构建SQL更新语句,从而避免了未提供新值的字段被错误地更新为空的情况。

    请确保根据您的实际数据模型和需求调整上述代码示例。同时,在处理数据库操作时,请始终注意SQL注入风险,并采取必要的防护措施。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月6日
  • 创建了问题 2月6日

悬赏问题

  • ¥15 ssh登录页面的问题
  • ¥60 渗透一个指定银行app,拿到客户信息,需要什么级别
  • ¥50 关于在matlab上对曲柄摇杆机构上一点的运动学仿真
  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥15 用MATLAB汇总拟合图