使用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.我说的可能有点啰嗦,多谢各位认真看完,望能指点迷经,多谢!

阅读 5.1k
5 个回答

当要录入新的学校的学生信息,则在添加学校时,应用会自动生成一个新的“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脚本存放

clipboard.png

其实这就是一个分表功能,按学校id进行分表,很简单的,而且不需要你那个索引表。参考我这篇分库分表的教程。
http://blog.csdn.net/tianyale...

我怀疑你根本不需要分表,你的数据量有多大?

不要自己分表or分区or分库,应该利用数据库提供功能来做这些事情,分表or分区or分库的事情应该对应用程序透明,否则会增加应用程序的复杂度。

新手上路,请多包涵
create table `tb_school_01` like `tb_school_template`
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题