Преобразуем пример Spring Jdbc DAO с использованием именованных параметров:
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Map;
public class TokenDAO {
private NamedParameterJdbcTemplate jdbcTemplate;
public TokenDAO(NamedParameterJdbcTemplate jdbcTemplate){
this.jdbcTemplate = jdbcTemplate;
}
public void insert(Token token){
Map<String, Object> params = new HashMap<String, Object>();
params.put("id", token.getId());
params.put("name", token.getName());
jdbcTemplate.update("insert into token (id, name) values (:id, :name)",params);
}
public void update(Token token){
Map<String, Object> params = new HashMap<String, Object>();
params.put("id", token.getId());
params.put("name", token.getName());
jdbcTemplate.update("update token set name=:name where id=:id",params);
}
public Token getById(int id){
Map<String, Object> params = new HashMap<String, Object>();
params.put("id", id);
return jdbcTemplate.queryForObject("select * from token where id = :id",
params,
new RowMapper<Token>() {
public Token mapRow(ResultSet rs, int rowNum) throws SQLException {
return new Token(rs.getInt("id"),rs.getString("name"));
}
});
}
}
Бины описываются так:
import org.springframework.context.annotation.*;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class App {
@Bean
NamedParameterJdbcTemplate myJdbcTemplate() {
return new NamedParameterJdbcTemplate(myDataSource());
}
@Bean
TokenDAO TokenDAO (){
return new TokenDAO(myJdbcTemplate());
}
@Bean
DriverManagerDataSource myDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource("jdbc:sqlite:sample.db");
dataSource.setDriverClassName("org.sqlite.JDBC");
return dataSource;
}
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(App.class);
[...]
context.close();
}
}