Spring Data Jpa 自动生成表结构的方法示例

 更新时间:2019年04月29日 11:40:37   作者:如期而至  
这篇文章主要介绍了Spring Data Jpa 自动生成表结构的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

想在部署的时候随应用的启动而初始化数据脚本,这不就是Spring Data Jpa中的自动生成表结构,听起来特别简单,不就是配置Hibernateddl-auto嘛,有什么好说的,是个人都知道。当初我也是这样认为,实际操作了一把,虽然表是创建成功了,但是字段注释,字符集以及数据库引擎都不对,没想到在这些细节上翻车了。

毕竟开翻的车还要自己扶起来,于是在这记录一下。

注:本文中使用的Spring Data Jpa版本为2.1.4.RELEASE

以MySQL为例,我这边举个例子:

import com.fasterxml.jackson.annotation.*;
import org.hibernate.annotations.*;
import org.springframework.data.annotation.*;

import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.math.BigDecimal;

@Entity
@javax.persistence.Table(name = "basic_city")
@org.hibernate.annotations.Table(appliesTo = "basic_city", comment = "城市基本信息")
public class CityDO {
  
  @Id
  @GenericGenerator(name = "idGenerator", strategy = "uuid")
  @GeneratedValue(generator = "idGenerator")
  @Column(name = "CITY_ID", length = 32)
  private String cityId;
 
  @Column(name = "CITY_NAME_CN", columnDefinition = "VARCHAR(255) NOT NULL COMMENT '名称(中文)'")
  private String cityNameCN;
  
  @Column(name = "CITY_NAME_EN", columnDefinition = "VARCHAR(255) NOT NULL COMMENT '名称(英文)'")
  private String cityNameEN;

  @Column(name = "LONGITUDE", precision = 10, scale = 7)
  private BigDecimal longitude;

  @Column(name = "LATITUDE", precision = 10, scale = 7)
  private BigDecimal latitude;

  @Column(name = "ELEVATION", precision = 5)
  private Integer elevation;

  @Column(name = "CITY_DESCRIPTION", length = 500)
  private String cityDescription;
  
  // 构造方法及get/set方法省略
}

  • @javax.persistence.Table 修改默认ORM规则,属性name设置表名;
  • @org.hibernate.annotations.Table 建表时的描述, 属性comment修改表描述;
  • @Id 主键
  • @GenericGenerator 设置主键策略,这里使用了Hibernate的UUID来生成主键;
  • @GeneratedValue 设置主键值,属性generator关联主键策略的name;
  • @Column 修改默认ORM规则;
    • name设置表中字段名称,表字段和实体类属性相同,则该属性可不写;
    • unique设置该字段在表中是否唯一,默认false;
    • nullable是否可为空,默认true;
    • insertable表示insert操作时该字段是否响应写入,默认为true;
    • updatable表示update操作时该字段是否响应修改,默认为true;
    • columnDefinition是自定义字段,可以用这个属性来设置字段的注释;
    • table表示当映射多个表时,指定表的表中的字段,默认值为主表的表名;
    • length是长度,仅对varchar类型的字段生效,默认长度为255;
    • precision表示一共多少位;
    • scale表示小数部分占precision总位数的多少位,例子中两者共同使用来确保经纬度的精度;

接下来需要设置数据引擎和字符集,网上大把的继承MySQL5InnoDBDialect,但是这个类已经过期了,我们用MySQL5Dialect来代替:

package com.jason.config;

import org.hibernate.dialect.MySQL5Dialect;
import org.springframework.stereotype.Component;

@Component
public class MySQL5TableType extends MySQL5Dialect {

  @Override
  public String getTableTypeString() {
    return "ENGINE=InnoDB DEFAULT CHARSET=utf8";
  }
}

然后在Spring Boot的配置文件中应用上面定义的MySQL5TableType ,使用spring.jpa.properties.hibernate.dialect配置:

spring:
 datasource:
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost:3306/techno?useUnicode=true&characterEncoding=utf8
  username: root
  password: root
 jpa:
  show-sql: true
  hibernate:
   ddl-auto: update
  database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
  properties:
   hibernate:
    dialect: com.jason.config.MySQL5TableType

到此,Sprign Data Jpa生成表就完成了,应用就可以通过ApplicaitonRunner或者CommandLineRunner接口一键部署应用,省去初始化SQL等不必要的操作了,这两个接口的简单使用可以参考我的另外一篇文章

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring Security 在 Spring Boot 中的使用详解【集中式】

    Spring Security 在 Spring Boot 中的使用详解【集中式】

    这篇文章主要介绍了Spring Security 在 Spring Boot 中的使用【集中式】,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • java开发之Jdbc分页源码详解

    java开发之Jdbc分页源码详解

    这篇文章主要介绍了java开发之Jdb分页源码详解,需要的朋友可以参考下
    2020-02-02
  • 浅谈spring.factories文件的作用

    浅谈spring.factories文件的作用

    本文主要介绍了浅谈spring.factories文件的作用,spring.factories文件是Spring Boot自动配置的核心文件之一,它的作用是将各种自动配置类与对应的配置类集中在一起,下面就来介绍一下如何使用,感兴趣的可以了解一下
    2024-06-06
  • Java读写锁ReadWriteLock的创建使用及测试分析示例详解

    Java读写锁ReadWriteLock的创建使用及测试分析示例详解

    这篇文章主要为大家介绍了Java读写锁ReadWriteLock的创建使用及测试分析示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 基于servlet的执行原理与生命周期(全面解析)

    基于servlet的执行原理与生命周期(全面解析)

    下面小编就为大家分享一篇servlet的执行原理与生命周期全面解析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • SpringBoot2种单元测试方法解析

    SpringBoot2种单元测试方法解析

    这篇文章主要介绍了SpringBoot2种单元测试方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java+mysql本地图片上传数据库及下载示例

    Java+mysql本地图片上传数据库及下载示例

    本篇文章主要介绍了Java+mysql本地图片上传数据库及下载示例,具有一定的参加价值,有兴趣的可以了解一下。
    2017-01-01
  • Java之策略模式比较器案例讲解

    Java之策略模式比较器案例讲解

    这篇文章主要介绍了Java之策略模式比较器案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • mybatis-plus 使用Condition拼接Sql语句各方法的用法

    mybatis-plus 使用Condition拼接Sql语句各方法的用法

    这篇文章主要介绍了mybatis-plus 使用Condition拼接Sql语句各方法的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 根据URL下载图片至客户端、服务器的简单实例

    根据URL下载图片至客户端、服务器的简单实例

    下面小编就为大家带来一篇根据URL下载图片至客户端、服务器的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12

最新评论