添加 Spring JDBC 基于注解的支持
Add Spring JDBC support based on annotations
我的任务是将基于 Map
的存储升级为基于数据库的存储。我的项目配置基于注释。你能向我解释一下我应该采取哪些步骤来实现它吗?以及如何更改我的 dao
图层代码:
public class TicketDao {
Set<Ticket> tickets = new HashSet<>();
public Set<Ticket> getAll() {
return tickets;
}
public void remove(Ticket ticket){
tickets.remove(ticket);
}
public void put(Ticket ticket){
tickets.add(ticket);
}
}
- 创建数据库和模式
配置 DataSource
和 JdbcTemplate
。最简单的配置:
@Configuration
public class JdbcConfig {
@Bean
public DataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("");
dataSource.setUrl("");
dataSource.setUsername("");
dataSource.setPassword("");
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(dataSource());
}
}
将JdbcTemplate
注入dao并使用
public class TicketDao {
public static final String DELETE_QUERY = "delete from Ticket where id = ?";
public static final String INSERT_QUERY = "insert into Ticket values(?, ?)";
public static final String GET_ALL_QUERY = "select * from Tickets";
@Autowired
JdbcTemplate jdbcTemplate;
public Set<Ticket> getAll() {
return new HashSet<>(jdbcTemplate.query(GET_ALL_QUERY, new RowMapper<Ticket>() {
@Override
public Ticket mapRow(ResultSet rs, int rowNum) throws SQLException {
Ticket ticket = new Ticket();
ticket.setId(rs.getString(1));
//other fields mapping
return ticket;
}
}));
}
public void remove(Ticket ticket){
jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement statement = con.prepareStatement(DELETE_QUERY);
statement.setString(1, ticket.getId());
return statement;
}
});
}
public void put(Ticket ticket){
Object[] values = {ticket.getId(), ticket.getName()};
int[] types = {Types.VARCHAR, Types.VARCHAR};
jdbcTemplate.update(INSERT_QUERY, values, types);
}
}
我的任务是将基于 Map
的存储升级为基于数据库的存储。我的项目配置基于注释。你能向我解释一下我应该采取哪些步骤来实现它吗?以及如何更改我的 dao
图层代码:
public class TicketDao {
Set<Ticket> tickets = new HashSet<>();
public Set<Ticket> getAll() {
return tickets;
}
public void remove(Ticket ticket){
tickets.remove(ticket);
}
public void put(Ticket ticket){
tickets.add(ticket);
}
}
- 创建数据库和模式
配置
DataSource
和JdbcTemplate
。最简单的配置:@Configuration public class JdbcConfig { @Bean public DataSource dataSource(){ DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(""); dataSource.setUrl(""); dataSource.setUsername(""); dataSource.setPassword(""); return dataSource; } @Bean public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(dataSource()); } }
将
JdbcTemplate
注入dao并使用public class TicketDao { public static final String DELETE_QUERY = "delete from Ticket where id = ?"; public static final String INSERT_QUERY = "insert into Ticket values(?, ?)"; public static final String GET_ALL_QUERY = "select * from Tickets"; @Autowired JdbcTemplate jdbcTemplate; public Set<Ticket> getAll() { return new HashSet<>(jdbcTemplate.query(GET_ALL_QUERY, new RowMapper<Ticket>() { @Override public Ticket mapRow(ResultSet rs, int rowNum) throws SQLException { Ticket ticket = new Ticket(); ticket.setId(rs.getString(1)); //other fields mapping return ticket; } })); } public void remove(Ticket ticket){ jdbcTemplate.update(new PreparedStatementCreator() { @Override public PreparedStatement createPreparedStatement(Connection con) throws SQLException { PreparedStatement statement = con.prepareStatement(DELETE_QUERY); statement.setString(1, ticket.getId()); return statement; } }); } public void put(Ticket ticket){ Object[] values = {ticket.getId(), ticket.getName()}; int[] types = {Types.VARCHAR, Types.VARCHAR}; jdbcTemplate.update(INSERT_QUERY, values, types); } }