Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 웹 크롤링
- Spring boot
- 고전역학
- python
- 코틀린
- 데이터베이스
- 역학
- GPT-4's answer
- 자바네트워크
- JVM
- 인프라
- oracle
- write by GPT-4
- jpa
- 파이썬
- spring data jpa
- 유닉스
- write by chatGPT
- NIO
- kotlin
- 자바암호
- Database
- 소프트웨어공학
- android
- 시스템
- 리눅스
- chatGPT's answer
- flet
- 자바
- Java
Archives
- Today
- Total
Akashic Records
Spring jdbc Template의 종류와 사용방법 본문
728x90
Spring JDBC Template은 데이터베이스 연결 및 작업을 간소화하고 코드 중복을 줄이기 위해 설계된 Spring 프레임워크의 일부입니다. JDBC Template은 여러 유용한 클래스와 메서드를 제공합니다.
- JdbcTemplate: 가장 일반적인 클래스로, 대부분의 JDBC 작업을 수행할 수 있습니다. 주요 기능은 쿼리 실행, 데이터 업데이트 처리 등입니다.
@Autowired
private JdbcTemplate jdbcTemplate;
public List<Person> findAll() {
String sql = "SELECT * FROM person";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Person.class));
}
public int insertPerson(String firstName, String lastName) {
String sql = "INSERT INTO person (first_name, last_name) VALUES (?, ?)";
return jdbcTemplate.update(sql, firstName, lastName);
}
public int updatePerson(int id, String firstName, String lastName) {
String sql = "UPDATE person SET first_name = ?, last_name = ? WHERE id = ?";
return jdbcTemplate.update(sql, firstName, lastName, id);
}
public int deletePerson(int id) {
String sql = "DELETE FROM person WHERE id = ?";
return jdbcTemplate.update(sql, id);
}
- NamedParameterJdbcTemplate: 이름 기반 파라미터를 사용하여 쿼리를 작성할 수 있는 JdbcTemplate의 확장입니다. 이 클래스는 가독성이 높고, 위치 기반 인수에 대한 혼동을 줄입니다.
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public int insertPerson(Person person) {
String sql = "INSERT INTO person (first_name, last_name) VALUES (:firstName, :lastName)";
Map<String, Object> params = new HashMap<>();
params.put("firstName", person.getFirstName());
params.put("lastName", person.getLastName());
return namedParameterJdbcTemplate.update(sql, params);
}
- SimpleJdbcInsert: 삽입 작업을 단순화하기 위해 설계된 클래스입니다. 테이블 및 열 이름을 자동으로 처리합니다.
@Autowired
private JdbcTemplate jdbcTemplate;
public int insertPerson(Person person) {
SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(jdbcTemplate)
.withTableName("person")
.usingGeneratedKeyColumns("id");
Map<String, Object> params = new HashMap<>();
params.put("first_name", person.getFirstName());
params.put("last_name", person.getLastName());
Number key = simpleJdbcInsert.executeAndReturnKey(new MapSqlParameterSource(params));
return key.intValue();
}
- ResultSetExtractor: 결과 집합에서 데이터를 추출하는 사용자 정의 로직을 제공하는 인터페이스입니다.
public List<Person> findAll() {
String sql = "SELECT * FROM person";
return jdbcTemplate.query(sql, new ResultSetExtractor<List<Person>>() {
@Override
public List<Person> extractData(ResultSet rs) throws SQLException, DataAccessException {
List<Person> persons = new ArrayList<>();
while (rs.next()) {
Person person = new Person();
person.setId(rs.getInt("id"));
person.setFirstName(rs.getString("first_name"));
person.setLastName(rs.getString("last_name"));
persons.add(person);
}
return persons;
}
});
}
이러한 클래스들은 각각 다양한 사용 사례를 처리하기 위해 설계되었습니다. 사용 사례에 따라 적절한 클래스와 메서드를 선택하여 사용하시면 됩니다.
- RowMapper: 각 행을 개별 도메인 객체로 매핑하는 인터페이스입니다. 여러 행의 결과 집합을 처리할 때 유용합니다.
public List<Person> findAll() {
String sql = "SELECT * FROM person";
return jdbcTemplate.query(sql, new RowMapper<Person>() {
@Override
public Person mapRow(ResultSet rs, int rowNum) throws SQLException {
Person person = new Person();
person.setId(rs.getInt("id"));
person.setFirstName(rs.getString("first_name"));
person.setLastName(rs.getString("last_name"));
return person;
}
});
}
- RowCallbackHandler: 결과 집합의 각 행에 대한 콜백을 처리하는 인터페이스입니다. 큰 결과 집합을 처리하는 데 효율적입니다.
public void processAll() {
String sql = "SELECT * FROM person";
jdbcTemplate.query(sql, new RowCallbackHandler() {
@Override
public void processRow(ResultSet rs) throws SQLException {
// Process each row in the result set
System.out.println(rs.getString("first_name") + " " + rs.getString("last_name"));
}
});
}
이러한 클래스 및 인터페이스를 사용하여 Spring JDBC Template를 사용하여 데이터베이스 작업을 수행할 수 있습니다. 선택한 클래스 및 메서드에 따라 사용법이 달라질 수 있으므로, 사용 사례에 따라 적절한 클래스와 메서드를 선택하십시오.
728x90
'Spring.io' 카테고리의 다른 글
Spring Data JPA에서 findBy.. 규칙 (0) | 2023.04.10 |
---|---|
Spring Security, SecurityContextHolder 사용법 (0) | 2023.04.10 |
Spring Batch+Quartz에서 Trigger 삭제하고 등록하기 (0) | 2023.04.06 |
How to run Spring Boot application in background (0) | 2023.04.05 |
Spring Batch에서 REST API로 Quartz Scheduler 변경하기 (0) | 2023.04.04 |
Comments