通过使用预定义的脚本文件,利用Spring自动地生成SQL表格。

14 浏览
0 Comments

通过使用预定义的脚本文件,利用Spring自动地生成SQL表格。

有一种针对嵌入式数据库(如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数据源的情况下在spring上下文启动时自动生成SQL表。那个解决方案不包括JPA / Hibernate。不幸的是,我找不到这个例子了......

所以,我的问题是如何在MySQL数据源的情况下通过Spring实现自动SQL表生成?

0
0 Comments

生成SQL表格的问题出现的原因是想要在Spring中自动使用预定义的脚本文件。解决方法是在Spring Boot中使用属性文件来配置数据源和实体管理器,并设置相关属性。

在Spring Boot中,可以通过配置属性文件来实现自动生成SQL表格。首先,在属性文件中设置datasource.ranking.hibernate.hbm2ddl.method=create,这样可以创建新的表格。如果将其设置为update,则不会创建新的表格,而是保留现有的表格。表格的创建是基于类模型的。

然后,在配置类中设置实体管理器的属性。具体代码如下:

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;
}

在以上代码中,使用dataSource()方法设置数据源,使用setPackagesToScan()方法设置要扫描的包,使用jpaVendorAdapter()方法设置JPA厂商适配器,使用jpaProperties()方法设置JPA属性。

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"));
    return properties;
}

在以上代码中,使用environment.getRequiredProperty()方法获取属性文件中的值,并将其设置为Hibernate的相关属性,如方言、hbm2ddl方法、是否显示SQL语句等。

通过以上配置,可以实现在Spring中自动生成SQL表格。如果希望不使用JPA来生成表格,可以参考tutorialspoint.com/jdbc/jdbc-create-tables.htm上的教程。

0