java - 使用Springboot搭建的web應用,運行中,數據庫表可否自動生成使用?
問題描述
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.我說的可能有點啰嗦,多謝各位認真看完,望能指點迷經,多謝!
問題解答
回答1:當要錄入新的學校的學生信息,則在添加學校時,應用會自動生成一個新的“XX學校學生信息表”,應用會自動起好表名(比如“tbl_School_01”),用這個新表來存新學校的學生的信息。同時,這個表名也會添加到學校索引表(tbl_School_Index)的索引字段(index)。
首先根據你目前的描述(目前的描述沒有涉及到一些需要跨表之類的操作)這種方式是可行的,當添加學生時,如果學校不存在,需要插入學校索引,并新建相關表然后插入學生信息,這個可以用代碼實現(這是在不重啟應用的情況下),不重啟應用的情況下,用配置我不知道能否實現,如果有人知道,麻煩告知,謝謝。
(2)當我新建一個實體類(@Entity)時,配置好屬性和get/set方法后,運行應用,會在數據庫中生成對應的一個表,可是我不需要生成那個表,我是需要當添加學校時,動態的生成對應那個實體類的表。
你這里說的是應用可以重啟,如果應用可以重啟,那是可以通過配置來插入數據,并且自動建表的。需要對hibernate進行配置,并把相應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腳本存放
相關文章:
