带有 pojo 注解的 BeanPropertySqlParameterSource

BeanPropertySqlParameterSource with pojo annotations

我有以下

@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 持久性注释或类似的东西来为我处理这个问题吗?

JDBC 模板不提供这样的东西,但是你可以很容易地使用反射来扫描所有 @Column 字段并将其值填充到 MapSqlParameterSource 这是 [= 的另一个实现13=]。像下面这样的东西,为了方便,你可以把它包装成一个函数:

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)