Spring的JDBC模板简化了异常处理和资源管理的操作。人们只需要编写读写数据库的核心代码。JdbcTemplate是最基本的Spring JDBC模板。支持简单的crud操作以及基于索引参数的查询。
JdbcTemplate的配置
配置JdbcTemplate主要需要配置数据源并将其注入到jdbcTemplate中
配置dhcp数据源连接mysql的参考配置如下
配置数据源
@Bean
public DataSource dataSource(){
BasicDataSource ds=new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/spring_BookManager?useUnicode=true&characterEncoding=utf-8");
ds.setUsername("spring");
ds.setPassword("741258963");
return ds;
}
注入到JdbcTemplate中
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource){
return new JdbcTemplate(dataSource);
}
JdbcTemplate的基本操作
使用JdbcTemplate一般需要先注入JdbcOperations接口。JdbcOperations是一个定义了JdbcTemplate各种操作的接口。
@Autowired JdbcOperations jdbcOperations;
简单的增删改操作
增删改不会返回数据库中的数据信息。核心都是调用jdbcOperations中的update方法
//增加操作
 public void insertBook(Book book) {
 try{
 String sql="insert into book(book_name,book_author,book_press,book_price,book_description,book_photouri,remain) VALUE (?,?,?,?,?,?,?)";
 Object[] params={book.getBookName(),book.getBookAuthor(),book.getBookPress(),book.getBookPrice(),book.getBookDescription(),book.getBookPhotoUri(),book.getRemain()};
 jdbcOperations.update(sql,params);
 }
 catch (EmptyResultDataAccessException ex){
 ex.printStackTrace();
 }
 }
//删除操作
 public void deleteBook(int bookId) {
 try{
 String sql="delete from book where bookid=?";
 Object[] params={bookId};
 jdbcOperations.update(sql,params);
 }
 catch (EmptyResultDataAccessException ex){
 ex.printStackTrace();
 }
 }
//修改操作
 public void updateBook(Book book) {
 try{
 String sql="update book set book_name=?,book_author=?,book_press=?,book_price=?,book_description=?,book_photouri=?,remain=? where bookid=?";
 Object[] params={book.getBookName(),book.getBookAuthor(),book.getBookPress(),book.getBookPrice(),book.getBookDescription(),book.getBookPhotoUri(),book.getRemain(),book.getBookId()};
 jdbcOperations.update(sql,params);
 }
 catch (EmptyResultDataAccessException ex)
 {
 ex.printStackTrace();
 }
 }
较复杂的查询操作
查询操作主要需要从ResultSet中提取数据并构建域对象。
public List<Book> listBook(int startIndex, int pageSize) {
try{
String sql="select * from book limit ?,? ";
Object[] params={startIndex,pageSize};
return jdbcOperations.query(sql,params, new RowMapper<Book>() {
@Override
public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
Book book=new Book();
book.setBookId(rs.getInt("bookid"));
book.setBookName(rs.getString("book_name"));
book.setBookAuthor(rs.getString("book_author"));
book.setBookPress(rs.getString("book_press"));
book.setBookPrice(rs.getFloat("book_price"));
book.setBookDescription(rs.getString("book_description"));
book.setBookPhotoUri(rs.getString("book_photouri"));
book.setRemain(rs.getInt("remain"));
return book;
}
});
}