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)";
Parametre Alanı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>
Şöyle yaparız.DataSource dataSource = ...;
NamedParameterJdbcTemplate jdbc =
new NamedParameterJdbcTemplate(dataSource);
batchUpdate metoduÖ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);
ÖrnekŞö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();
}
query metoduÖ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);
ÖrnekŞö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 parameters
queryForObject metodu - SqlParameterSourceJava'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);
}
ÖrnekŞö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);
update metoduÖrnek ver
Hiç yorum yok:
Yorum Gönder