通过Entity 创建数据库中的表,目前只支持mysql,A.CTable使用mybatis/mybatis-plus自动创建表

文章目录

      • [1. 添加依赖](#1. 添加依赖)
      • [2. 配置数据源和 MyBatis-Plus](#2. 配置数据源和 MyBatis-Plus)
      • [3. 编写实体类 `A.CTable`](#3. 编写实体类 A.CTable)
      • [4. 创建 Mapper 接口](#4. 创建 Mapper 接口)
      • [5. 启动类添加扫描注解](#5. 启动类添加扫描注解)
      • 总结
      • 常见错误
      • 参考文档

1. 添加依赖

首先,确保您的项目中已经引入了 mybatis-plus-boot-starter。如果使用 MySQL,请同时引入 MySQL 驱动。

Maven (pom.xml):

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- MyBatis-Plus 启动器 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.3.2</version> <!-- 请使用最新稳定版本 -->
    </dependency>

    <!-- MySQL 连接器 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- 其他必要的依赖,如 spring-boot-starter-web -->
</dependencies>

2. 配置数据源和 MyBatis-Plus

application.ymlapplication.properties 文件中,配置数据库连接信息和 MyBatis-Plus 的自动建表策略。

application.yml:

yaml 复制代码
spring:
  datasource:
    # 根据您实际使用的数据库填写
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/your_database_name?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
    username: your_username
    password: your_password

mybatis-plus:
  configuration:
    # 开启下划线到驼峰的映射
    map-underscore-to-camel-case: true
  global-config:
    db-config:
      # 指定全局的主键策略,AUTO 为数据库自增
      id-type: auto
      # 配置 DDL 创建策略
      # - create-drop: 启动时创建表,关闭时删除表 (会清空数据)
      # - create: 启动时创建表,关闭时不删除 (会清空数据)
      # - update: 启动时更新表结构,如果表不存在则创建 (推荐用于开发和生产环境)
      # - validate: 启动时验证表结构是否一致,不一致则报错 (推荐用于生产环境)
      ddl-auto: update # 推荐使用 update,它最安全且实用

3. 编写实体类 A.CTable

创建一个静态内部类 A.CTable,并使用 MyBatis-Plus 提供的注解来描述表结构。

java 复制代码
package com.example.yourpackage; // 请替换为你的包名

import com.baomidou.mybatisplus.annotation.*;

// 使用 @TableName 注解指定映射的数据库表名
@TableName("c_table")
public class A {

    // 使用 @TableId 注解指定主键,并设置策略为自增
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    // 使用 @TableField 注解映射普通字段
    @TableField("name")
    private String name;

    @TableField("description")
    private String description;

    // 为了方便使用,通常提供 getter 和 setter 方法
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    // toString, equals, hashCode 等方法也可以加上...
}

4. 创建 Mapper 接口

为了让 MyBatis-Plus 能够管理这个实体,你需要创建一个继承自 BaseMapper<T> 的 Mapper 接口。

java 复制代码
package com.example.yourpackage.mapper; // 请替换为你的 Mapper 包名

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.yourpackage.A; // 导入你的实体类

// 继承 BaseMapper<A>,获得对 A.CTable 的基本 CRUD 操作
public interface CTableMapper extends BaseMapper<A> {

}

5. 启动类添加扫描注解

最后,在你的 Spring Boot 启动类上,使用 @MapperScan 注解来扫描 Mapper 接口所在的包。

java 复制代码
package com.example.yourpackage;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
// 扫描 Mapper 接口所在的包,例如 "com.example.yourpackage.mapper"
@MapperScan("com.example.yourpackage.mapper") 
public class YourApplication { // 替换为你的启动类名称

    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }

}

总结

完成以上配置后,当您启动 Spring Boot 应用程序时,MyBatis-Plus 会根据 A.CTable 实体类的定义,在数据库中自动创建名为 c_table 的表(如果该表尚不存在),或者根据 ddl-auto 的配置更新表结构。

  • ddl-auto: update: 是最常用的选择,它会保留现有数据,仅同步实体类中定义的字段变化。
  • 实体类注解 : @TableName, @TableId, @TableField 是控制表结构映射的关键。

常见错误

  • 没有给Data 设置数据库中对应的类型

    解决方式:

  • 字段太多,没有设置长度,数据库一个记录最大的空间为65535

参考文档

相关推荐
这个DBA有点耶1 天前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑
数据库·mysql·代码规范
这个DBA有点耶1 天前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
镜舟科技1 天前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
Databend1 天前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
ClouGence1 天前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践
数据库·sql server
先吃饱再说2 天前
存储的进化:从 MySQL 到浏览器缓存,数据到底住在哪?
数据库
Nturmoils2 天前
字段太多看不全,ksql 的展开模式和输出控制怎么用
数据库·后端
Databend2 天前
Agent 轨迹分析与归因的数据工程实践
大数据·数据库·agent
这个DBA有点耶2 天前
SQL改写进阶:标量子查询的“隐形代价”与消除实战
数据库·mysql·架构
smallyoung2 天前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·mysql·postgresql