SpringBoot 结合 Mybatis 实现创建数据库表
文章目录
!版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。
系统环境:
- JAVA JDK 版本: 1.8
- MySQL 版本: 8.0.27
- MyBatis 版本: 3.5.9
- SpringBoot版本: 2.6.2
示例地址:
一、为什么要通过应用实现创建表的功能
最近在写项目时,由于需要分库分表,而且每次手动创建很多表,可能是自己闲麻烦,于是乎就找了一些通过应用自动创建表的解决方案,其中本人比较熟悉使用 MyBatis,所以通过博文的形式记录一下,如何在 SpringBoot 环境中,使用 Mybatis 动态的创建数据库中的表的功能。
二、准备创建表的 SQL 语句
本人使用的是 MySql 数据库,为了方便测试,所以提前准备了创建表 SQL 语句,内容如下:
1CREATE TABLE IF NOT EXISTS `user`
2(
3 `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
4 `group_id` int(0) NULL DEFAULT NULL COMMENT '组号',
5 `username` varchar(20) NULL DEFAULT NULL COMMENT '用户名',
6 `password` varchar(20) NULL DEFAULT NULL COMMENT '密码',
7 PRIMARY KEY (`id`)
8) ENGINE = InnoDB
9 AUTO_INCREMENT = 9
10 CHARACTER SET = utf8mb4 COMMENT ='用于测试的用户表';
三、实现通过 MyBatis 创建数据库表示例
本文的目的就是解决通过 MyBatis 执行创建表的语句,从而实现创建数据库中的表的功能,所以话不多说,直接附上实现的示例项目:
3.1 在 Maven 中引入相关依赖
在 Maven 的 pom.xml
文件中,引入 SpringBoot、MySql、MyBatis 等依赖,内容如下:
1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5
6 <parent>
7 <groupId>org.springframework.boot</groupId>
8 <artifactId>spring-boot-starter-parent</artifactId>
9 <version>2.6.2</version>
10 </parent>
11
12 <groupId>club.mydlq</groupId>
13 <artifactId>springboot-mybatis-create-table-example</artifactId>
14 <version>1.0.0</version>
15 <name>springboot-mybatis-example</name>
16 <description>springboot mybatis create table example project</description>
17
18 <properties>
19 <java.version>1.8</java.version>
20 </properties>
21
22 <dependencies>
23 <!-- Web -->
24 <dependency>
25 <groupId>org.springframework.boot</groupId>
26 <artifactId>spring-boot-starter-web</artifactId>
27 </dependency>
28 <!-- Lombok -->
29 <dependency>
30 <groupId>org.projectlombok</groupId>
31 <artifactId>lombok</artifactId>
32 <optional>true</optional>
33 </dependency>
34 <!-- Mysql -->
35 <dependency>
36 <groupId>mysql</groupId>
37 <artifactId>mysql-connector-java</artifactId>
38 </dependency>
39 <!-- MyBatis -->
40 <dependency>
41 <groupId>org.mybatis.spring.boot</groupId>
42 <artifactId>mybatis-spring-boot-starter</artifactId>
43 <version>2.2.1</version>
44 </dependency>
45 </dependencies>
46
47 <build>
48 <plugins>
49 <plugin>
50 <groupId>org.springframework.boot</groupId>
51 <artifactId>spring-boot-maven-plugin</artifactId>
52 </plugin>
53 </plugins>
54 </build>
55
56</project>
3.2 在 SpringBoot 配置文件中添加数据库配置
在 SpringBoot 的 application.yml
文件中,添加数据库连接的参数,配置内容如下:
1spring:
2 application:
3 name: springboot-mybatis-create-table-example
4 # 数据库配置
5 datasource:
6 type: com.zaxxer.hikari.HikariDataSource
7 driverClassName: com.mysql.cj.jdbc.Driver
8 url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true
9 hikari:
10 pool-name: DatebookHikariCP
11 minimum-idle: 5
12 maximum-pool-size: 15
13 max-lifetime: 1800000
14 connection-timeout: 30000
15 username: root
16 password: 123456
17
18# 指定 mapper 的 xml 文件位置
19mybatis:
20 mapper-locations: classpath:mappers/*.xml
3.3 创建测试的 Mapper 接口类
创建一个用户建表的 MyBatis 的 Mapper 接口,代码如下:
1import org.apache.ibatis.annotations.Mapper;
2
3@Mapper
4public interface TableMapper {
5
6 /**
7 * 创建数据库表
8 *
9 * @param tableName 表名称
10 */
11 void createTable(String tableName);
12
13}
3.4 创建与 Mapper 关联的 XML 文件
创建一个用于和 Mapper 接口关联的 xml 文件 TableMapper.xml,在里面添加用于创建表的 SQL 语句,内容如下:
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
4<mapper namespace="club.mydlq.mappers.TableMapper">
5
6 <!--创建表的 SQL 语句-->
7 <update id="createTable" parameterType="java.lang.String">
8 CREATE TABLE IF NOT EXISTS `${tableName}`
9 (
10 `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
11 `group_id` int(0) NULL DEFAULT NULL COMMENT '组号',
12 `username` varchar(20) NULL DEFAULT NULL COMMENT '用户名',
13 `password` varchar(20) NULL DEFAULT NULL COMMENT '密码',
14 PRIMARY KEY (`id`)
15 ) ENGINE = InnoDB
16 AUTO_INCREMENT = 9
17 CHARACTER SET = utf8mb4 COMMENT ='用于测试的用户表';
18 </update>
19
20</mapper>
3.5 创建用于测试的 Controller 类
创建一个用于测试的 Controller 类,里面提供一个创建表的接口,代码如下:
1import club.mydlq.mappers.TableMapper;
2import org.springframework.http.ResponseEntity;
3import org.springframework.web.bind.annotation.*;
4import javax.annotation.Resource;
5
6@RestController
7public class TestController {
8
9 @Resource
10 private TableMapper tableMapper;
11
12 /**
13 * 创建数据库表
14 *
15 * @param tableName 表名称
16 * @return 是否创建成功
17 */
18 @PostMapping("/createTable")
19 public ResponseEntity<String> createTableTest(@RequestParam String tableName) {
20 try {
21 // 创建数据库表
22 tableMapper.createTable(tableName);
23 } catch (Exception e) {
24 return ResponseEntity.status(500).body("创建数据库表失败");
25 }
26 return ResponseEntity.ok("创建数据库表成功");
27 }
28
29}
3.6 创建 SpringBoot 启动类
创建一个用于启动 SpringBoot 的启动类,代码如下:
1import org.springframework.boot.SpringApplication;
2import org.springframework.boot.autoconfigure.SpringBootApplication;
3
4@SpringBootApplication
5public class Application {
6
7 public static void main(String[] args) {
8 SpringApplication.run(Application.class, args);
9 }
10
11}
四、调用创建表的接口进行测试
执行 curl 命令,使用 POST 方法调用之前示例项目 Controller 类中提供的创建表接口 /createTable
,在数据库 test 中创建一个 user
表:
1$ curl -X POST http://localhost:8080/createTable?tableName=user
执行完接口后,再进入数据库,输入下面命令观察库中是否创建包成功:
1mysql> use test;
2Database changed
3
4mysql> show tables;
5+----------------------------------------+
6| Tables_in_test |
7+----------------------------------------+
8| user |
9+----------------------------------------+
101 rows in set (0.00 sec)
可以看到 test 库中已经成功创建了 user
表.
---END---
如果本文对你有帮助,可以关注我的公众号"小豆丁技术栈"了解最新动态,顺便也请帮忙 github 点颗星哦~感谢~
!版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。