Преобразуем пример Jdbc DAO с использованием Spring.
Шаг 1. Подключим Spring
Добавим в проект зависимости:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.4.RELEASE</version>
</dependency>
Класс Token остаётся без изменений. Класс TokenDAO выглядит так:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
public class TokenDAO {
private DataSource dataSource;
public TokenDAO(DataSource dataSource){
this.dataSource = dataSource;
}
public void insert(Token token){
try (Connection connection = dataSource.getConnection()) {
PreparedStatement command = connection.prepareStatement("insert into token (id, name) values (?, ?)");
command.setInt(1, token.getId());
command.setString(2, token.getName());
command.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
public void update(Token token){
try (Connection connection = dataSource.getConnection()) {
PreparedStatement command = connection.prepareStatement("update token set name=? where id=?");
command.setString(1, token.getName());
command.setInt(2, token.getId());
command.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
public Token getdById(int id){
try (Connection connection = dataSource.getConnection()){
PreparedStatement command = connection.prepareStatement("select * from token where id = ?");
command.setInt(1, id);
Token token = null;
ResultSet resultSet = command.executeQuery();
if (resultSet.next()) {
token = new Token(
resultSet.getInt("id"),
resultSet.getString("name"));
}
return token;
} catch (SQLException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
Класс App:
import org.springframework.context.annotation.*;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class App {
@Bean
TokenDAO TokenDAO (){
return new TokenDAO(myDataSource());
}
@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);
TokenDAO tokenDAO = context.getBean(TokenDAO.class);
Token token2 = new Token(2, "два");
tokenDAO.insert(token2);
Token token1 = tokenDAO.getById(1);
System.out.println(token1.getName());
token1.setName("только один");
tokenDAO.update(token1);
context.close();
}
}
Шаг 2. Используем SimleJdbcTemplate.
Класс App :
import org.springframework.context.annotation.*;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class App {
@Bean
JdbcTemplate myJdbcTemplate() {
return new JdbcTemplate(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);
TokenDAO tokenDAO = context.getBean(TokenDAO.class);
Token token2 = new Token(2, "два");
tokenDAO.insert(token2);
Token token1 = tokenDAO.getById(1);
System.out.println(token1.getName());
token1.setName("только один");
tokenDAO.update(token1);
context.close();
}
}
Класс TokenDAO:
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.sql.SQLException;
import java.sql.ResultSet;
public class TokenDAO {
private JdbcTemplate jdbcTemplate;
public TokenDAO(JdbcTemplate jdbcTemplate){
this.jdbcTemplate = jdbcTemplate;
}
public void insert(Token token){
jdbcTemplate.update("insert into token (id, name) values (?, ?)",
token.getId(),
token.getName());
}
public void update(Token token){
jdbcTemplate.update("update token set name=? where id=?",
token.getName(),
token.getId());
}
public Token getById(int id){
return jdbcTemplate.queryForObject("select * from token where id = ?",
new RowMapper<Token>() {
public Token mapRow(ResultSet rs, int rowNum) throws SQLException {
return new Token(rs.getInt("id"),rs.getString("name"));
}
},id);
}
}
RowMapper можно заменить на Lambda.
Вместо позиционных лучше использовать именованные параметры.