# 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; } } ```