第一步:
添加pom依赖
<spring.version>4.3.3.RELEASE</spring.version>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 使用entityManage -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- 缓存 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>${hibernate.version}</version>
</dependency>
第二步:
改写sessionFactory以及配置事务
在application中sessionFactory的创建更改为:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:dataSource-ref="dataSource">
<property name="persistenceUnitName" value="testdb"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
p:database="${jpa.database}"
p:showSql="${jpa.showSql}"
p:generateDdl="true"/>
</property>
</bean>
<!-- 解决一些延时加载的问题 -->
<bean name="openEntityManagerInViewInterceptor"
class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
<property name="entityManagerFactory">
<ref bean="entityManagerFactory" />
</property>
</bean>
以上在配置时value=“testdb””需要配置文件,其配置文件为:persistence.xml,我这里的persistenc配置文件是放在resource下的META-INF文件夹下的,内容为:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="testdb" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>
<property name="net.sf.ehcache.configurationResourceName" value="/ehcache.xml" />
<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.cache.use_structured_entries" value="true" />
<property name="hibernate.cache.use_query_cache" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.generate_statistics" value="false" />
<property name="hibernate.jdbc.fetch_size" value="64" />
<property name="hibernate.jdbc.batch_size" value="32" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
<property name="hibernate.format_sql" value="false" />
<property name="javax.persistence.validation.group.pre-persist" value="javax.validation.groups.Default" />
<property name="javax.persistence.validation.group.pre-update" value="javax.validation.groups.Default" />
</properties>
</persistence-unit>
</persistence>
并且要加入ehcache.xml配置文件为:
<?xml version="1.0" encoding="UTF-8"?>
```
在spring-mvc中配置事务,其中因为事务需要在web容器中的DispatcherServlet下的配置文件中配置,否则配置的事务没有效果
<context:component-scan base-package=“com.mvn” />
<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
<property name="entityManagerFactory" ref="entityManagerFactory"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" mode="proxy"/>
``
第三步:
在持久层的实现类中使用:
在这里插入代码片package com.mvn.dao.impl;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.mvn.dao.UserDao;
import com.mvn.entity.User;
@Service
@Transactional
public class UserDaoImpl implements UserDao{
@Autowired
private EntityManager entityManager;
@Override
public void save(User user) {
try {
entityManager.merge(user);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public User find(int id) {
try {
User user = entityManager.find(User.class,id);
return user;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public void del(int id) {
try {
User user = entityManager.find(User.class,id);
entityManager.remove(user);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public User update(User user) {
try {
User user2 = entityManager.merge(user);
return user2;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public List<User> getAll() {
String sql="select o from User o";
Query query = entityManager.createQuery(sql);
@SuppressWarnings("unchecked")
List<User> list = query.getResultList();
return list;
}
}
其中需要在注解@service的类下添加注解事务@@Transactional即可,
配置文件的项目结构为: