2016-05-02 2 views
1

Я работаю над приложением, которое использует java 8 + Spring 4. Теперь я удаляю требование Spring DI, чтобы приложение могло работать без Spring DI.Как инициировать NamedParameterJdbcTemplate для H2 Query?

Я буду использовать Springs JdbcTemplate и NamedParameterJdbcTemplate для операций с базой данных. Я использую эти шаблоны, поскольку мы будем использовать любую другую функцию/.jar в java-приложении.

В то время как я удаление всех @Autowired и других аннотаций, связанных с пружинным (и делает их через конструктор сейчас)

Spring версии этот путь:

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

приложений 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. Я хочу использовать конструктор H2Dao с параметром NamedParameterJdbcTemplate. как создать экземпляр 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); 
+0

да, просто попробовал это. похоже, работает. Я обновлю, как только проверю его. – Ajeetkumar

+0

Спасибо Денис Якибчук, это именно то, что искали! – Ajeetkumar