Spring + Mybatis 事务

Customer

package com.shpun.entity;
public class Customer {
    private String id;
    private String name;
    private String gender;
    private String birthday;
    private String tel;
    private String email;
    private String introduction;
    /*getter  setter*/
}

CustomerMapper

package com.shpun.mapper;

@Repository
public interface CustomerMapper {
    int insertCustomer(Customer customer);
    int deleteCustomer(String id);
    int updateCustomer(Customer customer);
    Customer selectCustomer(String id);
    List selectAllCustomers();
}

CustomerMapper.xml





    
        insert into customers (name,gender,birthday,tel,email,introduction) value (#{name},#{gender},#{birthday},#{tel},#{email},#{introduction})
    

    
        delete from customers where id=#{id}
    

    
        update customers set name=#{name},gender=#{gender},birthday=#{birthday},tel=#{tel},email=#{email},introduction=#{introduction} where id=#{id}
    

    

    


Mybatis-config.xml





    
        
        
        
        
        
        
        
        
        
        
    

    
    
        
    

    
    
        
    


spring-config.xml




    
    
    

    
    

    
    
        
        
        
        
    

    
    
        
        
    

    
    
        
    

    
    

    
    
        
        
        
        
        
        
    


CustomerService接口及其实现类

package com.shpun.service;
public interface CustomerService {
    int insertCustomer(Customer customer);
    int deleteCustomer(String id);
    int updateCustomer(Customer customer);
    Customer selectCustomer(String id);
    List selectAllCustomer();
}

CustomerServiceImpl

package com.shpun.service;

@Service
public class CustomerServiceImpl implements CustomerService {

    @Autowired
    private CustomerMapper customerMapper = null;

    /**
     * @Transactional(propagation = Propagation.REQUIRES_NEW,isolation = Isolation.READ_COMMITTED)
     * propagation = Propagation.REQUIRES_NEW 传播行为,每次都开启一个新事务
     * isolation = Isolation.READ_COMMITTED 隔离级别,读/写提交  大部分情况下的选择
     * @param customer
     * @return
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW,isolation = Isolation.READ_COMMITTED)
    public int insertCustomer(Customer customer) {
        return customerMapper.insertCustomer(customer);
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW,isolation = Isolation.READ_COMMITTED)
    public int deleteCustomer(String id) {
        return customerMapper.deleteCustomer(id);
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW,isolation = Isolation.READ_COMMITTED)
    public int updateCustomer(Customer customer) {
        return customerMapper.updateCustomer(customer);
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW,isolation = Isolation.READ_COMMITTED)
    public Customer selectCustomer(String id) {
        return customerMapper.selectCustomer(id);
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW,isolation = Isolation.READ_COMMITTED)
    public List selectAllCustomer() {
        return customerMapper.selectAllCustomers();
    }
}

CustomerListService接口及其实现类

package com.shpun.service;

public interface CustomerListService {
    int insertCustomerList(List customerList);
    int deleteCustomerList(List customerList);
    int updateCustomerList(List customerList);
    List selectCustomerList(List customerList);
}

CustomerListServiceImpl

package com.shpun.service;

@Service
public class CustomerListServiceImpl implements CustomerListService {

    @Autowired
    private CustomerService customerService;

    /**
     * @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED)
     * propagation = Propagation.REQUIRED Spring默认传播方式,存在当前事务则沿用;否则创建新事务
     * isolation = Isolation.READ_COMMITTED 隔离级别,读/写提交  大部分情况下的选择
     *
     * @param customerList
     * @return
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED)
    public int insertCustomerList(List customerList) {
        int count = 0;
        for(Customer customer : customerList){
            try{
                customerService.insertCustomer(customer);
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        return count;
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED)
    public int deleteCustomerList(List customerList) {
        int count = 0;
        for(Customer customer : customerList){
            try{
                customerService.deleteCustomer(customer.getId());
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        return count;
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED)
    public int updateCustomerList(List customerList) {
        int count = 0;
        for(Customer customer : customerList){
            try{
                customerService.updateCustomer(customer);
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        return count;
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED)
    public List selectCustomerList(List customerList) {
        List customers = new ArrayList<>();
        for(Customer customer : customerList){
            try{
                customers.add(customerService.selectCustomer(customer.getId()));
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        return customers;
    }
}

测试

package com.shpun.main;

public class Test {

    public static void main(String[] args){

        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        CustomerService cutomerService = context.getBean(CustomerService.class);
        CustomerListService customerListService = context.getBean(CustomerListService.class);

        List customerList = new ArrayList<>();

          // insert
        for(int i=0;i<3;i++){
            Customer customer = new Customer();
            customer.setName("tx"+i);
            customer.setIntroduction("spring mybatis transaction "+i);
            customerList.add(customer);
        }
        System.out.println("insert");
        customerListService.insertCustomerList(customerList);

        // delete
        customerList.clear();
        for(int i=1;i<=3;i++){
            Customer customer = new Customer();
            customer.setId("101"+i);
            customerList.add(customer);
        }
        System.out.println("delete");
        customerListService.deleteCustomerList(customerList);

        // update
        customerList.clear();
        for(int i=1;i<=3;i++){
            Customer customer = new Customer();
            customer.setId("102"+i);
            customer.setName("修改");
            customer.setIntroduction("我被修改了TX"+i);
            customerList.add(customer);
        }
        System.out.println("update");
        customerListService.updateCustomerList(customerList);

        // select singal
        System.out.println(cutomerService.selectCustomer("1001"));

        // select list
        customerList.clear();
        for(int i=5;i<=7;i++){
            Customer customer = new Customer();
            customer.setId("104"+i);
            customerList.add(customer);
        }
        System.out.println(customerListService.selectCustomerList(customerList));

        // select all
        customerList.clear();
        System.out.println("select all");
        customerList = cutomerService.selectAllCustomer();
        for(Customer customer : customerList){
            System.out.println(customer);
        }

    }
}

ps:

Spring + Mybatis 启用事务,并使用注解的方式@Transactional记得在spring配置文件中添加

    
    
        
    

    
    

你可能感兴趣的:(Spring + Mybatis 事务)