Spring-Data-Jpa实现通过实体类注解模式自动在数据库中创建表和字段
配置文件:
package cn.cityworks.config; import java.util.Properties; import javax.sql.DataSource; import org.postgresql.jdbc2.optional.SimpleDataSource; import org.postgresql.jdbc3.Jdbc3PoolingDataSource; import org.postgresql.jdbc3.Jdbc3SimpleDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; 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.orm.hibernate5.HibernateExceptionTranslator; import org.springframework.orm.hibernate5.LocalSessionFactoryBean; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * jpa的配置类,包括数据源,事务管理等 * Created by gwcheng on 2017/4/21. */ // 标明该类使用Spring基于Java的配置 @Configuration // 读取配置文件的,通过Environment读取 @PropertySource("classpath:application.yml") // scan the package of the annotated configuration class for Spring Data repositories @EnableJpaRepositories(basePackages = "cn.cityworks.repository") // Enables Spring's annotation-driven transaction management @EnableTransactionManagement public class JpaConfig { @Autowired private Environment env; /** * 1.配置数据源 * * @return DataSource */ @Bean public DataSource dataSource() { //DruidDataSource source = new DruidDataSource(); Jdbc3PoolingDataSource source = new Jdbc3PoolingDataSource(); source.setUrl(env.getRequiredProperty("datasource.url")); source.setUser(env.getRequiredProperty("datasource.username")); source.setPassword(env.getRequiredProperty("datasource.password")); //source.setDataSourceName("oauth"); // source.setMaxConnections(10); return source; } /** * 2.配置EntityManagerFactory * * @return */ @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); // 配置数据源 factory.setDataSource(dataSource()); // VendorAdapter HibernateJpaVendorAdapter jpaVendorAdapter=new HibernateJpaVendorAdapter(); jpaVendorAdapter.setShowSql(true); factory.setJpaVendorAdapter(jpaVendorAdapter); // entity包扫描路径 factory.setPackagesToScan("cn.cityworks.security.model"); // jpa属性 factory.setJpaProperties(hibernateProperties()); factory.afterPropertiesSet(); return factory; } /** * 3.事务管理器配置 * * @return */ @Bean public PlatformTransactionManager transactionManager() { JpaTransactionManager manager = new JpaTransactionManager(); manager.setEntityManagerFactory(entityManagerFactory().getObject()); return manager; } /** * 把HibernateExceptions转换成DataAccessExceptions */ @Bean public HibernateExceptionTranslator hibernateExceptionTranslator() { return new HibernateExceptionTranslator(); } /** * hibernate配置 * @return */ private Properties hibernateProperties() { Properties properties = new Properties(); // 显示sql语句 properties.put("hibernate.show_sql", env.getRequiredProperty("jpa.show-sql")); // 格式化sql语句 //properties.put("hibernate.format_sql", env.getRequiredProperty("hibernate.format_sql")); // 方言 properties.put("hibernate.dialect", env.getRequiredProperty("jpa.hibernate.dialect")); // 自动生成表 properties.put("hibernate.hbm2ddl.auto", env.getRequiredProperty("jpa.hibernate.ddl-auto")); // 名字策略 // properties.put("hibernate.ejb.naming_strategy", env.getRequiredProperty("hibernate.ejb.naming_strategy")); return properties; } } packa