package com.jang.doc.dao;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.stereotype.Repository;

import com.jang.doc.model.User;

@Repository("userDao")
public class UserDaoImpl implements UserDao {
	
	private JdbcTemplate jdbcTemplate;
	private NamedParameterJdbcTemplate jdbcTemplate2;
	
	@Autowired //ÀÚµ¿¿¬°á - Å¸ÀÔ¿¡ ÀÇÇÑ °Ë»ç
	public void setDataSource(DataSource dataSource) {
	this.jdbcTemplate = new JdbcTemplate(dataSource);
	this.jdbcTemplate2 = new NamedParameterJdbcTemplate(dataSource);
	
	}
	
	
	
	@Override //ÀçÁ¤ÀÇ 
	public User getUser(String userId) {
		String GETUSER_ID ="SELECT * FROM member_tbl WHERE id = ?";
		
		RowMapper<User> mapper = new BeanPropertyRowMapper<User>(User.class);
		return this.jdbcTemplate.queryForObject(GETUSER_ID, mapper,userId);
		
		
	}

	@Override
	public void updateUser(User user) { //¹ÝÈ¯°ª ¾øÀ½ 
		String SQL_UP = "UPDATE member_tbl SET pass=:pass, zip=:zip, addr1=:addr1, addr2=:addr2 ,"
				+"phone=:phone, email=:email, jumin=:jumin WHERE id=:id";
		//sql 4°¡Áö : select, delete, insert, update 
		SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(user);
		this.jdbcTemplate2.update(SQL_UP,parameterSource);
		}

	@Override
	public void insertUser(User user) {
		String SQL_INS ="INSERT INTO member_tbl (no, id, pass, name, zip, addr1, addr2, phone, email, jumin)"
				+ "VALUES(seq_no.nextval, :id, :pass, :name, :zip, :addr1, :addr2, :phone, :email, :jumin)";
		SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(user);
		this.jdbcTemplate2.update(SQL_INS,parameterSource);

	}

}
