如何为H2查询启动NamedParameterJdbcTemplate?

时间:2016-05-02 11:31:09

标签: spring h2 embedded-database

我正在使用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 for DI的非spring版本中编写相同的代码。我想使用构造函数H2Dao和NamedParameterJdbcTemplate作为参数。如何实例化NamedParameterJdbcTemplate以传递H2Dao构造函数?

1 个答案:

答案 0 :(得分: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);