一直想學習怎么使用spring 的事務(wù),在網(wǎng)上查了很多資料,還是不知道怎么寫,大都是基于注解方式的,要么就是基于hibernate的事務(wù),而且沒有完整的例子,都是代碼片段,這里我自己寫了一個簡單的demo,供給大家學習
1、建立一個對象(跟數(shù)據(jù)庫中的表對應(yīng))
Java代碼
- package hb.bean;
- public class Book {
- private int id;
- private String name;
- private String author;
- private int num;
- public int getNum() {
- return num;
- }
- public void setNum(int num) {
- this.num = num;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getAuthor() {
- return author;
- }
- public void setAuthor(String author) {
- this.author = author;
- }
- }
2、建立一個接口(實現(xiàn)對表的相關(guān)操作)
Java代碼
- package hb.dao;
- import hb.bean.Book;
- import java.util.List;
- import org.springframework.transaction.annotation.Transactional;
- @Transactional
- public interface BookDAO {
- //查看book表中的所有數(shù)據(jù)
- public List listBook();
- //向book表中插入一條數(shù)據(jù)
- public void insertBook(Book book);
- }
3、實現(xiàn)接口的操作
Java代碼
- package hb.dao.imp;
- import hb.bean.Book;
- import hb.dao.BookDAO;
- import hb.row.UserRowMapper;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.List;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.jdbc.core.RowMapper;
- import org.springframework.jdbc.core.support.JdbcDaoSupport;
- import org.springframework.jdbc.datasource.DataSourceTransactionManager;
- import org.springframework.transaction.TransactionStatus;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.transaction.support.TransactionCallbackWithoutResult;
- import org.springframework.transaction.support.TransactionTemplate;
- import sun.jdbc.odbc.ee.DataSource;
- @Transactional
- public class BookDAOImpl extends JdbcDaoSupport implements BookDAO {
- public DataSourceTransactionManager transactionManager;
- public void setTransactionManager(DataSourceTransactionManager transactionManager) {
- this.transactionManager = transactionManager;
- }
- @SuppressWarnings("unchecked")
- public List listBook() {
- String sql = "select * from book";
- //JdbcDaoSupport里面有jdbcTemplate這個對象的set方法.JdbcTemplate這個類需要配置數(shù)據(jù)源
- List list = this.getJdbcTemplate().query(sql, new UserRowMapper());
- return list;
- }
- public void insertBook(final Book book) {
- final String sql = "insert into book(id,name,author,num)values(?,?,?,?)";
- TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
- final JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
- transactionTemplate.execute(new TransactionCallbackWithoutResult(){
- @Override
- protected void doInTransactionWithoutResult(TransactionStatus arg0) {
- Object[] params = new Object[] {book.getId(), book.getName(), book.getAuthor(),book.getNum() };
- //下面的語句是用來測試事務(wù)異常的情況
- // new Integer("huangbiao");
- jdbcTemplate.update(sql, params);
- }
- });
- }
- }
4、繼承RowMapper 接口接受返回過來的結(jié)果集
Java代碼
- package hb.row;
- import hb.bean.Book;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import org.springframework.jdbc.core.RowMapper;
- public class UserRowMapper implements RowMapper {
- public Object mapRow(ResultSet rs,int index) throws SQLException {
- Book book = new Book();
- System.out.println(rs.getString("name"));
- book.setName(rs.getString("name"));
- return book;
- }
- }