spring2.5 学习笔记(7)

2019-08-29 23:15

spring2.5 学习笔记 第31页 共46页

(二) annotation注解方式的SessionFactory 再是在配置数据源时可以使用占位符(${})获取一些值 bean(org.springframework.beans.factory.config.PropertyPlaceholderConfigurer) classpath:jdbc.properties

spring2.5 学习笔记 第33页 共46页

说明:

1、 首先:如果想使用Spring管理事务,则首需要在配置文件中加入下列(上面红色加粗部分):

xmlns:tx=\ xsi:schemaLocation=”http://www.springframework.org/schema/tx com.wjt276.model.User com.wjt276.model.Log org.hibernate.dialect.MySQLDialect true true http://www.springframework.org/schema/tx/spring-tx-2.5.xsd\> 2、 其次:配置一个事务管理器的bean,这里使用的是Hibernate的事务管理HibernateTransactionManager,也可以使用

org.springframework.jdbc.datasource.DataSourceTransactionManager,,并且需要注入一个SessionFactory的bean,利用这个bean可以获取数据源配置等其它的数据库信息。但要求已经在这之前配置了一个SessionFactory的bean了。 3、 再次:需要在配置文件中告诉Spring,我们需要使用Spring来管理事务,并且要告诉它,使用哪个事务管理器(这里我们就使用

上面的刚则配置的txManager),

注意:这里我们是使用annotation注解方式配置事务管理,所以使用标签 4、 最后:就是对什么方法进行事务管理,只需要在这个方法上加上@Transactional。如下: @Transactional public void add(User u){

…… } spring2.5 学习笔记 第34页 共46页

这样,Spring就会对这个方法进行事务管理了。 5、 实例:

场景:当保存一个用户后,需要向数据库添加一条日志记录,说明已经添加一个用户了。需要使用Spring管理其事务,如果两者有一者发生异常,执都需要进行回滚。 1) 2)

Spring的配置文件同上; 代码

Log实体类 @Entity @Table(name=\) public class Log { } User实体类 @Entity public class User { } UserDao接口的实现 @Component(\) public class UserDaoImpl implements UserDao { LogDao接口的实现 @Component(\) private SessionFactory sessionFactory; public SessionFactory getSessionFactory() {return sessionFactory;} //这里的sessionFactory是使用AOP进行自动装配,切记这是AOP的功能 @Resource(name=\) public void setSessionFactory(SessionFactory sessionFactory) { } //在这里并没有事务的管理,常规这里应该有处理事务的代码,但是现在没有了,因为现在由Spring来管理了。 //我们关心只是业务逻辑了。 @Override public void save(User u) { }} Session session = null; this.sessionFactory = sessionFactory; private int id; private String name; ?? private int id; private String msg; ?? //记住一定需要使用getCurrentSession()来从上下文中获取Session这样Spring才可以管理事务。 session = sessionFactory.getCurrentSession();// session.save(u); System.out.println(\); spring2.5 学习笔记 第35页 共46页

public class LogDaoImpl implements LogDao { private SessionFactory sessionFactory; public SessionFactory getSessionFactory() {return sessionFactory;} //这里的sessionFactory是使用AOP进行自动装配,切记这是AOP的功能,注入的bean的Id是sessionFactory @Resource(name=\) public void setSessionFactory(SessionFactory sessionFactory) { } this.sessionFactory = sessionFactory; //在这里并没有事务的管理,常规这里应该有处理事务的代码,但是现在没有了,因为现在由Spring来管理了。

业务层代码 @Component(value=\) public class UserService { } 这样,只有这个方法中的所有代码没有异常,才会执行完,否则所有的事务将全部回滚

测试代码: public void testAdd_4() throws Exception { ApplicationContext factory = new ClassPathXmlApplicationContext(\); UserService service = (UserService)factory.getBean(\); //只需要在需要进行事务管理的方法上加上 @Transactional public void add(User u){ } userDao.save(u); Log log = new Log(); log.setMsg(u.getName() + \保存成功!\); logDao.save(log); @Transactional 就可以了,Spring就会对其进行事务管理 private LogDao logDao; public LogDao getLogDao() { return logDao;} @Resource(name=\) public void setLogDao(LogDao logDao) { this.logDao = logDao;} public UserDao getUserDao() { return userDao; } //注意这个@Resource是J2EE的(import javax.annotation.Resource) @Resource(name=\) public void setUserDao(UserDao userDao) { this.userDao = userDao; } private UserDao userDao = new UserDaoImpl(); //我们关心只是业务逻辑了。 @Override public void save(Log log) { }} Session session = null; //记住一定需要使用getCurrentSession()来从上下文中获取Session这样Spring才可以管理事务。 session = sessionFactory.getCurrentSession(); session.save(log); System.out.println(\); //利用Spring自动注入功能,将其注入


spring2.5 学习笔记(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:憨山老人年谱自叙实录文白对照

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: