如何使用org.springframework.jdbc.object实现可重用的ddl语句?
How to use org.springframework.jdbc.object to implement reusable ddl statements?
我想使用 org.springframework.jdbc.object
包中的实体对数据库访问进行建模。
很清楚如何为select、更新、插入和删除查询创建对象。我们可以只扩展 MappingSqlQuery<?>
或 SqlUpdate
然后声明所有参数,在一些映射中收集命名参数并执行语句 stmt.executeByNamedParam(Map<String, ?> paramMap);
.
不清楚我们如何使用 org.springframework.jdbc.object
包来实现像 schema/table 创建或更改 table 这样的 ddl 语句。
例如,我想动态创建模式,查询如下所示:create schema if not exists schema_name
。
我用下一种方式创建语句:
public final class CreateSchemaStmt extends SqlUpdate {
private static final String CREATE_SCHEMA_SQL_TEMPLATE =
"create schema if not exists ?";
public CreateSchemaStmt(DataSource ds) {
setDataSource(ds);
setSql(CREATE_SCHEMA_SQL_TEMPLATE);
declareParameter(new SqlParameter("schema", Types.VARCHAR));
compile();
}
}
但不能以这种方式声明参数并将其传递给语句执行。
当然,当我需要创建新的 schema/table 或更改 table 时,我总是可以创建一个新的语句(使用不带占位符的 sql 查询),但在这种情况下,该语句将不可重用。
是否可以使用命名参数创建和执行此类查询?
不,不能重复使用 DDL 语句。 table 名称、列名、列数据类型等的任何更改都将是一个 不同的 语句。
org.springframework.jdbc.object
package are helpers for using a PreparedStatement
中的所有 类 和 DDL 语句不会从准备中获得任何好处。
对于 DDL,使用 JdbcTemplate
and the execute(String sql)
方法。正如该方法的 javadoc 所说:
Issue a single SQL execute, typically a DDL statement.
不要专注于工具。当您说 “我想使用 org.springframework.jdbc.object
包中的实体” 时,您过于关注该工具。您应该专注于需要完成的工作,然后选择适合该工作的工具。对于 DDL 语句,JdbcTemplate.execute(sql)
是正确的工具。
使用 batchUpdate(String... sql)
并忽略 return 值,如果要执行 lot 的 DDL 语句并且性能很关键。但是对于 DDL 语句,情况不太可能如此。
我想使用 org.springframework.jdbc.object
包中的实体对数据库访问进行建模。
很清楚如何为select、更新、插入和删除查询创建对象。我们可以只扩展 MappingSqlQuery<?>
或 SqlUpdate
然后声明所有参数,在一些映射中收集命名参数并执行语句 stmt.executeByNamedParam(Map<String, ?> paramMap);
.
不清楚我们如何使用 org.springframework.jdbc.object
包来实现像 schema/table 创建或更改 table 这样的 ddl 语句。
例如,我想动态创建模式,查询如下所示:create schema if not exists schema_name
。
我用下一种方式创建语句:
public final class CreateSchemaStmt extends SqlUpdate {
private static final String CREATE_SCHEMA_SQL_TEMPLATE =
"create schema if not exists ?";
public CreateSchemaStmt(DataSource ds) {
setDataSource(ds);
setSql(CREATE_SCHEMA_SQL_TEMPLATE);
declareParameter(new SqlParameter("schema", Types.VARCHAR));
compile();
}
}
但不能以这种方式声明参数并将其传递给语句执行。 当然,当我需要创建新的 schema/table 或更改 table 时,我总是可以创建一个新的语句(使用不带占位符的 sql 查询),但在这种情况下,该语句将不可重用。
是否可以使用命名参数创建和执行此类查询?
不,不能重复使用 DDL 语句。 table 名称、列名、列数据类型等的任何更改都将是一个 不同的 语句。
org.springframework.jdbc.object
package are helpers for using a PreparedStatement
中的所有 类 和 DDL 语句不会从准备中获得任何好处。
对于 DDL,使用 JdbcTemplate
and the execute(String sql)
方法。正如该方法的 javadoc 所说:
Issue a single SQL execute, typically a DDL statement.
不要专注于工具。当您说 “我想使用 org.springframework.jdbc.object
包中的实体” 时,您过于关注该工具。您应该专注于需要完成的工作,然后选择适合该工作的工具。对于 DDL 语句,JdbcTemplate.execute(sql)
是正确的工具。
使用 batchUpdate(String... sql)
并忽略 return 值,如果要执行 lot 的 DDL 语句并且性能很关键。但是对于 DDL 语句,情况不太可能如此。