所用 jar 包:spring4.0.3, hibernate4.3.5Final, 记得加上 aopalliance,如果不加的话,在事务配置的时候会报MethodIntercept 异常。
spring主配置文件如下:
<!-- 基于注解的处理器映射 -->
<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 注解就可以开启事务了。
实体类(pojo):
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;
}
}