Giriş
Parametre olarak :id gibi isimler kullanabilmeyi sağlar. Şöyle yaparız.
JDBCTemplate ile parametre alanı için "?" kullanılırken NamedParameterJdbcTemplate ile ":myfield" şeklinde isim verilen parametre alanları kullanılıyor.
Bazı örnekler şöyle
constructor - DataSource
XML ile tanımlarken şöyle yaparız.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Örnek ver
queryForObject metodu - Map
Tek bir sonuç nesnesi döner.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Java'da Generics kullanılmaya başlamadan önce bu metod kullanılırdı. Bu overload metodu kullanmamak lazım. Bu metod yerine Map alan overload halini kullanmak daha iyi.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Örnek ver
Parametre olarak :id gibi isimler kullanabilmeyi sağlar. Şöyle yaparız.
String TEMP_INSERT = "INSERT INTO test(x) VALUES (:x)";JDBCTemplate ile parametre alanı için "?" kullanılırken NamedParameterJdbcTemplate ile ":myfield" şeklinde isim verilen parametre alanları kullanılıyor.
Bazı örnekler şöyle
"INSERT INTO USERS(name, address, email)values(:name,:address,:email)"
"select * from users where record_id = :id"
constructor - DataSource
XML ile tanımlarken şöyle yaparız.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="url" value="jdbc:dburl" />
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
  <property name="username" value="username" /> 
  <property name="password" value="passworf" />
  <property name="removeAbandoned" value="true" />
  <property name="initialSize" value="30" />    
  <property name="maxActive" value="100" />
</bean>
<!-- DAO Bean which is causing issue -->
<bean id="nmdParameter" class="org.springframeowrk....NamedParameterJDBCTemplate"
 scope="singleton">
  <constructor-args ref="dataSource" />    
</bean>DataSource dataSource = ...;
NamedParameterJdbcTemplate jdbc =new NamedParameterJdbcTemplate(dataSource);Örnek
Şöyle yaparız.
String insertSQL = "INSERT INTO invoices VALUES (:id, :exactIssueTime, 
:finalIssueTime, :issuer, :groupID)";
SqlParameterSource[] sqlParams = SqlParameterSourceUtils.createBatch(
  invoices.toArray());
int[] insertCounts = namedJdbcTemplate.batchUpdate(insertSQL, sqlParams);Şöyle yaparız.
String TEMP_INSERT = "INSERT INTO test(x) VALUES (:x)";
NamedParameterJdbcTemplate namedParameterJdbcTemplate = ...;
public int batchTestInsert(SqlParameterSource[] parameters) {
  return Arrays.stream(
            namedParameterJdbcTemplate.batchUpdate(TEMP_INSERT, parameters)
        ).sum();
}Örnek ver
queryForObject metodu - Map
Tek bir sonuç nesnesi döner.
Örnek
Şöyle yaparız.
String firstName = ...;
String sql = "select count(*) from T_ACTOR where first_name = :first_name";
Map<String, String> namedParameters = Collections.singletonMap("first_name",
  firstName);
int i = namedJdbcTemplate.queryForObject(sql, namedParameters,  Integer.class);Şöyle yaparız.
Integer count = namedParameterJdbcTemplate.queryForObject("SELECT COUNT(1) FROM test",
 new HashMap<String, Object>, Integer.class);
 //I pass empty HashMap since query doesn't need parametersJava'da Generics kullanılmaya başlamadan önce bu metod kullanılırdı. Bu overload metodu kullanmamak lazım. Bu metod yerine Map alan overload halini kullanmak daha iyi.
Örnek
Şöyle yaparız.
public void isRecordExists(Date date){
  String sqlQuery=" select * from Dual where created_date=:date";
  
  MapSqlParameterSource parameters = new MapSqlParameterSource();
  parameters.addValue("date", date);
  namedParameterJdbcTemplate.queryForObject(sqlQuery, parameters, Integer.class);
}Şöyle yaparız.
String firstName = ...;
String sql = "select count(*) from T_ACTOR where first_name = :first_name";
SqlParameterSource namedParameters = new MapSqlParameterSource("first_name",
  firstName);
int i = namedJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);Örnek ver
 
Hiç yorum yok:
Yorum Gönder