我有一个简单的模型,我希望使用Spring JDBCTemplate在MySQL中保存这些实例。我使用DAO使用简单的sql(insert into user(id, email...) value (:id, :email...)
)保存模型对象。是否有任何框架可以从模型中提取参数(当模型只是带有公共字段的POJO时)。所以,我需要类似于Spring的BeanPropertySqlParameterSource
,但能够使用公共字段而不是属性。
模型类的示例:
public class User {
public int id;
public String email;
public String login;
public String password;
}
我知道扩展AbstractSqlParameterSource
可以解决我的问题,但我希望找到现有的框架。
UPD
基于AbstractSqlParameterSource
的实施:
public class PublicFieldsSqlParameterSource extends AbstractSqlParameterSource {
Map<String, Object> props = new HashMap<>();
public PublicFieldsSqlParameterSource(Object object) {
Field[] fields = object.getClass().getFields();
for (Field field : fields) {
String name = field.getName();
try {
Object value = field.get(object);
props.put(name, value);
} catch (IllegalAccessException ignored) {
}
}
}
@Override
public boolean hasValue(String paramName) {
return props.containsKey(paramName);
}
@Override
public Object getValue(String paramName) throws IllegalArgumentException {
return props.get(paramName);
}
}
答案 0 :(得分:1)
正如我在评论中提到的,如果不想要getter / setter的原因是代码混乱,我建议Lombok。
这是一个典型的模型类,可以由Spring(@NoArgsConstructor
+ @Data
为getter和setter构建)。 @Builder
和@AllArgsConstructor
允许生成包含所有字段的Builder模式。
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SubscriptionData {
@Id
@Indexed
private UUID key;
private String productId;
private String receiptString;
private Date expirationDate;
}
以下是带有构造函数注入的Spring服务的示例。 @RequiredArgsConstructor
创建一个包含所有未初始化的final字段的构造函数,onConstructor参数将Spring - @Autowired
注释添加到其中。如果你有许多服务依赖,这可以消除一些混乱。
@Slf4j
@Service
@RequiredArgsConstructor(onConstructor = @__({ @Autowired }))
public class OperatorServiceImpl implements OperatorService {
private final WhoisService whoisService;
...
}