带有pojo注释的BeanPropertySqlParameterSource

时间:2019-07-08 17:39:39

标签: java spring jdbctemplate

我有以下

@Data //Lombok annotation to generate getters and setters
@Entity
public class TradeLog {
    @Id
    @Column(name="P_TRADE_ID")
    private String tradeId;
}

tradeLog.setTradeId("1");
SqlParameterSource insertParam = new BeanPropertySqlParameterSource(tradeLog);
    System.out.println(insertProc.execute(insertParam));

我收到此错误Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: Required input parameter 'P_TRADE_ID' is missing

我知道我可以直接在jdbc模板上进行映射,但是有什么办法可以使用java持久性注释或类似的东西为我处理呢?

1 个答案:

答案 0 :(得分:1)

JDBC模板没有提供这种功能,但是您可以轻松地使用反射来扫描所有@Column字段并将其值填充到MapSqlParameterSource,这是SqlParameterSource的另一种实现。如下所示,您可以将其包装到一个函数中以方便使用:

tradeLog.setTradeId("1");

//Create MapSqlParameterSource based on tradeLog
MapSqlParameterSource param = new MapSqlParameterSource();
for(Field field :  TradeLog.class.getDeclaredFields()) {
    Column column =   field.getAnnotation(Column.class);

    if(column != null) {
        field.setAccessible(true);
        param.addValue(column.name(), field.get(tradeLog));     
    }
}

insertProc.execute(param)