我有一个spring boot项目,我正在使用hibernate将我的实体映射到DB,但是现在我有了一个新的要求:我需要能够在DB中动态创建表,没有任何映射(到目前为止) )。
有谁知道某个框架,帮我处理这个问题: - 我想执行SQL或类似的(ddl)来创建我的表 - 我需要处理连接管理
我被告知弹簧数据,但我需要对此有所了解。
一个例子: 想象一下,我有一个可供客户使用的服务,例如:
class DBHACKService {
void executeSQL(String ddl).
}
客户端调用它:
new DBHackService.executeSQL ("create table mytable (name varchar)");
在这个方法中我可以对sql做一些操作。 问题是:哪个是将其发送到DBEngine的最佳方式。
再次感谢
提前致谢。 瑞
答案 0 :(得分:2)
答案 1 :(得分:1)
查看database initialization上的Spring Boot文档。
最简单的选择是将schema.sql
文件放在类路径的根目录中(例如在src/main/resources
中)。此文件中的任何DDL都将作为应用程序启动的一部分运行。 One of Spring Boot's JDBC samples显示了这一点。
第二个更复杂的选项是使用数据库迁移工具,如Liquibase或Flyway。迁移工具的优势在于,随着应用程序需求的变化,它可以更容易地发展数据库模式。 Spring Boot具有Liquibase和Flyway的小样本应用程序。
答案 2 :(得分:0)
如果您希望动态创建架构,我想这应该可以帮助您。
Hibernate: Automatically creating/updating the db tables based on entity classes
您可以使用jdbc发出ddl语句来动态创建表。 将查询保存在某个xml文件中。 所以它仍然是通用的。 在配置文件上有一个watcher服务,使用新查询更新时刻文件,你可以触发所需的jdbc调用
答案 3 :(得分:0)
您希望如何使用作为参数传递的sql。
如果你想验证sql,一个选项是触发查询,如果你得到一个例外 这意味着传递参数存在一些问题。
如果要解析sql查询,则可以使用jSqlParser。 http://jsqlparser.sourceforge.net/