如何为 H2 查询启动 NamedParameterJdbcTemplate?

Posted

技术标签:

【中文标题】如何为 H2 查询启动 NamedParameterJdbcTemplate?【英文标题】:How to initiate NamedParameterJdbcTemplate for H2 Query? 【发布时间】:2016-05-02 11:31:08 【问题描述】:

我正在开发一个使用 java 8 + Spring 4 的应用程序。现在我正在删除 Spring DI 要求,以便应用程序可以在没有 Spring DI 的情况下运行。

我将使用 Springs JdbcTemplate 和 NamedParameterJdbcTemplate 进行数据库操作。我正在使用这些模板,就像我们在 java 应用程序中使用任何其他功能/.jar 一样。

虽然我正在删除所有 @Autowired 和其他与 spring 相关的注释(现在通过构造函数进行)

春季版是这样的:

public class H2Dao 
    private NamedParameterJdbcTemplate t;
    @Autowired
    public H2Dao(@Qualifier("H2JdbcTemplate") NamedParameterJdbcTemplate t) 
        this.t=t;
    

application-context.xml 有以下代码:

<jdbc:embedded-database id="h2DataSource" type="H2">
        <jdbc:script location="classpath:db/sql/h2.init.sql" />
    </jdbc:embedded-database>

<bean id="H2JdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
        <constructor-arg ref="h2DataSource" name="dataSource" />
    </bean>

h2.init.sql 文件有以下代码:

CREATE ALIAS ROWNUM_OVER FOR "com.xx.xxxx.h2.H2Function.rowNumOver";
CREATE ALIAS DBO_UFUN_ADDDATETIME FOR "com.xx.xxxx.h2.H2Function.addDateTime";

我的问题是,如何在不使用 application-context.xml 进行 DI 的非 Spring 版本中编写相同的代码。我想使用带有 NamedParameterJdbcTemplate 作为参数的构造函数 H2Dao。如何实例化 NamedParameterJdbcTemplate 以传递 H2Dao 构造函数?

【问题讨论】:

【参考方案1】:

我不确定我的理解是否正确。但是如果您不想使用 DI,您可能需要使用 EmbeddedDatabaseBuilder(请参阅链接:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseBuilder.html) 您的代码可能如下所示:

EmbeddedDatabase db = new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.H2)
            .addScript("schema.sql")
            .build();
 NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(db);

【讨论】:

是的,刚刚试过这个。似乎工作。测试后我会更新。 谢谢 Денис Якибчук 这正是要找的东西!

以上是关于如何为 H2 查询启动 NamedParameterJdbcTemplate?的主要内容,如果未能解决你的问题,请参考以下文章

如何为具有spring存储库代码的@Component类编写集成测试?

如何为 Spring Boot 应用程序外部化 data.sql

你如何为 iPhone 实现横向启动屏幕?

如何为元素数组动态创建查询?

如何为具体查询设置 fetchSize?

Barebox 如何为 Beaglebone Black 启动?