五、配置事务管理器

1.在applicationContext.xml中配置事务管理器,统一管理sessionFactory的事务,这样EmployeeService中的函数就不用每次都beginTransaction()了

  1.1配置事务管理器

<!-- 配置事物管理器,统一管理sessionFactory的事务 -->
    <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <!-- 启用事务注解扫描 -->
    <tx:annotation-driven transaction-manager="txManager"/>

 

  1.2EmployeeService中添加注解

//这里配置注解用处是让spring的事务管理器接管该Service的事务(所有函数),要是放在函数头上就是管理一个函数
@Transactional
public class EmployeeService implements EmployeeServiceInterface {

 

2.修改EmployeeService中函数代码,删除beginTransaction()和openSession,改为getCurrentSession()

package com.myz.service.imps;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.transaction.annotation.Transactional;

import com.myz.domain.Employee;
import com.myz.service.interfaces.EmployeeServiceInterface;

//这里配置注解用处是让spring的事务管理器接管该Service的事务(所有函数),要是放在函数头上就是管理一个函数
@Transactional
public class EmployeeService implements EmployeeServiceInterface {
    private SessionFactory sessionFactory;

    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    //增加雇员
    public void addEmployee(Employee e) {
        // TODO Auto-generated method stub
        Session openSession = sessionFactory.getCurrentSession();
        openSession.save(e);
    }
    
    //根据id删除雇员
    public void delEmployee(Serializable id) {
        // TODO Auto-generated method stub
        Session openSession = sessionFactory.getCurrentSession();
        Employee e=(Employee) openSession.load(Employee.class, id);
        openSession.delete(e);
    }

    //显示所有雇员
    public List<Employee> showEmployee() {
        // TODO Auto-generated method stub
        Session openSession = sessionFactory.getCurrentSession();
        List<Employee> list = openSession.createQuery("from Employee").list();
        return list;
    }

    //更新雇员信息
    public void updEmployee(Employee e) {
        // TODO Auto-generated method stub
        Session openSession = sessionFactory.getCurrentSession();
        Employee ee=(Employee) openSession.load(Employee.class, e.getId());
        ee.setEmail(e.getEmail());
        ee.setGrade(e.getGrade());
        ee.setHiredate(e.getHiredate());
        ee.setName(e.getName());
        ee.setPassword(e.getPassword());
        ee.setSalary(e.getSalary());
    }

}

3.测试,虽然EmployeeService的函数中没有事务,但是依然能够执行增删改的操作(因为配置了事务管理器),成功!

package com.myz.test;

import java.util.Date;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.myz.domain.Employee;
import com.myz.service.imps.EmployeeService;
import com.myz.service.interfaces.EmployeeServiceInterface;

public class Test {
    public static void main(String[] args) {
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        EmployeeServiceInterface es=(EmployeeServiceInterface) ac.getBean("employeeService");
        
        
//        增加一个雇员
//        Employee e1=new Employee(7, "marry", "2466@qq.com", new Date(), 4500f, "123456", 1);
//        es.addEmployee(e1);
        
        //根据id删除一个雇员
//        es.delEmployee(3);
        
        //显示所有雇员
//        List<Employee> employees = es.showEmployee();
//        for(Employee e:employees){
//            System.out.println(e.getId()+" "+e.getName());
//        }
        
        //更新3号雇员的信息
//        Employee e3=new Employee(3, "rose", "24666@163.com", new Date(), 6000f, "123456", 2);
//        es.updEmployee(e3);
    }
}

 

posted @ 2018-02-09 11:43  菜鸡蔡文姬  阅读(235)  评论(0编辑  收藏  举报