package spring.mvc.repository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import spring.mvc.domain.User;
import java.util.List;
import java.util.Optional;
@Repository
@Primary
public class JdbcUserRepository implements UserRepository {
private final JdbcTemplate jdbcTemplate;
@Autowired
public JdbcUserRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public User save(User user) {
String sql = "INSERT INTO user (userId, userName) VALUES (?, ?)";
jdbcTemplate.update(sql, user.getUserId(), user.getUserName());
return user;
}
@Override
public Optional<User> findByUserIdx(Long userIdx) {
String sql = "SELECT * FROM user WHERE userIdx = ?";
return jdbcTemplate.query(sql, rs -> {
if (rs.next()) {
User user = new User();
user.setUserIdx(rs.getLong("userIdx"));
user.setUserId(rs.getString("userId"));
user.setUserName(rs.getString("userName"));
return Optional.of(user);
}
return Optional.empty();
}, userIdx);
}
@Override
public Optional<User> findByUserId(String userId) {
String sql = "SELECT * FROM user WHERE userId = ?";
return jdbcTemplate.query(sql, rs -> {
if (rs.next()) {
User user = new User();
user.setUserIdx(rs.getLong("userIdx"));
user.setUserId(rs.getString("userId"));
user.setUserName(rs.getString("userName"));
return Optional.of(user);
}
return Optional.empty();
}, userId);
}
@Override
public List<User> findByUserName(String userName) {
String sql = "SELECT * FROM user WHERE userName = ?";
return jdbcTemplate.query(sql, (rs, rowNum) -> {
User user = new User();
user.setUserIdx(rs.getLong("userIdx"));
user.setUserId(rs.getString("userId"));
user.setUserName(rs.getString("userName"));
return user;
}, userName);
}
@Override
public List<User> findAll() {
String sql = "SELECT * FROM user";
return jdbcTemplate.query(sql, (rs, rowNum) -> {
User user = new User();
user.setUserIdx(rs.getLong("userIdx"));
user.setUserId(rs.getString("userId"));
user.setUserName(rs.getString("userName"));
return user;
});
}
@Override
public Optional<User> update(Long userIdx, User updatedUser) {
String sql = "UPDATE user SET userName = ?, email = ? WHERE userIdx = ?";
int rowsUpdated = jdbcTemplate.update(sql, updatedUser.getUserName(), userIdx);
return rowsUpdated > 0 ? findByUserIdx(userIdx) : Optional.empty();
}
@Override
public boolean delete(Long userIdx) {
String sql = "DELETE FROM user WHERE userIdx = ?";
int rowsDeleted = jdbcTemplate.update(sql, userIdx);
return rowsDeleted > 0;
}
}