SQL Databases :: Spring Boot
Class JdbcTemplate
JdbcTemplate은 스프링 프레임워크에서 제공하는 JDBC API의 고도화된 도구로, 데이터베이스 작업을 간소화하고 반복적인 코드를 제거하며, SQL 실행 및 데이터 매핑을 더 효율적으로 수행할 수 있도록 설계되었습니다.JdbcTemplate의 주요 특징Connection, PreparedStatement, ResultSet 관리 및 예외 처리를 자동화합니다.query, update, execute)를 제공합니다.DataAccessException으로 변환하여 처리합니다.JdbcTemplate의 동작 흐름DataSource를 통해 연결 관리).SELECT, INSERT, UPDATE, DELETE).ResultSet 데이터를 매핑하여 객체로 변환).Connection, Statement, ResultSet은 내부적으로 관리).JdbcTemplate 기본 설정 및 사용build.gradle 파일에 spring-boot-starter-jdbc와 데이터베이스 드라이버를 추가합니다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.mariadb.jdbc:mariadb-java-client:3.1.2'
}
application.properties 파일에 데이터베이스 연결 정보를 추가합니다.
spring.datasource.url=jdbc:mariadb://localhost:3306/mydatabase
spring.datasource.username=myuser
spring.datasource.password=mypassword
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
JdbcTemplate를 사용한 DAO 작성users 테이블과 매핑될 클래스는 다음과 같습니다.
@Getter
@Setter
public class User {
private int id;
private String name;
private String email;
JdbcTemplate을 사용해 SQL 작업을 수행하는 DAO 클래스를 작성합니다.
@Repository
public class UserRepository {
private final JdbcTemplate jdbcTemplate;
public UserRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
// 테이블 생성
public void createTable() {
String sql = "CREATE TABLE IF NOT EXISTS users (" +
"id INT AUTO_INCREMENT PRIMARY KEY, " +
"name VARCHAR(50), " +
"email VARCHAR(100))";
jdbcTemplate.execute(sql);
}
// 데이터 삽입
public int insertUser(String name, String email) {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
return jdbcTemplate.update(sql, name, email);
}
// 모든 사용자 조회
public List<User> findAllUsers() {
String sql = "SELECT * FROM users";
return jdbcTemplate.query(sql, new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setEmail(rs.getString("email"));
return user;
}
});
}
// ID로 사용자 조회
public User findUserById(int id) {
String sql = "SELECT * FROM users WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setEmail(rs.getString("email"));
return user;
}
});
}
// 사용자 삭제
public void deleteUser(int id) {
String sql = "DELETE FROM users WHERE id = ?";
jdbcTemplate.update(sql, id);
}
}
CommandLineRunner를 사용하여 JdbcTemplate 기능을 테스트합니다.
@Component
public class DatabaseTestRunner implements CommandLineRunner {
private final UserRepository userRepository;
public DatabaseTestRunner(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public void run(String... args) throws Exception {
userRepository.createTable();
System.out.println("테이블 생성 완료");
userRepository.insertUser("홍길동", "hong@test.com");
userRepository.insertUser("이몽룡", "lee@test.com");
System.out.println("데이터 삽입 완료");
userRepository.findAllUsers().forEach(user ->
System.out.println("사용자: " + user.getName() + " - " + user.getEmail())
);
User user = userRepository.findUserById(1);
System.out.println("ID 1인 사용자: " + user.getName() + " - " + user.getEmail());
userRepository.deleteUser(1);
System.out.println("ID 1 사용자 삭제 완료");
}
}
| 메서드 | 설명 |
|---|---|
execute(String sql) | SQL 실행 (DDL이나 단순 쿼리). |
update(String sql, Object...) | INSERT, UPDATE, DELETE 같은 DML 작업. |
query(String sql, RowMapper) | SELECT 쿼리를 실행하고 결과를 객체 리스트로 반환. |
queryForObject(String sql, Class) | 단일 값을 반환하는 SELECT 쿼리. |
batchUpdate(String sql, List<Object[]>) | 여러 개의 데이터를 대량으로 처리. |
DataAccessException)로 변환.JdbcTemplate은 스프링에서 제공하는 강력한 JDBC API 도구로, SQL 기반 데이터베이스 작업을 간소화합니다.