JDBCTemplate 사용하기
-좀 더 간단하게 db와 연결할 수 있게 해 준다.
db 설정
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.apache.commons.dbcp2.BasicDataSource;
public class AppConfig {
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
dataSource.setUsername("username");
dataSource.setPassword("password");
return dataSource;
}
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
db동작 부분 소스 (공통)
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
외부에서 의존성을 주입하여 jdbcTemplate 객체를 사용하기 위한 코드
db 설정 코드를 bean등록해야한다 그래야지 의존성 주입이 가능핟.
데이터 전체 조회
public List<User> getUserById(long userId) {
String sql = "SELECT * FROM users WHERE id = ?";
return jdbcTemplate.query(sql, new Object[]{userId}, new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getLong("id"));
user.setUsername(rs.getString("username"));
user.setEmail(rs.getString("email"));
return user;
}
});
}
데이터 삽입
ublic void addUser(User user) {
String sql = "INSERT INTO users (username, email) VALUES (?, ?)";
jdbcTemplate.update(sql, user.getUsername(), user.getEmail());
}
jdbcTemplate.update(쿼리문,? 에 넣을 값 1,? 에 넣을 값 2);
이렇게 해서 사용할 수 있다.
데이터 업데이트
public void updateUser(User user) {
String sql = "UPDATE users SET username = ?, email = ? WHERE id = ?";
jdbcTemplate.update(sql, user.getUsername(), user.getEmail(), user.getId());
}
데이터 삽입하고 같다.
데이터 삭제
public void deleteUser(Long id) {
String sql = "DELETE FROM users WHERE id = ?";
jdbcTemplate.update(sql, id);
}
이것 또한 데이터 삽입하고 방식은 같다.
한건만 조회하기
public User getUserById(long userId) {
String sql = "SELECT * FROM users WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{userId}, new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getLong("id"));
user.setUsername(rs.getString("username"));
user.setEmail(rs.getString("email"));
return user;
}
});
만약 쿼리문의? 부분에 좀 더 직관적으로 코드를 짜고 싶다면 NamedParameterJdbcTemplate을 이용할 수 있다.
NamedParameterJdbcTemplate 을 사용할 경우는 어떻게 짜야할까?
db설정
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.apache.commons.dbcp2.BasicDataSource;
public class AppConfig {
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
dataSource.setUsername("username");
dataSource.setPassword("password");
return dataSource;
}
}
db동작 코드
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UserDao {
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
private RowMapper<Role> rowMapper = BeanPropertyRowMapper.newInstance(Role.class);
public UserDao(DataSource dataSource) {
this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
public List<User> getAllUsers() {
String sql = "SELECT * FROM users";
return namedParameterJdbcTemplate.query(sql,rowMapper);
}
public User getUserById(long userId) {
String sql = "SELECT * FROM users WHERE id = :userId";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("userId", userId);
return namedParameterJdbcTemplate.queryForObject(sql, paramMap, rowMapper);
}
public void addUser(User user) {
String sql = "INSERT INTO users (username, email) VALUES (:username, :email)";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("username", user.getUsername());
paramMap.put("email", user.getEmail());
namedParameterJdbcTemplate.update(sql, paramMap);
}
public void updateUser(User user) {
String sql = "UPDATE users SET username = :username, email = :email WHERE id = :userId";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("username", user.getUsername());
paramMap.put("email", user.getEmail());
paramMap.put("userId", user.getId());
namedParameterJdbcTemplate.update(sql, paramMap);
}
public void deleteUser(long userId) {
String sql = "DELETE FROM users WHERE id = :userId";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("userId", userId);
namedParameterJdbcTemplate.update(sql, paramMap);
}
}
쿼리문에? 부분을 :[이름]을사용하여 파라미터를 맵핑해 바인드 하여 사용하였다.
또한 데이터 소스( DataSource dataSource )를 이용하여 NamedParameterJdbcTemplate 객체를 생성하고, 이를 클래스의 멤버 변수인 namedParameterJdbcTemplate에 할당하는 역할을 한다.
반응형
'자바 공부 > 스프링공부' 카테고리의 다른 글
리액트 스프링부트를 이용한 토이프로젝트 및 공부 (0) | 2024.05.19 |
---|---|
컨트롤러,Service,DAO (0) | 2024.05.15 |
자동으로 의존 객체 주입하기 (0) | 2024.05.10 |
스프링 DI,IOC 사용해보기 (0) | 2024.05.09 |
스프링 DI와 IOC (0) | 2024.05.08 |