# springDataJpaDemo
**Repository Path**: chris.wu/springDataJpaDemo
## Basic Information
- **Project Name**: springDataJpaDemo
- **Description**: spring data jpa 演示的web程序。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 3
- **Created**: 2015-06-16
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 基于maven构建的spring data jpa web演示程序。
### 运行环境
* tomcat 7+
* JDK 1.6+
* maven3 构建。最好使用maven3,maven2没试过。
本地运行,打包使用命令:mvn clean install -Pdev
### 进展
* spring mvc 集成 hibernate。
* 集成spring data jpa(可以把hibernate-core去掉,已经不需要他了)。
演示环境运行效果,[springDataJpaDemo](http://sprdademo.oschina.mopaas.com/)
spring data jpa 依赖,完整依赖配置见[pom.xml](http://git.oschina.net/weishengshui/springDataJpaDemo/blob/master/pom.xml)
```xml
4.1.0.Final
5.1.21
3.2.2.RELEASE
1.4.5.RELEASE
1.7.1
...
org.hibernate
hibernate-entitymanager
${hibernate.version}
org.springframework.data
spring-data-jpa
${jpa.version}
...
```
## Jpa 配置[WebAppConfig.java](http://git.oschina.net/weishengshui/springDataJpaDemo/blob/master/src/main/java/com/spring/data/jpa/demo/config/WebAppConfig.java)。
在dao中比较重要就是用到了org.springframework.data.jpa.repository.JpaRepository,基本的数据库操作都有了,查看[JpaRepository API](http://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html)
```java
package com.spring.data.jpa.demo.config;
import java.util.Properties;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.hibernate.ejb.HibernatePersistence;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
// 标注这是一个配置文件
@Configuration
// 扫描@Controller/@Service等,当然也扫描本身这个配置文件
@ComponentScan(basePackages = { "com.spring.data.jpa.demo" })
// 允许使用spring mvc 的注解
@EnableWebMvc
// 事务管理:service层 使用@Transactional注解
@EnableTransactionManagement
// 加载属性文件
@PropertySource(value = { "classpath:jdbc.properties" })
// 确定使用的jpa实现,以及扫描dao包
@EnableJpaRepositories("com.spring.data.jpa.demo.core.dao")
public class WebAppConfig {
private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";
private static final String PROPERTY_NAME_DATABASE_URL = "db.url";
private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";
private static final String PROPERTY_NAME_DATABASE_DIALECT = "hibernate.dialect";
private static final String PROPERTY_NAME_DATABASE_SHOW_SQL = "hibernate.show_sql";
private static final String PROPERTY_NAME_DATABASE_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";
private static final String PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO = "hibernate.hbm2ddl.auto";
/**
* 从属性文件jdbc.properties中读取配置值
*/
@Resource
private Environment env;
/**
* 创建数据源
* 加载驱动、数据库用户名、密码。此处也可以使用其它的连接池数据源。
*
* @return
*/
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env
.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
dataSource.setUsername(env
.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
dataSource.setPassword(env
.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));
return dataSource;
}
/**
* 相当于spring 集成 hibernate中的sessionFactory
* 加载数据源,以及要扫描的实体包
*
* @return
*/
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();
entityManagerFactory.setDataSource(dataSource());
entityManagerFactory
.setPersistenceProviderClass(HibernatePersistence.class);
entityManagerFactory
.setPackagesToScan(env
.getRequiredProperty(PROPERTY_NAME_DATABASE_ENTITYMANAGER_PACKAGES_TO_SCAN));
entityManagerFactory.setJpaProperties(hibernateProperties());
return entityManagerFactory;
}
/**
* Jpa 实现的事务管理
*
* @return
*/
@Bean
public JpaTransactionManager transactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory()
.getObject());
return transactionManager;
}
/**
* hibernate 属性配置
*
* @return
*/
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.setProperty(PROPERTY_NAME_DATABASE_DIALECT,
env.getRequiredProperty(PROPERTY_NAME_DATABASE_DIALECT));
properties.setProperty(PROPERTY_NAME_DATABASE_SHOW_SQL,
env.getRequiredProperty(PROPERTY_NAME_DATABASE_SHOW_SQL));
properties.setProperty(PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO,
env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO));
return properties;
}
/**
* spring mvc 资源解析
*
* @return
*/
@Bean
public InternalResourceViewResolver setUpViewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/pages/");
viewResolver.setSuffix(".jsp");
viewResolver.setViewClass(JstlView.class);
return viewResolver;
}
}
```