栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring事务源码详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring事务源码详解

一. 简介 事务:

事务是逻辑上的一组操作,要么都执行,要么都不执行,关于事务的基本知识可以看我的这篇文章:事务的基础知识

Spring事务:

Spring 支持两种方式的事务管理:编程式事务管理、声明式事务管理

  • 编程式事务管理:通过 TransactionTemplate或者TransactionManager手动管理事务,使用较少,但是可以让我们精准控制事务粒度,实现精确的细粒度事务控制
  • 声明式事务管理:通过 AOP 实现,@Transactional注解是最常用的声明式事务使用
二.通过例子来学习

maven依赖:


    org.springframework
    spring-context
    5.3.8


    org.springframework
    spring-tx
    5.3.8


    org.springframework
    spring-jdbc
    5.3.8


     mysql
     mysql-connector-java
     8.0.25
 
 
     org.aspectj
     aspectjweaver
     1.6.9
 

实体类:

public class Book {

    private int bookId;

    private String bookName;

    public Book(int bookId, String bookName) {
        this.bookId = bookId;
        this.bookName = bookName;
    }

    public Book() {
    }

    public int getBookId() {
        return bookId;
    }

    public void setBookId(int bookId) {
        this.bookId = bookId;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    @Override
    public String toString() {
        return "Book{" +
                "bookId=" + bookId +
                ", bookName='" + bookName + ''' +
                '}';
    }
}

Dao接口类:

import com.jingchuan.transaction.model.Book;

public interface LibraryDao {
	
	public Book getBook(String name);
	
	public void addBook(Book book);
	
	public void deleteBook(String name);
 
}

Dao实现类:

import java.sql.ResultSet;
import java.sql.SQLException;

import com.jingchuan.transaction.model.Book;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

public class LibraryDaoImpl implements LibraryDao {

    private JdbcTemplate jdbcTemplate;

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public Book getBook(String name) {
        String sql = "SELECT * FROM book WHERe bookname=?";
        Book mBook = (Book) jdbcTemplate.queryForObject(sql, new Object[]{name}, new RowMapper() {
            @Override
            public Object mapRow(ResultSet arg0, int arg1) throws SQLException {
                Book book = new Book();
                book.setBookId(arg0.getInt("bookId"));
                book.setBookName(arg0.getString("bookName"));
                return book;
            }
        });
        return mBook;
    }

    @Override
    public void addBook(Book book) {
        String sql = "INSERT INTO book VALUES(?,?)";
        jdbcTemplate.update(sql, book.getBookId(), book.getBookName());
//        jdbcTemplate.update(sql, book.getBookId(), book.getBookName());
    }

    @Override
    public void deleteBook(String name) {
        String sql = "DELETE FROM book WHERe bookname=?";
        jdbcTemplate.update(sql, name);
    }

}
 

xml配置:



    
    
        
        
        
        
    
    
    
        
    
    
    
        
    
    
    

    
    
        
        
        
        
    

    
    
        
        
            
            
            
        
    

测试类:

import com.jingchuan.transaction.dao.LibraryDao;
import com.jingchuan.transaction.model.Book;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestTransaction {

    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:transaction.xml");
        Book book1 = new Book(1, "西游记");
        Book book2 = new Book(2, "红楼梦");
        Book book3 = new Book(3, "金瓶梅");
        Book book4 = new Book(4, "三国演义");
        Book book5 = new Book(5, "水浒传");
        LibraryDao libraryDaoImpl = (LibraryDao) ctx.getBean("libraryFactory");
        libraryDaoImpl.addBook(book2);
        System.out.println(libraryDaoImpl.getBook("西游记"));
    }

}

需要自己创建一个数据库并创建Book表,bookId和bookName两个字段:

CREATE TABLE `book` (
  `bookId` int(11) NOT NULL,
  `bookName` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`bookId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
三. 跟着例子看源码
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号