美文网首页
springboot初始化数据

springboot初始化数据

作者: 我要进大厂 | 来源:发表于2020-03-21 17:04 被阅读0次

    初始化数据

    • 初始化数据分为jpa和JDBC两种方式。

    • 场景:个人博客项目,启动项目后,数据库user表自动创建用户:admin,密码:admin,该怎么处理?

    jpa提供的import

    执行过程:

    1、application.properties需设置spring.jpa.hibernate.ddl-auto=create;

    2、springboot会通过实体类创建表;

    3、再执行import.sql。

    所以,只要有实体类user存在,则可以在import.sql中直接使用insert语句插入数据到user表即可,不需要在import.sql中定义创建user表的ddl语句。(import.sql中是可以定义create等ddl语句的,不单只能insert操作。)

    操作步骤:

    1、在application.properties修改以下内容:

    # 一定要设置成create,第二次启动程序前,设置成update
    spring.jpa.hibernate.ddl-auto=create
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
    

    2、在src/main/resources目录下新建import.sql(名字一定要是import.sql),内容如下

    USE  lifeassistant;
    # DROP TABLE IF EXISTS `assistant_user`;
    # CREATE TABLE `assistant_user` (`userid` bigint(20) NOT NULL AUTO_INCREMENT,`email` varchar(255) NOT NULL,`nick_name` varchar(255) DEFAULT NULL,`pass_word` varchar(255) NOT NULL,  `reg_time` varchar(255) NOT NULL,`user_name` varchar(255) NOT NULL,PRIMARY KEY (`userid`),UNIQUE KEY `UK_o77ap0bvrxaxwxw47n1hyt45w` (`email`),UNIQUE KEY `UK_83y7vvenwcl1jp0wy1s3xvtnw` (`user_name`),UNIQUE KEY `UK_np9hoj3ubl5wjjs3wuf1ec6oq` (`nick_name`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    -- ----------------------------
    -- Records of assistant_user
    -- ----------------------------
    INSERT INTO `assistant_user` VALUES ('1', 'admin', 'admin', 'admin@126.com', '2020年3月21日 下午01时15分47秒', 'aa1');
    

    3、启动应用,进行初始化数据

    4、启动完成后,停止应用,修改spring.jpa.hibernate.ddl-auto=create成spring.jpa.hibernate.ddl-auto=update后,再次启动应用。即spring.jpa.hibernate.ddl-auto设置成update时,import.sql不会执行。

    缺点:第一次执行,导入数据后。需要将spring.jpa.hibernate.ddl-auto=create设置成spring.jpa.hibernate.ddl-auto=update。不然第二次执行,会因spring.jpa.hibernate.ddl-auto设置是create值,先drop表,再创建表,导致第一次启动应用后的数据丢失。(比如,新增了另一个用户,就这样在第二次启动应用丢失了)

    JDBC方式

    1、在application.properties新增以下内容:

    # 一定要设置成always
    spring.datasource.initialization-mode=always
    spring.datasource.sql-script-encoding=utf-8
    # schema.sql 一般放ddl语句,data.sql放insert语句。当然可以将data.sql的内容整合到schema.sql文件中,只设置spring.datasource.schema
    spring.datasource.schema=classpath:schema.sql
    spring.datasource.data=classpath:data.sql
    

    2、在src/main/resources目录下新建schema.sql(名字可以自定义)、data.sql(名字可以自定义)。

    • schema.sql
    USE  lifeassistant;
    DROP TABLE IF EXISTS `assistant_user1`;
    CREATE TABLE `assistant_user1` (`userid` bigint(20) NOT NULL AUTO_INCREMENT,`email` varchar(255) NOT NULL,`nick_name` varchar(255) DEFAULT NULL,`pass_word` varchar(255) NOT NULL,  `reg_time` varchar(255) NOT NULL,`user_name` varchar(255) NOT NULL,PRIMARY KEY (`userid`),UNIQUE KEY `UK_o77ap0bvrxaxwxw47n1hyt45w` (`email`),UNIQUE KEY `UK_83y7vvenwcl1jp0wy1s3xvtnw` (`user_name`),UNIQUE KEY `UK_np9hoj3ubl5wjjs3wuf1ec6oq` (`nick_name`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    
    • data.sql
    USE  lifeassistant;
    INSERT INTO `assistant_user1` VALUES ('4', 'aa', 'aa123456', 'aa@126.com', '2020年3月21日 下午01时15分47秒', 'aa1');
    INSERT INTO `assistant_user1` VALUES ('2', 'bb', 'bb123456', 'bb@126.com', '2020年3月21日 下午01时15分47秒', 'bb2');
    INSERT INTO `assistant_user1` VALUES ('3', 'cc', 'cc123456', 'cc@126.com', '2020年3月21日 下午01时15分47秒', 'cc3');
    

    3、启动应用,进行初始化数据

    4、启动完成后,停止应用,步骤一设置的spring.datasource.initialization-mode等注释掉。

    再次启动应用。使用jdbc方式,不跟spring.jpa.hibernate.ddl-auto值有关系,无论是create和update都不影响jdbc这种初始化方式。

    两种方式比较:

    第一种方式启动的时候jpa会根据实体类创建表,import.sql负责初始化数据(insert等操作)。

    第二种方式启动的时候,不会创建表,需要在初始化脚本schema.sql,data.sql中判断是否存在表,再初始化脚本中的步骤。

    如果使用jpa的话,那就选择第一种方式;如果使用的mybatis,则可选择第二种方式。

    相关文章

      网友评论

          本文标题:springboot初始化数据

          本文链接:https://www.haomeiwen.com/subject/kkhuyhtx.html