1.先說前提:
使用spring boot搭建的spring應用;
使用了Hibernate,在pom中加入了spring-boot-starter-data-jpa;
資料庫是MySql;
開發工具是IDEA。
我以前沒有做過web開發,對資料庫也了解的也不多,所以我下面要說的,如果有不現實或實現方式不好的情況,希望大家不吝賜教,多謝! !
2.想達到的需求:
比如說,
我這個資料庫中要錄入多個學校的若干個學生的資料。
資料量可能非常大,我不想把那麼多學生資訊放在同一個表中。
我的設想是,
每一所學校一個「XX學校學生資訊表」(tbl_School_XX,例如「tbl_School_01」),然後把該校學生的資料錄入那個表中。
應用程式本身學校索引表(tbl_School_Index),這個表格中有一個索引欄位(例如index)來存各學校的表名(例如「tbl_School_01」)。
·當要輸入新的學校的學生訊息,則在新增學校時,應用程式會自動產生一個新的“XX學校學生資訊表”,應用程式會自動起好表名(例如“tbl_School_01”),用這份新表來存新學校的學生的資料。同時,這個表名也會加入學校索引表(tbl_School_Index)的索引欄位(index)。
·當要讀取學生訊息,或當要輸入現有學校的新學生資訊時,則會從學校索引表(tbl_School_Index)中找出索引欄位(index)中的資料(例如「tbl_School_01」) ,然後讀/寫表tbl_School_01。
如圖
3.我目前遇上的困難是:
(1)我知道關係型資料庫不允許表中表,所以才想出這麼一種辦法,不知道是否可行,或者說,是否恰當。
(2)當我新建一個實體類別(@Entity)時,配置好屬性和get/set方法後,運行應用,會在資料庫中產生對應的一個表,可是我不需要產生那個表,我是需要當加入學校時,動態的產生對應到那個實體類別的表。
4.其他想法
我有想過把幾個學校的所有學生的資訊放在一個表中,然後在那個表裡添加一個“學校”字段來標註該學生是哪所學校的,但是我怕當數據量變大時,這個表的使用會出各種問題。
5.我說的可能有點囉嗦,多謝各位認真看完,望能指點迷經,多謝!
学习ing2017-07-05 10:48:15
當要輸入新的學校的學生信息,則在添加學校時,應用會自動生成一個新的“XX學校學生信息表”,應用會自動起好表名(比如“tbl_School_01”),用這個新表來存新學校的學生的資料。同時,這個表名也會加入學校索引表(tbl_School_Index)的索引欄位(index)。
首先根據你目前的描述(目前的描述沒有涉及到一些需要跨表之類的操作)這種方式是可行的,當添加學生時,如果學校不存在,需要插入學校索引,並新建相關表然後插入學生訊息,這個可以用代碼實現(這是在不重啟應用的情況下),不重啟應用的情況下,用配置我不知道能否實現,如果有人知道,麻煩告知,謝謝。
(2)當我新建一個實體類別(@Entity)時,配置好屬性和get/set方法後,運行應用,會在資料庫中產生對應的一個表,可是我不需要產生那個表,我需要當加入學校時,動態的產生對應到那個實體類別的表。
你這裡說的是應用可以重啟,如果應用可以重啟,那是可以透過設定來插入數據,並且自動建表的。需要對hibernate進行配置,並把對應SQL的腳本放到resources下面就可以了。
application.properties中hibernate的設定
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
# 1
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
# 2
spring.jpa.show-sql=true
sql腳本存放