美文网首页
Springboot项目启动时创建数据库

Springboot项目启动时创建数据库

作者: Hiper | 来源:发表于2022-11-14 21:00 被阅读0次

基本思路是在项目启动后运行一个update语句,里面是建表语句。
在数据源设置allowMultiQueries=true允许多行sql语句执行。
这种方法有SQL注入的风险,建议实际项目中不要采用。

首先创建一个初始化数据库的类,实现CommandLineRunner接口

@Component
@Slf4j
@Order(value = 1) //order值越低,优先级越高
public class InitMySql implements CommandLineRunner {

    @Resource
    MySqlMapper mySqlMapper;

    @Resource
    UserMapper userMapper;

    /**
     * Callback used to run the bean.
     *
     * @param args incoming main method arguments
     * @throws Exception on error
     */
    @Override
    public void run(String... args) throws Exception {
        log.info("开始初始化数据库...");
        createTable();
        insertData();
        log.info("数据库初始化完毕!");
    }

    /**
     * 初始化表
     */
    private void createTable() {
        log.info("开始创建表...");
        mySqlMapper.createTable();
        log.info("建表完毕!");
    }

    /**
     * 初始化数据
     */
    private void insertData() {
        log.info("开始插入数据...");
        int userNum = 10000;
        List<User> users = new ArrayList<>(userNum);
        for(int i=0; i<userNum; i++) {
            User user = new User();
            users.add(user);
        }
        ListUtils.partition(users, 100).forEach(userMapper::insertList);
        log.info("数据插入完成!");
    }
}

在Mapper对应的xml文件中写入建表语句

<update id="createTable">
        drop table if exists user;
        create table user (
        id int auto_increment,
        primary key(id)
        );
    </update>

最后,在application.yml中的数据库配置allowMultiQueries

url: jdbc:mysql://localhost:3306/user?serverTimezone=UTC&allowMultiQueries=true

相关文章

网友评论

      本文标题:Springboot项目启动时创建数据库

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