springBoot下實(shí)現(xiàn)java自動(dòng)創(chuàng)建數(shù)據(jù)庫表
SpringBoot環(huán)境啟動(dòng)項(xiàng)目創(chuàng)建數(shù)據(jù)庫表
使用環(huán)境
windows+eclipse+mysql+navicat
步驟
1.創(chuàng)建SpringBoot項(xiàng)目
2.新建數(shù)據(jù)庫,配置連接信息
3.編寫初始化數(shù)據(jù)庫表類
4.運(yùn)行查看結(jié)果
1.創(chuàng)建SpringBoot項(xiàng)目
關(guān)于如何創(chuàng)建SpringBoot項(xiàng)目不再詳細(xì)描述,只要?jiǎng)?chuàng)建一個(gè)可以運(yùn)行的SpringBoot項(xiàng)目就行。
2.新建數(shù)據(jù)庫,配置連接信息
2.1 新建數(shù)據(jù)庫
打開Navicat新建一個(gè)Mysql連接(連接信息如用戶名,密碼記好,下面配置連接信息要用),建立好連接后新建一個(gè)數(shù)據(jù)庫,設(shè)置數(shù)據(jù)庫名稱為"nfsj",這個(gè)根據(jù)自己喜好設(shè)置,記得在下面配置信息修改就行。
2.2 配置連接信息
項(xiàng)目中找到如下圖文件,打開文件添加配置:

