嵌入式数据库(如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)
);
前段时间,在网上看到了一个类似的解决方案来配置一个自动生成SQL表的bean(当弹出上下文启动时),以防MySQL数据源。该解决方案不包括JPA / Hibernate。不幸的是,我再也找不到这个例子...... 所以,我的问题是如何在MySQL数据源的情况下实现Spring生成的自动SQL表?
答案 0 :(得分:0)
春季启动时的属性文件
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;
}