Heim  >  Fragen und Antworten  >  Hauptteil

java - Kann eine Datenbanktabelle automatisch generiert und verwendet werden, wenn eine mit Springboot erstellte Webanwendung ausgeführt wird?

1. Lassen Sie uns zuerst über die Prämisse sprechen:
Eine mit Spring Boot erstellte Spring-Boot-Anwendung und Spring-Boot-Starter-JPA werden zum POM hinzugefügt.
Das Entwicklungstool ist IDEE.

Ich habe noch nie zuvor Webentwicklung betrieben und weiß nicht viel über Datenbanken. Was ich also unten sagen werde: Wenn es eine unrealistische Situation gibt oder die Implementierungsmethode nicht gut ist, hoffe ich, dass Sie es mir geben ein paar Ratschläge, danke! !

2. Die Bedürfnisse, die Sie erfüllen möchten:

Zum Beispiel:

Ich muss die Informationen mehrerer Schüler aus mehreren Schulen in diese Datenbank eingeben.
Die Datenmenge kann sehr groß sein und ich möchte nicht so viele Schülerinformationen in derselben Tabelle zusammenfassen.
Meine Idee ist, dass
jede Schule eine „Tabelle mit Schülerinformationen der XX-Schule“ (tbl_School_XX, z. B. „tbl_School_01“) hat und dann die Informationen der Schüler dieser Schule in diese Tabelle einträgt.
Wenden Sie eine eigene Schulindextabelle (tbl_School_Index) an. Diese Tabelle verfügt über ein Indexfeld (z. B. Index), um den Tabellennamen jeder Schule zu speichern (z. B. „tbl_School_01“).
·Wenn Sie Schülerinformationen einer neuen Schule eingeben möchten, generiert die Anwendung beim Hinzufügen einer Schule automatisch eine neue „XX School Student Information Table“ und die Anwendung benennt die Tabelle automatisch (z. B. „tbl_School_01“). Verwenden Sie diese neue Tabelle, um Informationen über Schüler der neuen Schule zu speichern. Gleichzeitig wird dieser Tabellenname auch dem Indexfeld (index) der Schulindextabelle (tbl_School_Index) hinzugefügt.
·Wenn Sie Schülerinformationen lesen oder neue Schülerinformationen von einer bestehenden Schule eingeben möchten, finden Sie die Daten im Indexfeld (Index) (z. B. „tbl_School_01“) aus der Schulindextabelle (tbl_School_Index). ) und dann Lese-/Schreibtabelle tbl_School_01.

Wie im Bild gezeigt


3. Die Schwierigkeiten, auf die ich derzeit stoße, sind:

(1) Ich weiß, dass relationale Datenbanken keine Tabellen innerhalb von Tabellen zulassen, daher weiß ich nicht, ob sie machbar oder angemessen ist.

(2) Wenn ich eine neue Entitätsklasse (@Entity) erstelle, generiert die Ausführung der Anwendung nach der Konfiguration der Attribute und Get/Set-Methoden eine entsprechende Tabelle in der Datenbank, aber ich muss diese Tabelle nicht generieren Wenn eine Schule hinzugefügt wird, wird dynamisch eine dieser Entitätsklasse entsprechende Tabelle generiert.

4. Andere Ideen

Ich habe darüber nachgedacht, die Informationen aller Schüler mehrerer Schulen in einer Tabelle zusammenzufassen und dann in dieser Tabelle ein Feld „Schule“ hinzuzufügen, um zu markieren, von welcher Schule der Schüler kommt, aber ich befürchte, dass das passieren wird, wenn die Datenmenge groß wird , Bei der Verwendung dieser Tabelle können verschiedene Probleme auftreten.

5. Was ich gesagt habe, ist vielleicht etwas ausführlich. Vielen Dank, dass Sie es sorgfältig gelesen haben. Ich hoffe, Sie können mir einen Rat geben, danke!

仅有的幸福仅有的幸福2684 Tage vor1350

Antworte allen(1)Ich werde antworten

  • 学习ing

    学习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脚本存放

    Antwort
    0
  • StornierenAntwort