- 浏览: 56486 次
- 性别:
- 来自: 北京
文章分类
最新评论
一。测试
二。application.xml配置
1.导入对应的 xmlns:tx标签
2.运用hibernate4的sessionFactory和transaction
三。增加事务及注入处理逻辑
xml事务配置方式:
@Transactional增加事务,xml方式配置都配置到application.xml里
@Resource注入组件
四。服务组件
用户服务
抛出异常作测试,注入sessionFactory.
五。实体类
@Entity 声明实体类
@Table映射表设置
@Column设置属性对映表中的列
六。测试结果
数据报错则回滚!
public class UserServiceTest { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService service = (UserService)ac.getBean("userService"); User u = new User(); u.setName("haha success!!"); service.add(u); } }
二。application.xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 配置自动装配 AutowiredAnnotationBeanPostProcessor等接口,实现注入等功能 --> <context:annotation-config/> <!-- 配置扫描包路径,将包下所有组件实例化 --> <context:component-scan base-package="com.job"/> <!-- 声明一个处理实现类 --> <bean id="userDAOImpl" class="com.job.dao.UserDAOImpl"> <!-- 将sessionFactory注入到处理实理类中 --> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 在spring容器中,创建数据库连接Bean --> <bean id="DataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf8"/> <property name="username" value="root"/> <property name="password" value="admin"/> </bean> <!-- 创建hibernate的sessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!-- 将spring容器中存在的数据库连接Bean,配置到sessionFactory中 --> <property name="dataSource" ref="DataSource"/> <!-- 配置hibernate映射实体对象到表的文件(一) --> <property name="packagesToScan"> <list> <value>com.job.model</value> </list> </property> <!-- 配置hibernate映射实体对象到表的文件(二) <property name="annotatedClasses"> <list> <value>com.job.model.User</value> <value>com.job.model.Log</value> </list> </property> --> <!-- 配置hibernate属性,方言,显示sql,是否创建数据表 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> <!-- 配置事务,注意xmlns:tx引入 --> <tx:annotation-driven transaction-manager="transactionManager"/> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> </beans>
1.导入对应的 xmlns:tx标签
2.运用hibernate4的sessionFactory和transaction
三。增加事务及注入处理逻辑
@Component public class UserService { private UserDAO userDAO; private LogDAO logDAO; @Transactional public void add(User u){ this.userDAO.save(u); Log log = new Log(); log.setMessage("a object saved!"); this.logDAO.save(log); } @Resource(name="userDAOImpl") public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } @Resource(name="logDAOImpl") public void setLogDAO(LogDAO logDAO) { this.logDAO = logDAO; } public UserDAO getUserDAO() { return userDAO; } public LogDAO getLogDAO() { return logDAO; } }
xml事务配置方式:
<!-- 配置事务,注意xmlns:tx引入 --> <!--<tx:annotation-driven transaction-manager="transactionManager"/>--> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 声明一个类中哪些方法增加建议--> <aop:config> <!-- public * com.job.service..*.*(..)表示方法:公共,任何返回值,com.job.service包,任何类,任何方法,任何参数 --> <aop:pointcut id="fooServiceOperation" expression="execution(public * com.job.service..*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/> </aop:config> <!-- 声明一个aop建议 ,注入事务管理--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 事务属性--> <tx:attributes> <!-- 所有以get开头的方法都设置成 read-only 方式,sping会进行优化--> <tx:method name="get*" read-only="true"/> <!-- 其它的方法设置成默认REQUIRED,即调用方法之前有事务,则运用之前的事务,否则新建一个事务 --> <tx:method name="add*"/> </tx:attributes> </tx:advice>
@Transactional增加事务,xml方式配置都配置到application.xml里
@Resource注入组件
四。服务组件
用户服务
public interface UserDAO { public void save(User u); } @Component public class UserDAOImpl implements UserDAO{ private SessionFactory sessionFactory; public void save(User u) { Session s = sessionFactory.getCurrentSession(); s.save(u); throw new RuntimeException("error!!!!!"); } public SessionFactory getSessionFactory() { return sessionFactory; } @Resource(name="sessionFactory") public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } }
抛出异常作测试,注入sessionFactory.
public interface LogDAO { public void save(Log log); } @Component public class LogDAOImpl implements LogDAO{ private SessionFactory sessionFactory; public void save(Log log){ Session s = sessionFactory.getCurrentSession(); s.save(log); } public SessionFactory getSessionFactory() { return sessionFactory; } @Resource(name="sessionFactory") public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } }
五。实体类
@Entity @Table(name="Users") public class User { private int id; private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Id @GeneratedValue @Column(name="USER_ID") public int getId() { return id; } public void setId(int id) { this.id = id; } } @Entity @Table(name="log") public class Log { private int id; private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } }
@Entity 声明实体类
@Table映射表设置
@Column设置属性对映表中的列
六。测试结果
数据报错则回滚!
发表评论
-
spring_hibernate_Template4
2014-04-24 22:37 573一。测试 public class Use ... -
spring_hibernate_xml
2014-04-11 23:44 353一、实体类 public class User { p ... -
spring_xml_AOP
2014-04-09 21:34 539一。配置服务类组件 @Component public ... -
Spring_Annotation_AOP
2014-03-30 00:16 446一。配置服务类组件 @Component public ... -
spring_annotation_scan(Component)
2014-03-24 20:14 500spring自动 项目结构如下: 一。实体类(不重要) ... -
spring_annotation_DI(autoware&resoure)
2014-03-23 23:03 409一。引入jar包 spring.jar commons- ... -
spring初体验
2014-03-17 23:37 490一。引入jar包 spring.jar commons- ...
相关推荐
pg_snapshot_too_old ...pg_snapshot_too_old_transation_limit = 1000 会话本地配置 SET pg_snapshot_too_old_enabled = true; SET pg_snapshot_too_old_transation_limit = 1000 ; 描述 此扩展名将启用
SSH(struts+spring+hibernate)的jar包 SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层。 一个请求在Struts2框架中的处理大概分为以下几个步骤: 1、客户端初始化一个指向...
《SpringCloud2.0.4集成LCN4.2.0:分布式事务解决方案》 在分布式系统中,事务处理是一项复杂而关键的任务。SpringCloud作为微服务架构的主流框架,虽然自身提供了强大的服务治理能力,但在分布式事务处理方面稍显...
Hibernate 的工作原理包括读取并解析配置文件、读取并解析映射信息、创建 SessionFactory、打开 Session、创建事务 Transation、持久化操作、提交事务、关闭 Session、关闭 SesstionFactory 八个步骤。 Hibernate ...
1. **读取并解析配置文件**:在启动应用时,Hibernate首先会读取配置文件(如`hibernate.cfg.xml`),从中获取数据库连接信息和其他配置设置。 2. **读取并解析映射信息,创建SessionFactory**:接下来,Hibernate会...
SSH框架是Struts、Spring和Hibernate三个框架的集成,它不是一个单独的框架,而是将这三个框架紧密地结合在一起,用于构建灵活、易于扩展的多层Web应用程序。SSH框架的系统可以分为四层:表示层、业务逻辑层、数据...
【标题】"Transation.rar" 暗示这是一个与在线交易或转账相关的项目,可能包含一个Web应用或者移动应用的核心功能。项目实现了用户登录、注册、商品发布、购买流程以及设置选项,涵盖了基本的电子商务应用的主要特性...
在本项目"simple_transation_poo"中,开发者旨在通过构建一个简单的银行系统来实践面向对象编程(Object-Oriented Programming, OOP)的核心概念。这个项目主要关注以下几个Python编程的关键知识点: 1. **类...
2. 由 hibernate.cfg.xml 中的 <mapping resource="com/xx/User.hbm.xml"/> 读取并解析映射信息 3. 创建SessionFactory 4. 打开Session 5. 创建事务Transation 6. 持久化操作 7. 提交事务 8. 关闭 Session 9. 关闭 ...
org.eclipse.emf.transaction_1.4.0.v20100331-1738.jar org.eclipse.emf.validation_1.7.0.201306111341.jar org.eclipse.emf.workspace_1.5.1.v20120328-0001.jar
transform呈现的是一种变形结果,而Transation呈现的是一种过渡,通俗点说就是一种动画转换过程,如渐显、渐弱、动画快慢等。transition和transform是两种不同的动画模型。 1. transition过渡属性transition 属性是...
**双重录入会计系统(DEBTS)开源项目详解** ...DEBTS的核心理念是通过双重录入的会计原则来确保财务数据的准确性和完整性。 **双重录入会计原理** ...这种方法可以避免单一错误导致的不平衡,从而提高财务报表的可靠性...
这个问题的标题和描述提到了一个具体的场景,即在`Service`层的类`TransationServiceImpl`中,类的实例通过`@Autowired`注解注入自身,形成循环依赖,并且`transation`方法同时携带了`@Transactional`和`@Async`注解...
语言:English 指定规则,以帮助一致地解释Freeagent 中的事务,您将在Github [1]上的项目Readme中找到最新的安装和使用说明,但基本上您只需安装Chrome扩展并在包含要使用的规则的公开托管的JSON文件中指向。...
在Web服务中实现事务处理是确保数据一致性的重要手段,特别是在分布式系统中,多个操作需要作为一个原子单元执行。.NET Framework提供了强大的支持,简化了在Web服务中实现事务的复杂度。... 首先,理解.NET Framework...
to help overseas users use the YDH system better.Transation Engine is powered by Mricosoft Bing Transator. Translation errors and deviations caused by the translation process is inevitable, if you ...
接下来,我们要配置`jbpm.cfg.xml`文件。在这个文件中,我们需要添加邮件模板和邮件服务器的配置。邮件模板定义了邮件的基本结构,包括发件人、收件人、主题和正文内容,以及可能的附件。例如: ```xml <!-- 邮件...