内容简介:想在部署的时候随应用的启动而初始化数据脚本,这不就是毕竟开翻的车还要自己扶起来,于是在这记录一下。注:本文中使用的
想在部署的时候随应用的启动而初始化数据脚本,这不就是 Spring Data Jpa
中的自动生成表结构,听起来特别简单,不就是配置 Hibernate
的 ddl-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
等不必要的操作了,这两个接口的简单使用可以参考我的另外一篇文章。
原创不易,感谢支持。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 数据生成工具 ZenData 发布 2.0 版本,自动生成“互联网黑话”!
- 自动生成高效DNN,适用于边缘设备的生成合成工具FermiNets
- Simulink自动生成代码
- changelog 日志自动生成插件
- 深度有趣 | 23 歌词古诗自动生成
- 自定义Mybatis自动生成代码规则
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Coding the Matrix
Philip N. Klein / Newtonian Press / 2013-7-26 / $35.00
An engaging introduction to vectors and matrices and the algorithms that operate on them, intended for the student who knows how to program. Mathematical concepts and computational problems are motiva......一起来看看 《Coding the Matrix》 这本书的介绍吧!