打開上述文件,添加如下代碼:
# datasource folivora.datasource.url=jdbc:mysql://localhost:3306/nfsj?useUnicode=true&characterEncoding=utf-8 folivora.datasource.username=root folivora.datasource.password=123456 folivora.datasource.driver-class-name=com.mysql.jdbc.Driver
注意:這里的配置信息天上你創(chuàng)建數(shù)據(jù)庫時(shí)的配置信息。
3.編寫初始化數(shù)據(jù)庫表類
在項(xiàng)目目錄src/main/java下新建一個(gè)包,報(bào)名任意,在包下新建一個(gè)類,類名稱為”InitSysAdminDivisions.java"(類名稱也可以自己命名)。
InitSysAdminDivisions.java
package cn.idatatech.folivora.modules.sys.common;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
//SpringBoot單元測(cè)試啟動(dòng)類注解
//@RunWith(SpringRunner.class)
//@SpringBootTest
//@Component
@Repository //繼承自@Component,作用于持久層
/**
* 如果配置文件沒有在默認(rèn)目錄下,使用注解@PropertySource獲取,下面演示的是在多配置文件中獲取相同屬性名的值,以后置為準(zhǔn)
* 單配置文件只要一個(gè)路徑參數(shù)就可以
*/
//@PropertySource({"classpath:application.properties","classpath:config/config.properties"})
public class InitSysAdminDivisions {
@Value(value = "${folivora.datasource.driver-class-name}")
private String driver;
@Value(value = "${folivora.datasource.url}")
private String url;
@Value(value = "${folivora.datasource.username}")
private String userName;
@Value(value = "${folivora.datasource.password}")
private String password;
@PostConstruct
public void init() throws SQLException, ClassNotFoundException{
//連接數(shù)據(jù)庫
Class.forName(driver);
//測(cè)試url中是否包含useSSL字段,沒有則添加設(shè)該字段且禁用
if( url.indexOf("?") == -1 ){
url = url + "?useSSL=false" ;
}
else if( url.indexOf("useSSL=false") == -1 || url.indexOf("useSSL=true") == -1 )
{
url = url + "&useSSL=false";
}
Connection conn = DriverManager.getConnection(url, userName, password);
Statement stat = conn.createStatement();
//獲取數(shù)據(jù)庫表名
ResultSet rs = conn.getMetaData().getTables(null, null, "sys_admin_divisions", null);
// 判斷表是否存在,如果存在則什么都不做,否則創(chuàng)建表
if( rs.next() ){
return;
}
else{
// 先判斷是否純?cè)诒砻?,有則先刪除表在創(chuàng)建表
// stat.executeUpdate("DROP TABLE IF EXISTS sys_admin_divisions;CREATE TABLE sys_admin_divisions("
//創(chuàng)建行政區(qū)劃表
stat.executeUpdate("CREATE TABLE sys_admin_divisions("
+ "ID varchar(32) NOT NULL COMMENT '行政區(qū)劃ID(行政區(qū)劃代碼)這里不使用32位的UUID,使用全數(shù)字的行政區(qū)域代碼作為ID(如:440000)',"
+ "TYPE varchar(50) DEFAULT NULL COMMENT '類型(1省級(jí) 2市級(jí) 3區(qū)縣)',"
+ "CODE varchar(50) DEFAULT NULL COMMENT '字母代碼',"
+ "NAME varchar(100) DEFAULT NULL COMMENT '名稱',"
+ "PINYIN varchar(100) DEFAULT NULL COMMENT '拼音',"
+ "PARENT_ID varchar(32) DEFAULT NULL COMMENT '上級(jí)行政區(qū)劃數(shù)字代碼',"
+ "IS_DISPLAY int(1) DEFAULT NULL COMMENT '是否顯示( 0:否 1:是 )',"
+ "SORT bigint(20) DEFAULT NULL COMMENT '排序標(biāo)識(shí)',"
+ "DEL_FLAG int(1) DEFAULT NULL COMMENT '刪除標(biāo)識(shí)(0:正常 1:已刪除)',"
+ "PRIMARY KEY (ID)"
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='行政區(qū)劃 (省市區(qū))';"
);
}
// 釋放資源
stat.close();
conn.close();
}
}
注:上面的建表邏輯是先判斷數(shù)據(jù)庫中是否存在要?jiǎng)?chuàng)建的表,如果有則返回不做任何操作。如果數(shù)據(jù)庫中不存在要?jiǎng)?chuàng)建的表,則創(chuàng)建新表。具體邏輯可以根據(jù)自己需求定義。
去掉判斷數(shù)據(jù)庫中是否存在表的判斷操作,也可以使用注釋掉的如果存在表則先刪除表在創(chuàng)建表(這樣會(huì)刪除原表中的數(shù)據(jù))。
4.運(yùn)行查看結(jié)果
找到項(xiàng)目中的Application.java類,運(yùn)行該類,等運(yùn)行完畢后再打開navicate查看自己的數(shù)據(jù)庫,發(fā)現(xiàn)數(shù)據(jù)庫中已經(jīng)創(chuàng)建好了一個(gè)表為"sys_admin_divisions"的表和表中的相關(guān)字段。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java多種方法實(shí)現(xiàn)合并多個(gè)list對(duì)象列表
Java編程中,合并多個(gè)列表對(duì)象可以通過Stream?API或傳統(tǒng)循環(huán)方式實(shí)現(xiàn),使用Stream?API合并時(shí),利用flatMap方法將嵌套的List展平,再通過collect方法收集成一個(gè)新的列表,傳統(tǒng)循環(huán)則通過創(chuàng)建一個(gè)空的ArrayList,并通過遍歷每個(gè)列表將元素添加進(jìn)去2024-09-09
spring boot項(xiàng)目打包成war在tomcat運(yùn)行的全步驟
這篇文章主要給大家介紹了關(guān)于spring boot項(xiàng)目打包成war在tomcat運(yùn)行的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Java編程學(xué)習(xí)的幾個(gè)典型實(shí)例詳解
這篇文章主要給大家介紹了Java編程學(xué)習(xí)的幾個(gè)典型實(shí)例,其中包括模擬酒店房間管理系統(tǒng)、螺旋矩陣 例或者百雞問題的變形等經(jīng)典實(shí)例,具體來一起看詳細(xì)內(nèi)容吧,需要的朋友可以參考學(xué)習(xí)。2017-02-02
Java實(shí)現(xiàn)二維碼QRCode的編碼和解碼與示例解析
本文主要介紹Java實(shí)現(xiàn)二維碼QRCode的編碼和解碼,這里給大家一個(gè)小示例以便理解,有需要的小伙伴可以參考下2016-08-08
SpringCloud的網(wǎng)關(guān)Zuul和Gateway詳解
SpringCloudZuul和SpringCloudGateway都是用于構(gòu)建微服務(wù)架構(gòu)中的API網(wǎng)關(guān)的組件,但SpringCloudGateway在性能、功能特性和生態(tài)支持等方面有一些優(yōu)勢(shì),因此推薦使用SpringCloudGateway作為首選2025-02-02

