前置条件
在开发之前,请确保本地项目已经创建成功,详见 新建项目
介绍
项目创建成功之后,需要初始化本地数据库。
- 创建用户
- 创建数据库
- 编写表结构对应的groovy脚本
- 初始化表结构
- 验证表结构
- 项目数据库配置
创建用户
确保数据库启动成功,并创建项目访问的用户。
CREATE USER 'hzero'@'%' IDENTIFIED BY "hzero";
创建数据库
用户创建成功之后,创建项目对应的数据库,并将新创建的数据库权限赋予用户。
CREATE DATABASE todo_service DEFAULT CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON todo_service.* TO hzero@'%';
FLUSH PRIVILEGES;
编写表结构对应的groovy脚本
HZERO 采用Liquibase
+ groovy
的方式对数据库管理。
更多有关Liguibase的资料见 Liquibase 官网。
创建groovy
文件存储的文件夹,并且创建groovy
文件。
$ mkdir -p src/main/resources/script/db
$ cd src/main/resources/script/db
$ touch todo_user.groovy todo_task.groovy
todo_user.groovy
package script.db
databaseChangeLog(logicalFilePath: 'todo_user.groovy') {
changeSet(id: '2018-11-20-todo_user', author: 'your.email@email.com') {
createTable(tableName: "TODO_USER") {
column(name: 'ID', type: 'BIGINT UNSIGNED', remarks: 'ID', autoIncrement: true) {
constraints(primaryKey: true)
}
column(name: 'EMPLOYEE_NAME', type: 'VARCHAR(32)', remarks: '员工名')
column(name: 'EMPLOYEE_NUMBER', type: 'VARCHAR(32)', remarks: '员工号') {
constraints(unique: true)
}
column(name: 'EMAIL', type: 'VARCHAR(32)', remarks: '邮箱')
column(name: "OBJECT_VERSION_NUMBER", type: "BIGINT", defaultValue: "1")
column(name: "CREATED_BY", type: "BIGINT", defaultValue: "-1")
column(name: "CREATION_DATE", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP")
column(name: "LAST_UPDATED_BY", type: "BIGINT", defaultValue: "-1")
column(name: "LAST_UPDATE_DATE", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP")
}
}
}
todo_task.groovy
package script.db
databaseChangeLog(logicalFilePath: 'todo_task.groovy') {
changeSet(id: '2018-11-20-todo_task', author: 'your.email@email.com') {
createTable(tableName: "TODO_TASK") {
column(name: 'ID', type: 'BIGINT UNSIGNED', remarks: 'ID', autoIncrement: true) { constraints(primaryKey: true) }
column(name: 'EMPLOYEE_ID', type: 'BIGINT', remarks: '员工ID') { constraints(nullable:"false") }
column(name: 'STATE', type: 'VARCHAR(30)', remarks: '状态') { constraints(nullable:"false") }
column(name: 'TASK_NUMBER', type: 'VARCHAR(60)', remarks: '任务编号') { constraints(unique: true, nullable:"false") }
column(name: 'TASK_DESCRIPTION', type: 'VARCHAR(240)', remarks: '任务描述')
column(name: 'TENANT_ID', type: 'BIGINT', remarks: '租户ID') { constraints(nullable:"false") }
column(name: "OBJECT_VERSION_NUMBER", type: "BIGINT", defaultValue: "1")
column(name: "CREATED_BY", type: "BIGINT", defaultValue: "-1")
column(name: "CREATION_DATE", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP")
column(name: "LAST_UPDATED_BY", type: "BIGINT", defaultValue: "-1")
column(name: "LAST_UPDATE_DATE", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP")
}
}
}
初始化表结构
在项目根目录下,创建init-local-database.sh
文件。
$ touch init-local-database.sh
修改初始化脚本,采用猪齿鱼的数据库初始化工具choerodon-tool-liquibase
进行初始化。
#!/bin/bash
version="0.10.0.RELEASE"
mkdir -p tool-jar
if [ ! -f bin/choerodon-tool-liquibase.jar ]
then
curl https://oss.sonatype.org/content/groups/public/io/choerodon/choerodon-tool-liquibase/${version}/choerodon-tool-liquibase-${version}.jar -o ./tool-jar/choerodon-tool-liquibase.jar
fi
java -Dspring.datasource.url="jdbc:mysql://db.hzero.org:3306/todo_service?useUnicode=true&characterEncoding=utf-8&useSSL=false" \
-Dspring.datasource.username=hzero \
-Dspring.datasource.password=hzero \
-Ddata.drop=false -Ddata.init=true \
-Ddata.dir=./src/main/resources \
-jar ./tool-jar/choerodon-tool-liquibase.jar
进入根目录执行如下命令:
$ sh ./init-local-database.sh
控制台打印出如下信息,则表示初始化成功。
数据库初始化任务完成
脚本执行程序会自动扫描resources
中的groovy
数据库初始化文件以及excel
初始化数据。
执行 init-local-database.sh
脚本,若出现错误:
Error: Invalid or corrupt jarfile target/choerodon-tool-liquibase.jar
则自行下载最新版本的 choerodon-tool-liquibase.jar 并重命名覆盖./bin/choerodon-tool-liquibase.jar 并重新执行init-local-database.sh
脚本
验证表结构
登录数据库,查询现有的表结构。
mysql> show tables;
+---------------------------------------+
| Tables_in_todo_service |
+---------------------------------------+
| DATABASECHANGELOG |
| DATABASECHANGELOGLOCK |
| TODO_TASK |
| TODO_USER |
+---------------------------------------+
5 rows in set (0.00 sec)
项目数据库配置
在pom.xml
文件中添加数据库操作相关依赖。
<dependency>
<groupId>org.hzero.starter</groupId>
<artifactId>hzero-starter-mybatis-mapper</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
在项目的 application.yml
文件中添加数据库连接信息:
spring:
datasource:
url: ${SPRING_DATASOURCE_URL:jdbc:mysql://db.hzero.org:3306/todo_service?useUnicode=true&characterEncoding=utf-8&useSSL=false}
username: ${SPRING_DATASOURCE_USERNAME:hzero}
password: ${SPRING_DATASOURCE_PASSWORD:hzero}
# MyBatis Mapper 扫描
mybatis:
mapperLocations: classpath*:/mapper/*.xml
configuration:
mapUnderscoreToCamelCase: true
项目根目录下执行命令。项目正常启动,则数据库连接配置正常。
$ mvn clean spring-boot:run