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