28 Aralık 2020 Pazartesi

SpringData Jdbc JdbcTemplate.update metodu - Insert, Delete, Update İçindir

Giriş
İsmi update olmasına rağmen Insert, Delete, Update için kullanılabilir. 

update metodu  - sql + args
İmzası şöyle. Sonuç olarak kaç tane satırın etkilendiğini döner.
public int update(String sql) throws DataAccessException
public int update(String sql, Object... args) throws DataAccessException public int update(String
sql, Object[] args, int [] argTypes) throws DataAccessException
1. args parametreleri teker teker veya Object[] şeklinde geçilebilir.
2. Sonuç olarak kaç tane satırın etkilendiğini belirten bir int döner

Örnek
Şöyle yaparız
String INSERT_USER_QUERY = "INSERT INTO USER(id,first_name,last_name,gender,age)
VALUES(?,?,?,?,?)"
;
String UPDATE_USER_QUERY = "UPDATE user SET first_name=?,last_name=?,gender=?,age=?
WHERE id=?"
;
String DELETE_USER_QUERY = "DELETE FROM user WHERE id=?";

@Override
public int save(User user) {
  return jdbcTemplate.update(INSERT_USER_QUERY, new Object[] { user.getId(),
user.getFirstName(),
    user.getLastName(), user.getGender(), user.getAge() });
}

@Override
public int update(User user) {
  return jdbcTemplate.update(UPDATE_USER_QUERY, new Object[] { user.getFirstName(),
user.getLastName(),
    user.getGender(), user.getAge(), user.getId() });
}

@Override
public int delete(int id) {
  return jdbcTemplate.update(DELETE_USER_QUERY, new Object[] { id });
}
Örnek
Parametre kullanmak için şöyle yaparız.
jdbctemplate.update(sql, arg1, arg2);
Örnek
Dizi kullanmak için şöyle yaparız
jdbctemplate.update(sql, new Object[]{arg1, arg2});
Kaç satırın etkilendiği sonucunu almak için şöyle yaparız.
String insertQuery = "<db query for insert>";
Object[] args = new Object[]{Integer.valueOf(...), ...,...,...,null,null};
int result = jdbcTemplate.update(insertQuery, args);
Örnek - insert
Oracle'da sequence kullanmak için şöyle yaparız.
String sql = "insert into Employee values (id_seq.nextval, ?, ?, ?)";
jdbcTemplate.update(sql, name, age, salary);
Örnek - insert
Şöyle yaparız.
jdbcTemplate.update("INSERT INTO Test (ID, NAME) VALUES (?, ?)",
  new Object[]{101, "Dave"}
);
update metodu  - sql + PreparedStatementCreator
Örnek
Şöyle yaparız.
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;

final String INSERT_SQL = "insert into my_test (name) values(?)";
final String name = "Rob";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
  new PreparedStatementCreator() {
    public PreparedStatement createPreparedStatement(Connection connection)
      throws SQLException {
      PreparedStatement ps =
        connection.prepareStatement(INSERT_SQL, new String[] {"id"});
        ps.setString(1, name);
        return ps;
      }
    },
keyHolder);
Örnek
PreparedStatementCreator yerine lambda kullanılabilir. Şöyle yaparız
jdbcTemplate.update(connection -> {
  PreparedStatement ps = connection.prepareStatement(
"insert into my (id , file, file_name ) values ( ? , ? , ? )"
    new String[]{"id"});
  ps.setInt(1, id);
  ps.setString(2, base64EncodedFile);  
  ps.setString(3, fileName);
  return ps;
});

Hiç yorum yok:

Yorum Gönder