2016-04-13 7 views
1

Ich habe eine Sache, die Jdbc für SQL-Zugriff verwendet. Ich kann JdbcTemplate aber nicht NamedParameterJdbcTemplate verwenden. Das Namesparam gibt immer den Nullzeiger zurück, während das JDBCTemplate wie ein Charm funktioniert. Ich benutze Feder 4.2.4.RELEASEJava spring autowires Jdbctemplate aber nicht NamedParameterJdbcTemplate

Fehle mir hier ein Schritt? Hier ist die vereinfachte Codes:

feder data.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:property-placeholder location="classpath*:/db_connection.properties" /> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="${db.driver}" /> 
     <property name="url" value="${db.url}" /> 
     <property name="username" value="${db.username}" /> 
     <property name="password" value="${db.password}" /> 
    </bean> 

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

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

</beans> 

someDAOImpl.java:

/* 
    imports 
*/ 

@Component 
public class someDAOImpl implements someDAO { 

    @Autowired 
     private JdbcTemplate jdbcTemplate; 
     private NamedParameterJdbcTemplate namedParameterJdbcTemplate; 

    public void thisDoesntWork(Integer intValue) { 
     String sql = "UPDATE table SET value = :value WHERE id = 1"; 
     MapSqlParameterSource params = new MapSqlParameterSource(); 
     params.addValue("value", intValue); 
     try { 
      namedParameterJdbcTemplate.update(sql, params); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public ArrayList<ResultClass> thisWorks(Integer intValue) { 

     String sql = "SELECT * FROM table WHERE value = ?"; 
     ArrayList<ResultClass> results = new ArrayList<ResultClass>(); 
     try { 
      results = (ArrayList<ResultClass>) jdbcTemplate.query(sql, new Object[] { intValue }, new ResultClassMapper()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return results; 
    } 
} 

Antwort

1

Sie müssen auch die namedParameterJdbcTemplate

@Autowired 
private NamedParameterJdbcTemplate namedParameterJdbcTemplate; 
+0

Ah autowired! Wie dumm von mir. Ich dachte, es würde beides aufnehmen, aber anscheinend dauerte es nur die erste. Jetzt funktioniert es! Vielen Dank :) –

Verwandte Themen