最近有一个业务是需要将计算后的数据进行存库操作,突发奇想,是否有一种方式,可以不操作数据库,在项目代码中使用 sql 语句进行建表。
准备工作,集成 MyBatis 的 SpringBoot 项目。可参考以下文章,本文示例就是在这个基础上开发的。
SpringBoot 项目整合 MyBatis 框架,附带测试示例
1、准备建表的 sql 语句
语句还有很多可添加的操作,类似于,表格存在就不再重新建表等功能。
另外,这个是要对应数据库,如果是 MySQL
数据库就要用 MySQL
的 sql
语法,如果是 Oracle
数据库要用 Oracle
的 sql
语法。本文的示例是使用 MySQL
数据库。
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT,
email VARCHAR(100) UNIQUE
);
接下来,我们需要将 sql 语句放入到 mapper.xml
文件中。
2、构建含 sql 语句的 mapper.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wen.mapper.SchemaMapper">
<insert id="runSingleScript">
SELECT 1;
</insert>
<update id="runScript">
CREATE TABLE student (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT,
email VARCHAR(100) UNIQUE
);
</update>
</mapper>
3、创建对应的 mapper
package com.wen.mapper;
import org.apache.ibatis.annotations.Param;
public interface SchemaMapper {
// 运行 sql 脚本
void runScript(@Param("tableSuffix") String tableSuffix);
void runSingleScript();
}
4、Controller 接口调用
package com.wen.controller;
import com.wen.mapper.SchemaMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api")
public class TaskController {
@Autowired
private SchemaMapper schemaMapper;
@GetMapping("schema")
public String schema() {
schemaMapper.runScript("schema");
return "success";
}
}
调用接口就可以创建表格了。
除了使用接口外,还可以用到项目启动时,设定标识在配置文件,项目重启时执行一次。