spring - SimpleJdbcInsert 等价于更新

标签 spring jdbc sql-update simplejdbcinsert

我正在使用 Spring 的 SimpleJdbcInsert 类来创建实体 - 例如:

final SimpleJdbcInsert insert = new SimpleJdbcInsert(dataSource).withTableName("abc");

insert.execute(new BeanPropertySqlParameterSource(abc));

是否有一些等效的此类用于进行更新?例如,假设我们正在处理单列主键,如下所示将是一个方便的界面:
final SimpleJdbcUpdate update = new SimpleJdbcUpdate(dataSource).withTableName("abc").withIdColumn("abcId");

update.execute(new BeanPropertySqlParameterSource(abc));

Spring 是否在某处提供了这种开箱即用的功能?

谢谢

最佳答案

对于任何 future 的读者 - 我想出了一个使用反射的便利功能;

适用于简单的 pojo:

public void dao_update(NamedParameterJdbcTemplate database, String table, Object pojo, String[] keys) {

        StringBuilder sqlBuilder = new StringBuilder("UPDATE ");
        sqlBuilder.append(table);
        sqlBuilder.append(" SET ");
        boolean first = true;
        for (Field field : pojo.getClass().getDeclaredFields()) {
            if (!first) {
                sqlBuilder.append(",");
            }
            first = false;
            sqlBuilder.append(field.getName());
            sqlBuilder.append(" = :");
            sqlBuilder.append(field.getName());
        }


        first = true;
        for (String key : keys) {
            if (first) {
                sqlBuilder.append(" WHERE ");
            } else {
                sqlBuilder.append(" AND ");
            }
            first = false;
            sqlBuilder.append(key);
            sqlBuilder.append("= :");
            sqlBuilder.append(key);
        }
        database.getJdbcOperations().update(sqlBuilder.toString(), new BeanPropertySqlParameterSource(pojo));
    }

用法示例:
dao_update(database, "employee", my_employee, "id");

产生:

更新员工 SET id = :id, name = :name,salary = :salary WHERE id = :id

关于spring - SimpleJdbcInsert 等价于更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10722882/

相关文章:

spring - 无法解析导入 org.springframework - Java(268435846)

java - spring依赖注入(inject)会创建单例对象吗?

mysql - glassfish 空闲超时后数据库连接不会释放

php - 在 PHP 中使用触发器和不同的分隔符更新 mySQL 表数据

mysql - mysql中更新和选择同一个表问题

spring - 无法使 Spring Batch 条件流工作

java - 在 Spring Security 中的 FORM_LOGIN_FILTER 之后添加可选的身份验证步骤

java - 如何在 Jetty 8 中使用 JDBC 连接池?

java - 由 : java.net.NoRouteToHostException: No route to host 引起

SQL/DB2 - 同时检索值和更新/增量