【发布时间】:2018-02-04 00:48:02
【问题描述】:
我正在尝试为 sql 查询设置组件测试。为了处理我使用 myBatis 的 SQL。
我有一个正在创建嵌入式 H2 数据库的测试数据源配置。这适用于任何简单的查询。
我的问题是我的查询使用了 H2 不支持的 SQL 公用表表达式 (NOLOCK)。
我可以让 H2 忽略 NOLOCK 部分或替换 junit 测试期间使用的查询字符串吗?
myBatis 映射器看起来像这样:
public interface CoolMapper {
@Results(...)
@Select("SELECT * FROM cool_table WITH (NOLOCK)")
List<CoolObject> getThings();
}
数据源配置: @配置 公共类 TestingDataSourceConfig {
public TestingDataSourceConfig() {}
@Profile("test")
@Bean(name = "dataSources")
@Primary
@Qualifier(DataSourceConfig.DATA_SOURCES)
public Map<UUID, DataSource> dataSources() {
Map<UUID, DataSource> dataSourceMap = new HashMap<>();
UUID uuid = UUID.fromString("dac46f50-a1fb-3434-b262-0c0c4564b117");
EmbeddedDatabase database = new EmbeddedDatabaseBuilder().generateUniqueName(true)
.setType(EmbeddedDatabaseType.H2)
.setScriptEncoding("UTF-8")
.ignoreFailedDrops(true)
.addDefaultScripts()
.build();
dataSourceMap.put(uuid, database);
return dataSourceMap;
}
}
【问题讨论】:
-
有人做了一个custom build of H2,在查询中丢弃了 SQLServer 表提示(
WITH子句),但该项目已有几年历史了。如果您的应用程序应该从其他事务中读取未提交的数据(这实际上是WITH (NOLOCK)的意思),那么您需要一个真正的 SQLServer 实例来进行测试。
标签: java sql spring-boot junit mybatis