[英]Spring JDBC Data Driven Update
我有一个Spring应用程序,它具有Postgres数据库的更新API端点。 用户可以提交信息,更新将反映在数据库中。 用户只提交他们必须更新的内容。 例如,考虑以下对象:
class Dog {
String name;
int age;
String breed;
// Attributes and getters/setters...
}
当用户提交更新请求时,他们只发送他们希望更新的信息,例如仅发送名称和品种。 我有以下功能,用信息更新数据库:
public void update(String name, int age, String breed, JdbcTemplate template) {
UpdateBuilder query = new UpdateBuilder();
query.from("DogTable");
boolean updated = false;
if (name != null) {
query.set("name" + " = '" + name + "'");
updated = true;
}
if (age != null) {
query.set("age" + " = '" + age + "'");
updated = true;
}
if (breed != null) {
query.set("breed" + " = '" + breed + "'");
updated = true;
}
// And so on...
if (updated) {
query.set("UpdatedTime" + " = '" + new Date() + "'");
}
query.where("someKey" + " = '" + someId + "'");
template.update(query.toString());
}
( query.set()
东西只是一个构建查询字符串的辅助类)
正如你所看到的那样,所有“给出的名字是给定的年龄?”会变得混乱。 检查。 这引出了我的问题:是否有数据驱动的方法来做到这一点? 我希望能做的是:
myJdbcTemplate.update(ListOfObjectsToUpdate, "TableName");
简单地说,JDBC模板将看到我提供的内容,并将继续使用该信息更新提供的表。 这甚至可能吗? 我意识到使用字符串构建查询很糟糕,但PreparedStatements在代码中看起来并不好(更不用说,它们没有解决这个问题)。
您可以为此目的使用COALESCE函数 - 添加用户值和现有值,如果用户值不为null(预期更新),则可以将其设置为新值。
与此类似 -
UPDATE "user" SET alternate_contact_name = COALESCE(<user value>, alternate_contact_name)
这是一个MySQL查询,但COALESCE
在Postgresql中的工作方式相同
如果user value
不为null,则将设置user value
和新值。 如果为null且column的原始值不为null,则选择原始值。 如果两者都为null则无关紧要。
通过这种方式,您可以简单地传递所有参数,避免以不整齐的方式构建查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.