java - 使用Springboot搭建的web應(yīng)用,運(yùn)行中,數(shù)據(jù)庫(kù)表可否自動(dòng)生成使用?
問題描述
1.先說前提:使用spring boot搭建的spring應(yīng)用;使用了Hibernate,在pom中添加了spring-boot-starter-data-jpa;數(shù)據(jù)庫(kù)是MySql;開發(fā)工具是IDEA。
我以前沒有做過web開發(fā),對(duì)數(shù)據(jù)庫(kù)也了解的也不多,所以我下面要說的,如果有不現(xiàn)實(shí)或者實(shí)現(xiàn)方式不好的情況,希望大家不吝賜教,多謝!!
2.想達(dá)到的需求:比如說,我這個(gè)數(shù)據(jù)庫(kù)中要錄入多個(gè)學(xué)校的若干個(gè)學(xué)生的信息。數(shù)據(jù)量可能非常大,我不想把那么多學(xué)生信息放在同一個(gè)表中。我的設(shè)想是,每一所學(xué)校一個(gè)“XX學(xué)校學(xué)生信息表”(tbl_School_XX,比如“tbl_School_01”),然后把該校學(xué)生的信息錄入到那個(gè)表中。應(yīng)用本身學(xué)校索引表(tbl_School_Index),這個(gè)表中有一個(gè)索引字段(比如index)來存各個(gè)學(xué)校的表名(比如“tbl_School_01”)。·當(dāng)要錄入新的學(xué)校的學(xué)生信息,則在添加學(xué)校時(shí),應(yīng)用會(huì)自動(dòng)生成一個(gè)新的“XX學(xué)校學(xué)生信息表”,應(yīng)用會(huì)自動(dòng)起好表名(比如“tbl_School_01”),用這個(gè)新表來存新學(xué)校的學(xué)生的信息。同時(shí),這個(gè)表名也會(huì)添加到學(xué)校索引表(tbl_School_Index)的索引字段(index)。·當(dāng)要讀取學(xué)生信息,或者當(dāng)要錄入現(xiàn)有學(xué)校的新學(xué)生信息時(shí),則會(huì)從學(xué)校索引表(tbl_School_Index)中找出索引字段(index)中的數(shù)據(jù)(比如“tbl_School_01”),然后讀/寫表tbl_School_01。
如圖
3.我目前遇上的困難是:(1)我知道關(guān)系型數(shù)據(jù)庫(kù)不允許表中表,所以才想出這么一種辦法,不知道是否可行,或者說,是否恰當(dāng)。(2)當(dāng)我新建一個(gè)實(shí)體類(@Entity)時(shí),配置好屬性和get/set方法后,運(yùn)行應(yīng)用,會(huì)在數(shù)據(jù)庫(kù)中生成對(duì)應(yīng)的一個(gè)表,可是我不需要生成那個(gè)表,我是需要當(dāng)添加學(xué)校時(shí),動(dòng)態(tài)的生成對(duì)應(yīng)那個(gè)實(shí)體類的表。
4.其他想法
我有想過把幾個(gè)學(xué)校的所有學(xué)生的信息放在一個(gè)表中,然后在那個(gè)表里添加一個(gè)“學(xué)校”字段來標(biāo)注該學(xué)生是哪所學(xué)校的,但是我怕當(dāng)數(shù)據(jù)量變大時(shí),這個(gè)表的使用會(huì)出各種問題。
5.我說的可能有點(diǎn)啰嗦,多謝各位認(rèn)真看完,望能指點(diǎn)迷經(jīng),多謝!
問題解答
回答1:當(dāng)要錄入新的學(xué)校的學(xué)生信息,則在添加學(xué)校時(shí),應(yīng)用會(huì)自動(dòng)生成一個(gè)新的“XX學(xué)校學(xué)生信息表”,應(yīng)用會(huì)自動(dòng)起好表名(比如“tbl_School_01”),用這個(gè)新表來存新學(xué)校的學(xué)生的信息。同時(shí),這個(gè)表名也會(huì)添加到學(xué)校索引表(tbl_School_Index)的索引字段(index)。
首先根據(jù)你目前的描述(目前的描述沒有涉及到一些需要跨表之類的操作)這種方式是可行的,當(dāng)添加學(xué)生時(shí),如果學(xué)校不存在,需要插入學(xué)校索引,并新建相關(guān)表然后插入學(xué)生信息,這個(gè)可以用代碼實(shí)現(xiàn)(這是在不重啟應(yīng)用的情況下),不重啟應(yīng)用的情況下,用配置我不知道能否實(shí)現(xiàn),如果有人知道,麻煩告知,謝謝。
(2)當(dāng)我新建一個(gè)實(shí)體類(@Entity)時(shí),配置好屬性和get/set方法后,運(yùn)行應(yīng)用,會(huì)在數(shù)據(jù)庫(kù)中生成對(duì)應(yīng)的一個(gè)表,可是我不需要生成那個(gè)表,我是需要當(dāng)添加學(xué)校時(shí),動(dòng)態(tài)的生成對(duì)應(yīng)那個(gè)實(shí)體類的表。
你這里說的是應(yīng)用可以重啟,如果應(yīng)用可以重啟,那是可以通過配置來插入數(shù)據(jù),并且自動(dòng)建表的。需要對(duì)hibernate進(jìn)行配置,并把相應(yīng)SQL的腳本放到resources下面就可以了。
application.properties中hibernate的配置
spring.datasource.driverClassName=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8spring.datasource.username=rootspring.datasource.password=root# 1spring.jpa.properties.hibernate.hbm2ddl.auto=updatespring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect# 2spring.jpa.show-sql=true
sql腳本存放
相關(guān)文章:
