带有 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)
我有以下
@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)