zoukankan      html  css  js  c++  java
  • 五、配置事务管理器

    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);
        }
    }
  • 相关阅读:
    OpenSSL使用1(用OpenSSL生成自签名证书在IIS上搭建Https站点)(用于iOS的https访问)
    dotnet调用node.js写的socket服务(websocket/socket/socket.io)
    Jenkins中deploy插件的deploy war/ear to a container与deploy artifacts to maven reepository区别
    Mac下启动MySQL出现错误“the /usr/local/mysql/data directory is not owned by the 'mysql' or '_mysql' user”解决
    Mac下配置node.js环境(Mac 10.12)
    brew udpate出现错误“/usr/local is not writable.”的问题解决
    Linux快速查看某条命令的版本和存放的位置(ls -l `which mvn`)
    Mac下node.js卸载方法收集
    Mac下安装包管理平台Homebrew(Mac 10.12)
    Java出现“Error configuring application listener of class...”类似的错误解决
  • 原文地址:https://www.cnblogs.com/myz666/p/8434842.html
Copyright © 2011-2022 走看看