Springboot+mybatisPlus结合Jpa自动建表

135 阅读1分钟

首先在pom.xml文件中引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

在appication.yml中添加配置

jpa:
  database: mysql
  show-sql: true
  hibernate:
    ddl-auto: update
  properties:
    hibernate:
      dialect: org.hibernate.dialect.MySQL5Dialect

创建实体类

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Objects;
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@Entity
@TableName("post")
@Table(name = "post",indexes = {
        @Index(name = "uuid_index", columnList = "uuid", unique = true)
})
public class PostEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @TableField(value = "uuid")
    @Column(name = "uuid", nullable = false, columnDefinition = "char(64) COMMENT 'UUID'")
    private String uuid;

    @TableField(value = "name")
    @Column(name = "name", nullable = false, columnDefinition = "char(64) COMMENT '帖子名称'")
    private String name;

    @TableField(value = "operator_id")
    @Column(name = "operator_id", nullable = false, columnDefinition = "bigint COMMENT '操作人id'")
    private Long operatorId;

    @TableField(value = "create_time")
    @Column(name = "create_time",nullable = false, columnDefinition = "datetime COMMENT '创建时间'")
    private LocalDateTime createTime;

    @TableField(value = "update_time")
    @Column(name = "update_time",nullable = false, columnDefinition = "datetime COMMENT '更新时间'")
    private LocalDateTime updateTime;
    
}

项目启动后自动创建表。 但是此时我们创建出来的表中的字段顺序不是按照entity中字段的顺序,这是因为jpa默认是按照treeMap去创建的,我们找到源码中的PropertyContainer类,然后在项目中创建一个相同的目录org.hibernate.cfg,然后将PropertyContainer类复制到我们创建的目录下,在这个类中奖TreeMap替换成LinkedHashMap,再次启动后发现创建的表中的字段的顺序跟我们entity中的顺序一致。

image.png