2017-03-07 106 views
0

嵌入式数据库(如H2)有一个功能,可以使用预定义的scrypt文件自动生成sql表格。使用预定义的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表(Spring上下文开始时一个bean )在MySQL数据源的情况下。该解决方案不包括JPA/Hibernate。不幸的是,我找不到这个例子了...... 所以,我的问题是如何在Spring数据源的情况下实现Spring自动生成SQL表?

+0

我最终都在那里我看到了解决方案[ http://stackoverflow.com/a/23036217/6776032](http://stackoverflow.com/a/23036217/6776032) – sva605

回答

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; 

}

+0

我知道,如何基于使用JPA的类模型生成表,但我一直在寻找没有JPA的解决方案。 – sva605

+0

看看这个https://www.tutorialspoint.com/jdbc/jdbc-create-tables.htm –