java - 使用预定义的scrypt文件通过Spring自动生成sql表

标签 java mysql spring

嵌入式数据库(如 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/

相关文章:

java - 我在哪里可以获得 Spring 源代码?

java - 为什么 Controller 需要在绑定(bind)错误上添加模型

java - Spring配置初始化方法

java - 将预定义操作关联到关闭按钮 Java JDialog

java - 访问子类中的父类(super class)静态方法

php - 如何保护项目免受黑客攻击?

php - 在选择查询mysql中使用嵌套IF

java - 当短信再次发送时,命令显示忙(在java中)

java.lang.IllegalStateException : missing behavior definition for the preceding method call getLast(. ..)

mysql - 使用 2 列删除带有 NOT IN 的行的 SQL 查询