您的位置:首页 > 编程语言 > Java开发

Spring + hibernate + JPA 配置

2014-10-02 16:41 387 查看
最近对hibernate的JPA实现比较感兴趣,在此记录下配置方法,备查。

先上maven依赖包配置,这里使用的是spring3.1.2和hibernate3.6.0

<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.0.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
</dependencies>
然后是spring配置 applicationContext.xml,需要注意的是此处数据源是JNDI,在生产环境下建议使用此方式,而不建议使用properties文件,因为提供给实施人员的代码都是各种war包,别人不可能剥开你的war包来修改properties。而是直接改中间件的数据源配置。其他一些配置如路径之类的最好都交给容器来配置,而不要把经常改动的配置文件放在工程里。
<jee:jndi-lookup id="mssql" jndi-name="jdbc/test" />

<bean id="emf"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="mssql"></property>
<property name="persistenceUnitName" value="sample"></property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="emf" />
</bean>
<mvc:annotation-driven />
<tx:annotation-driven />
最后是JPA配置 类路径下META-INF/persistence.xml,多个数据库方言,请配置多个单元!
<?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_2_0.xsd" version="2.0">
<persistence-unit name="sample" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect"
value="org.hibernatespatial.sqlserver.SQLServerSpatialDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>

</persistence>
在JAVA bean中注入JPA的EntityManager对象,以DAO为例,如此就能在spring中正确集成JPA了
@Transactional
public abstract class BaseDao<T> implements IBaseDao<T> {

@PersistenceContext
protected EntityManager em;

...
}


最后,谈下个人的理解,JPA相比与hibernate独有的sessionFactory来讲更有利于ORM开发。最近在看的GraniteDS就比较推荐使用JPA的方式做ORM。到底好不好,还有待后续的积累来验证。
做ORM的目的主要还是一个,就是代码的简洁灵活。目前公司使用的还是spring的jdbcTemplate,要自行管理SQL语句,做CRUD操作以及生成对象或集合要相对繁琐。而且当工程量大了以后,SQL语句的维护是一件麻烦的事情。不如hibernate之类来的快。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