gpt4 book ai didi

java - Spring JDBC中如何组合多个参数源?

转载 作者:IT老高 更新时间:2023-10-28 13:59:13 26 4
gpt4 key购买 nike

Spring JDBC 中的数据库方法接受单个参数源。例如 -

int org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(String sql, SqlParameterSource paramSource) throws DataAccessException

是否可以将多个参数源组合在一起?例如,假设我有一个 bean Order -

class Order {
int id;
float price;
int customerId;
Date date;
//Lots of other fields
}

我想用 recordModificationTimeaccessLevel 等一些附加字段来保存这个 bean。

如果我对 bean 之外存在的这些额外字段使用 MapSqlParameterSource,我不能使用 BeanPropertySqlParameterSource,因为该方法只接受一个参数源。必须对我的所有数据使用 MapSqlParameterSource 意味着我必须手动提取所有 bean 属性,这是很多工作。

解决这个问题的最佳方法是什么?

最佳答案

您可以扩展 AbstractSqlParameterSource 并聚合 BeanProperty 和 Map 版本:

public class CombinedSqlParameterSource extends AbstractSqlParameterSource {
private MapSqlParameterSource mapSqlParameterSource = new MapSqlParameterSource();
private BeanPropertySqlParameterSource beanPropertySqlParameterSource;

public CombinedSqlParameterSource(Object object) {
this.beanPropertySqlParameterSource = new BeanPropertySqlParameterSource(object);
}

public void addValue(String paramName, Object value) {
mapSqlParameterSource.addValue(paramName, value);
}

@Override
public boolean hasValue(String paramName) {
return beanPropertySqlParameterSource.hasValue(paramName) || mapSqlParameterSource.hasValue(paramName);
}

@Override
public Object getValue(String paramName) {
return beanPropertySqlParameterSource.hasValue(paramName) ? beanPropertySqlParameterSource.getValue(paramName) : mapSqlParameterSource.getValue(paramName);
}

@Override
public int getSqlType(String paramName) {
return beanPropertySqlParameterSource.hasValue(paramName) ? beanPropertySqlParameterSource.getSqlType(paramName) : mapSqlParameterSource.getSqlType(paramName);
}
}

现在像这样使用它:

CombinedSqlParameterSource mySource = new CombinedSqlParameterSource(myOrder);
mySource.addValue("recordModificationTime", time);
mySource.addValue("accessLevel", level);

jdbcTemplate.update(sql, mySource);

关于java - Spring JDBC中如何组合多个参数源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13339171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com