SimpleJdbcInsert等效于更新

Jam*_*ves 4 spring jdbc sql-update simplejdbcinsert

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

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

insert.execute(new BeanPropertySqlParameterSource(abc));
Run Code Online (Sandbox Code Playgroud)

是否有一些相当于此类进行更新?例如,假设我们正在处理单列主键,下面的内容将是一个方便的接口:

final SimpleJdbcUpdate update = new SimpleJdbcUpdate(dataSource).withTableName("abc").withIdColumn("abcId");

update.execute(new BeanPropertySqlParameterSource(abc));
Run Code Online (Sandbox Code Playgroud)

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

谢谢Jay

P44*_*44T 6

Spring JIRA中存在一个关于缺少SimpleJdbcUpdate类的问题:https://jira.springsource.org/browse/SPR-4691.你可能想在那里投票.


ncl*_*ord 5

对于以后的读者-我想出了一个使用反射的便捷功能;

适用于简单的pojos:

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));
    }
Run Code Online (Sandbox Code Playgroud)

用法示例:

dao_update(database, "employee", my_employee, "id");
Run Code Online (Sandbox Code Playgroud)

产生:

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


Mic*_*l W 4

您必须使用 JdbcTemplate

参见:13.2.1.1 JdbcTemplate类使用示例

前任:

this.jdbcTemplate.update(
    "update t_actor set = ? where id = ?", 
    "Banjo", 5276L);
Run Code Online (Sandbox Code Playgroud)

  • @JamesHargreaves:您还可以使用 Spring Data JDBC,它没有 JPA 的复杂性,而且还有有用的 SpringRepositories,可以更轻松地处理 bean。请参阅:https://spring.io/projects/spring-data-jdbc (2认同)