package com.minitwit.dao.impl; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.stereotype.Repository; import com.minitwit.dao.UserDao; import com.minitwit.model.User; @Repository public class UserDaoImpl implements UserDao { private NamedParameterJdbcTemplate template; @Autowired public UserDaoImpl(DataSource ds) { template = new NamedParameterJdbcTemplate(ds); } @Override public User getUserbyUsername(String username) { Map<String, Object> params = new HashMap<String, Object>(); params.put("name", username); String sql = "SELECT * FROM user WHERE username=:name"; List<User> list = template.query( sql, params, userMapper); User result = null; if(list != null && !list.isEmpty()) { result = list.get(0); } return result; } @Override public void insertFollower(User follower, User followee) { Map<String, Object> params = new HashMap<String, Object>(); params.put("follower", follower.getId()); params.put("followee", followee.getId()); String sql = "insert into follower (follower_id, followee_id) values (:follower, :followee)"; template.update(sql, params); } @Override public void deleteFollower(User follower, User followee) { Map<String, Object> params = new HashMap<String, Object>(); params.put("follower", follower.getId()); params.put("followee", followee.getId()); String sql = "delete from follower where follower_id = :follower and followee_id = :followee"; template.update(sql, params); } @Override public boolean isUserFollower(User follower, User followee) { Map<String, Object> params = new HashMap<String, Object>(); params.put("follower", follower.getId()); params.put("followee", followee.getId()); String sql = "select count(1) from follower where " + "follower.follower_id = :follower and follower.followee_id = :followee"; Long l = template.queryForObject(sql, params, Long.class); return l > 0; } @Override public void registerUser(User user) { Map<String, Object> params = new HashMap<String, Object>(); params.put("username", user.getUsername()); params.put("email", user.getEmail()); params.put("pw", user.getPassword()); String sql = "insert into user (username, email, pw) values (:username, :email, :pw)"; template.update(sql, params); } private RowMapper<User> userMapper = (rs, rowNum) -> { User u = new User(); u.setId(rs.getInt("user_id")); u.setEmail(rs.getString("email")); u.setUsername(rs.getString("username")); u.setPassword(rs.getString("pw")); return u; }; }