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;
}
});
}