수색…


소개

JdbcTemplate 클래스는 SQL 쿼리, 업데이트 문 및 저장 프로 시저 호출을 실행하고 ResultSets에 대한 반복 수행 및 반환 된 매개 변수 값 추출을 수행합니다. 또한 JDBC 예외를 포착하고 org.springframework.dao 패키지에 정의 된보다 유익한 일반 정보 구조로 변환합니다.

JdbcTemplate 클래스의 인스턴스는 한 번 구성된 스레드 세이프이므로이 공유 참조를 여러 DAO에 안전하게 삽입 할 수 있습니다.

기본 쿼리 방법

JdbcTemplate에서 사용할 수있는 queryFor * 메소드 중 일부는 CRUD 연산을 수행하는 간단한 SQL 문에 유용합니다.

날짜 쿼리

String sql = "SELECT create_date FROM customer WHERE customer_id = ?";
int storeId = jdbcTemplate.queryForObject(sql, java.util.Date.class, customerId);

정수 쿼리

String sql = "SELECT store_id FROM customer WHERE customer_id = ?";
int storeId = jdbcTemplate.queryForObject(sql, Integer.class, customerId);    

또는

String sql = "SELECT store_id FROM customer WHERE customer_id = ?";
int storeId = jdbcTemplate.queryForInt(sql, customerId);                 //Deprecated in spring-jdbc 4

문자열 쿼리

String sql = "SELECT first_Name FROM customer WHERE customer_id = ?";
String firstName = jdbcTemplate.queryForObject(sql, String.class, customerId);

목록 쿼리

String sql = "SELECT first_Name FROM customer WHERE store_id =  ?";
List<String> firstNameList = jdbcTemplate.queryForList(sql, String.class, storeId);

지도 목록 쿼리

int storeId = 1;
DataSource dataSource = ... //
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "SELECT * FROM customer WHERE store_id = ?";
List<Map<String, Object>> mapList = jdbcTemplate.queryForList(sql, storeId);

for(Map<String, Object> entryMap : mapList)
{
  for(Entry<String, Object> entry : entryMap.entrySet())
  {
       System.out.println(entry.getKey() + " / " + entry.getValue());
  }
  System.out.println("---");
}

SQLRowSet

DataSource dataSource = ... //
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "SELECT * FROM customer";
SqlRowSet rowSet = jdbcTemplate.queryForRowSet(sql);

while(rowSet.next())
{
  String firstName = rowSet.getString("first_name");
  String lastName = rowSet.getString("last_name");
  System.out.println("Vorname: " + firstName);
  System.out.println("Nachname: " + lastName);
  System.out.println("---”);
}

또는

String sql = "SELECT * FROM customer";
List<Customer> customerList = jdbcTemplate.query(sql, new RowMapper<Customer>()    {

  @Override
  public Customer mapRow(ResultSet rs, int rowNum) throws SQLException
  {
    Customer customer = new Customer();
    customer.setFirstName(rs.getString("first_Name"));
    customer.setLastName(rs.getString("first_Name"));
    customer.setEmail(rs.getString("email"));
 
    return customer;
  }

});

일괄 작업

JdbcTemplate은 일괄 처리 작업을 실행하기위한 편리한 메소드도 제공합니다.

일괄 삽입

final ArrayList<Student> list = // Get list of students to insert..
String sql = "insert into student (id, f_name, l_name, age, address) VALUES (?, ?, ?, ?, ?)"
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter(){
    @Override
    public void setValues(PreparedStatement ps, int i) throws SQLException {
        Student s = l.get(i);
        ps.setString(1, s.getId());
        ps.setString(2, s.getF_name());
        ps.setString(3, s.getL_name());
        ps.setInt(4, s.getAge());
        ps.setString(5, s.getAddress());
    }
    
    @Override
    public int getBatchSize() {
        return l.size();
    }
});

일괄 업데이트

final ArrayList<Student> list = // Get list of students to update..
String sql = "update student set f_name = ?, l_name = ?, age = ?, address = ? where id = ?"
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter(){
    @Override
    public void setValues(PreparedStatement ps, int i) throws SQLException {
        Student s = l.get(i);
        ps.setString(1, s.getF_name());
        ps.setString(2, s.getL_name());
        ps.setInt(3, s.getAge());
        ps.setString(4, s.getAddress());
        ps.setString(5, s.getId());
    }
    
    @Override
    public int getBatchSize() {
        return l.size();
    }
});

객체 배열의 List를 입력 매개 변수로 받아들이는 batchUpdate 메소드가 추가로 있습니다. 이러한 메서드는 내부적으로 BatchPreparedStatementSetter를 사용하여 배열 목록의 값을 SQL 문으로 설정합니다.

JdbcTemplate의 NamedParameterJdbcTemplate 확장

NamedParameterJdbcTemplate 클래스는 고전적인 자리 표시 자 ( '?') 인수 만 사용하여 JDBC 문을 프로그래밍하는 것과 달리 명명 된 매개 변수를 사용하여 JDBC 문을 프로그래밍하는 지원을 추가합니다. NamedParameterJdbcTemplate 클래스는 JdbcTemplate 랩핑하고 많은 작업을 수행하기 위해 랩핑 된 JdbcTemplate 에 위임합니다.

DataSource dataSource = ... //
NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);

String sql = "SELECT count(*) FROM customer WHERE city_name=:cityName";
Map<String, String> params = Collections.singletonMap("cityName", cityName);
int count = jdbcTemplate.queryForObject(sql, params, Integer.class);


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow