ApplicationDaoImpl.java
package org.xandercat.pmdb.dao;
import java.time.LocalDate;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.xandercat.pmdb.dto.ApplicationAttribute;
import org.xandercat.pmdb.util.DBUtil;
import org.xandercat.pmdb.util.format.FormatUtil;
@Component
public class ApplicationDaoImpl implements ApplicationDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void addApplicationAttribute(ApplicationAttribute applicationAttribute) {
final String sql = "INSERT INTO application_attributes(attribute_name, attribute_value, attribute_date) VALUES (?, ?, ?)";
jdbcTemplate.update(sql, ps -> {
ps.setString(1, applicationAttribute.getName());
ps.setString(2, applicationAttribute.getValue());
DBUtil.setLocalDate(ps, 3, applicationAttribute.getDate());
});
}
@Override
public void updateApplicationAttribute(ApplicationAttribute applicationAttribute) {
final String sql = "UPDATE application_attributes SET attribute_value = ? WHERE attribute_name = ? AND attribute_date = ?";
jdbcTemplate.update(sql, ps -> {
ps.setString(1, applicationAttribute.getValue());
ps.setString(2, applicationAttribute.getName());
DBUtil.setLocalDate(ps, 3, applicationAttribute.getDate());
});
}
@Override
public Optional<ApplicationAttribute> getApplicationAttribute(String name, LocalDate date) {
final String sql = "SELECT attribute_value FROM application_attributes WHERE attribute_name = ? AND attribute_date = ?";
final ApplicationAttribute applicationAttribute = new ApplicationAttribute();
jdbcTemplate.query(sql, ps -> {
ps.setString(1, name);
DBUtil.setLocalDate(ps, 2, date);
}, rs -> {
applicationAttribute.setName(name);
applicationAttribute.setDate(date);
applicationAttribute.setValue(rs.getString(1));
});
return FormatUtil.isBlank(applicationAttribute.getName())? Optional.empty() : Optional.of(applicationAttribute);
}
}