随笔-26  评论-12  文章-0  trackbacks-0

一直想学习怎么使用spring 的事务,在网上查了很多资料,还是不知道怎么写,大都是基于注解方式的,要么就是基于hibernate的事务,而且没有完整的例子,都是代码片段,这里我自己写了一个简单的demo,供给大家学习

 

1、建立一个对象(跟数据库中的表对应)

 

Java代码  收藏代码
  1. package hb.bean;  
  2.   
  3. public class Book {  
  4.     private int id;  
  5.     private String name;  
  6.     private String author;  
  7.     private int num;  
  8.   
  9.     public int getNum() {  
  10.         return num;  
  11.     }  
  12.   
  13.     public void setNum(int num) {  
  14.         this.num = num;  
  15.     }  
  16.   
  17.     public int getId() {  
  18.         return id;  
  19.     }  
  20.   
  21.     public void setId(int id) {  
  22.         this.id = id;  
  23.     }  
  24.   
  25.     public String getName() {  
  26.         return name;  
  27.     }  
  28.   
  29.     public void setName(String name) {  
  30.         this.name = name;  
  31.     }  
  32.   
  33.     public String getAuthor() {  
  34.         return author;  
  35.     }  
  36.   
  37.     public void setAuthor(String author) {  
  38.         this.author = author;  
  39.     }  
  40. }  

 

 2、建立一个接口(实现对表的相关操作)

 

Java代码  收藏代码
  1. package hb.dao;  
  2.   
  3. import hb.bean.Book;  
  4. import java.util.List;  
  5. import org.springframework.transaction.annotation.Transactional;  
  6.   
  7. @Transactional  
  8. public interface BookDAO {  
  9.       
  10.     //查看book表中的所有数据  
  11.     public List listBook();  
  12.       
  13.     //向book表中插入一条数据  
  14.     public void insertBook(Book book);  
  15. }  

 

 3、实现接口的操作

 

Java代码  收藏代码
  1. package hb.dao.imp;  
  2.   
  3. import hb.bean.Book;  
  4. import hb.dao.BookDAO;  
  5. import hb.row.UserRowMapper;  
  6.   
  7. import java.sql.ResultSet;  
  8. import java.sql.SQLException;  
  9. import java.util.List;  
  10.   
  11. import org.springframework.jdbc.core.JdbcTemplate;  
  12. import org.springframework.jdbc.core.RowMapper;  
  13. import org.springframework.jdbc.core.support.JdbcDaoSupport;  
  14. import org.springframework.jdbc.datasource.DataSourceTransactionManager;  
  15. import org.springframework.transaction.TransactionStatus;  
  16. import org.springframework.transaction.annotation.Transactional;  
  17. import org.springframework.transaction.support.TransactionCallbackWithoutResult;  
  18. import org.springframework.transaction.support.TransactionTemplate;  
  19.   
  20. import sun.jdbc.odbc.ee.DataSource;  
  21.   
  22. @Transactional  
  23. public class BookDAOImpl extends JdbcDaoSupport implements BookDAO {  
  24.       
  25.     public DataSourceTransactionManager transactionManager;  
  26.   
  27.     public void setTransactionManager(DataSourceTransactionManager transactionManager) {  
  28.         this.transactionManager = transactionManager;  
  29.     }  
  30.   
  31.     @SuppressWarnings("unchecked")  
  32.     public List listBook() {  
  33.         String sql = "select * from book";  
  34.         //JdbcDaoSupport里面有jdbcTemplate这个对象的set方法.JdbcTemplate这个类需要配置数据源  
  35.         List list = this.getJdbcTemplate().query(sql, new UserRowMapper());  
  36.         return list;  
  37.     }  
  38.   
  39.     public void insertBook(final Book book) {  
  40.         final String sql = "insert into book(id,name,author,num)values(?,?,?,?)";  
  41.         TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);  
  42.         final JdbcTemplate jdbcTemplate = this.getJdbcTemplate();  
  43.         transactionTemplate.execute(new TransactionCallbackWithoutResult(){  
  44.             @Override  
  45.             protected void doInTransactionWithoutResult(TransactionStatus arg0) {  
  46.                 Object[] params = new Object[] {book.getId(), book.getName(), book.getAuthor(),book.getNum() };  
  47.                 //下面的语句是用来测试事务异常的情况  
  48. //                new Integer("huangbiao");  
  49.                 jdbcTemplate.update(sql, params);  
  50.             }  
  51.         });  
  52.           
  53.     }  
  54.   
  55. }  

 

 4、继承RowMapper 接口接受返回过来的结果集

 

Java代码  收藏代码
  1. package hb.row;  
  2.   
  3. import hb.bean.Book;  
  4.   
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7.   
  8. import org.springframework.jdbc.core.RowMapper;  
  9.   
  10. public class UserRowMapper implements RowMapper {  
  11.   
  12.     public Object mapRow(ResultSet rs,int index) throws SQLException {  
  13.         Book book = new Book();  
  14.         System.out.println(rs.getString("name"));  
  15.         book.setName(rs.getString("name"));  
  16.         return book;  
  17.     }  
  18. }  
posted on 2012-07-26 22:31 地心引力 阅读(1905) 评论(2)  编辑  收藏

评论:
# re: spring JDBC事务管理 2013-06-15 18:48 |
例子写得很好,不过能不能把配置文件和所依赖的包也贴出来。  回复  更多评论
  
# re: spring JDBC事务管理 2014-02-12 22:22 | 风格化
DataSourceTransactionManager 怎么配置  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: