所用 jar 包:spring4.0.3, hibernate4.3.5Final, 記得加上 aopalliance,若是不加的話,在事務配置的時候會報MethodIntercept 異常。java
spring主配置文件以下:web
<!-- 基於註解的處理器映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean> <!-- 由於是測試,因此用的spring自帶的鏈接池 --> <bean id="sds" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <constructor-arg index="0" value="${url}"></constructor-arg> <!-- 這裏的不能用username,會與spring自帶的名字衝突 --> <constructor-arg index="1" value="${jdbc.username}"></constructor-arg> <constructor-arg index="2" value="${jdbc.password}"></constructor-arg> <property name="driverClassName" value="${jdbc.driver}"></property> </bean> <!-- 這裏注意是 hibernate4 的sessionFactory --> <bean id="ls" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="sds"></property> <property name="hibernateProperties"> <props> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> <prop key="hibernate.dialect">${hibernate.dialect}</prop> </props> </property> <!-- 這裏是掃描該包下實體類文件 --> <property name="packagesToScan"> <list> <value>org.test.pojo</value> </list> </property> </bean> <!-- 這裏也是hibernate4包下的 --> <bean id="htm" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="ls"></property> </bean> <!-- 開啓註解事務 --> <tx:annotation-driven transaction-manager="htm"/> <!-- 開啓組件掃描 --> <context:component-scan base-package="or.test"></context:component-scan>
在須要事務的類或方法前面加 @Transaction 註解就能夠開啓事務了。spring
實體類(pojo):sql
import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity @Table(name="t_user") // 若是不加@Table 的話也能夠,但entity註解要加name,並且寫hql的時候只能用entity註解//的name屬性 public class User implements Serializable{ private static final long serialVersionUID = 7677550444420832729L; private Integer id; private String sex; private String name; private Double score; @Override public String toString() { return "User [id=" + id + ", sex=" + sex + ", name=" + name + ", score=" + score + "]"; } public User() { super(); } public User(Integer id, String sex, String name, Double score) { super(); this.id = id; this.sex = sex; this.name = name; this.score = score; } public User(String sex, String name, Double score) { super(); this.sex = sex; this.name = name; this.score = score; } @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(name="sex") public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Column(name="name") public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(name="score") public Double getScore() { return score; } public void setScore(Double score) { this.score = score; } }