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

Posted

技术标签:

【中文标题】使用预定义的 scrypt 文件通过 Spring 自动生成 sql 表【英文标题】:Generating sql tables by means of Spring automatically using predefined scrypt file 【发布时间】:2017-07-27 22:16:55 【问题描述】:

嵌入式数据库(如 H2)的功能使我们能够使用预定义的 scrypt 文件自动生成 sql 表。

豆示例:

@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 表?

【问题讨论】:

我终于找到了在哪里看到了解决方案http://***.com/a/23036217/6776032 【参考方案1】:

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;

【讨论】:

我知道,如何使用 JPA 生成基于类模型的表,但我一直在寻找没有 JPA 的解决方案。 看看这个tutorialspoint.com/jdbc/jdbc-create-tables.htm

以上是关于使用预定义的 scrypt 文件通过 Spring 自动生成 sql 表的主要内容,如果未能解决你的问题,请参考以下文章

sCrypt 合约中的内联脚本

sCrypt 调试器简介

sCrypt 新功能介绍 (v1.9.0)

SCrypt对密码进行加密及密码验证

我可以通过加盐现有的 MD5 散列并使用 Scrypt 或 PBKDF2 HMACSHA256 散列结果来提高 MD5 散列密码的安全性吗?

sCrypt IDE 新功能——调试链上合约