嵌入式数据库(如 H2)有一个功能,它为我们提供了使用预定义的 scrypt 文件自动生成 sql 表的可能性。
Bean 示例:
@Bean
public DataSource dataSource() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
return builder
.setType(EmbeddedDatabaseType.H2)
.addScript("embeddedDB.sql")
.build();
}
Scrypt 文件示例:
CREATE TABLE Users
(
id INT(11) NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
photo BLOB,
registration_date DATE NOT NULL,
role VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);
前段时间在网上看到了一个类似的解决方案,配置一个bean,在MySQL数据源的情况下自动生成SQL表(当spring上下文启动时)。该解决方案不包括 JPA/Hibernate。不幸的是,我再也找不到这个例子了...... 那么,我的问题是,对于MySQL数据源,如何实现Spring自动生成SQL表?
最佳答案
Spring Boot中的属性文件
datasource.ranking.hibernate.hbm2ddl.method=create
创建将创建新表,更新将保留表。这些表将根据您的类模型创建 然后在配置类中设置实体管理器属性
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws NamingException {
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(dataSource());
factoryBean.setPackagesToScan(new String[] { "com.package" });
factoryBean.setJpaVendorAdapter(jpaVendorAdapter());
factoryBean.setJpaProperties(jpaProperties());
return factoryBean;
}
private Properties jpaProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", environment.getRequiredProperty("datasource.ranking.hibernate.dialect"));
properties.put("hibernate.hbm2ddl.auto", environment.getRequiredProperty("datasource.ranking.hibernate.hbm2ddl.method"));
properties.put("hibernate.show_sql", environment.getRequiredProperty("datasource.ranking.hibernate.show_sql"));
properties.put("hibernate.format_sql", environment.getRequiredProperty("datasource.ranking.hibernate.format_sql"));
/* if(StringUtils.isNotEmpty(environment.getRequiredProperty("datasource.ranking.defaultSchema"))){
properties.put("hibernate.default_schema", environment.getRequiredProperty("datasource.ranking.defaultSchema"));
}*/
return properties;
}
关于java - 使用预定义的scrypt文件通过Spring自动生成sql表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42652825/