자바 공부/스프링공부

컨트롤러,Service,DAO

ari0930 2024. 5. 15. 16:28

컨트롤러

클라이언트 요청을 처리하는 컨트롤러 객체로 , 요청을 받아 사용자의 요청에 부합하는 메서드를 실행한다.

 

@Controller
public class MyController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, Spring MVC!");
        return "hello"; // View 이름을 반환합니다 (예: hello.jsp, hello.html)
    }
}

컨트롤러로 사용하기 위해서는  클래스 위에 @Controller 이렇게 어노테이션을 작성해야 한다.

 

요청 매핑 어노테이션

@RequestMapping("주소")

@RequestMapping("/home")
public String home() {
    return "home";
}

주소가 /home로 왔을 때 home 라는페이지로 보내는것처럼 어떠한 주소로 왔을때 그에 맞게 연결해 준 느 역할을 한다

 

사용법은 비슷하지만 요청내용에 따라 

@GetMapping("주소")

=> GET요청을 매핑하는 데 사용된다. 주로 데이터 조회하는 데 사용한다.

=> 서버로부터 데이터를 요청하며 주로 데이터를 가져오는 데 사용된다.

@GetMapping("/example")
public String handleGetRequest() {
    // GET 요청을 처리하는 로직
    return "exampleView";
}

 

 

@PostMapping("주소")

=> post 요청을 매핑한다.

=> 데이터를 전송하고 수정하는 데 사용된다.

@PostMapping("/example")
public String handlePostRequest() {
    // POST 요청을 처리하는 로직
    return "exampleView";
}

@PutMapping("주소")

=> PUT 요청은 HTTP 프로토콜에서 사용되는 메서드 중 하나로, 클라이언트가 서버로 데이터를 전송하여 리소스를 생성하거나 업데이트하는 데 사용됩니다. 일반적으로 RESTful API에서 업데이트나 새로운 리소스를 생성하는 데 사용됩니다.

@DeleteMapping("주소")

=> 클라이언트가 서버로부터 리소스를 삭제를 요청한다.

 

@PathVariable는 주소에 있는 {id} 값을 이용하겠다는 내용이다.

@GetMapping("/users/{id}")
@ResponseBody
public User getUserById(@PathVariable Long id) {
    return userService.findById(id);
}

위 코드에서 @ResponseBody는 제이슨 데이터로 전달하겠다는 의미이다.

 

@RequestParam는 넘어오는 파라미터를 사용할 수 있도록 해준다 이때 넘어오기 전 사용한 필드 이름하고 같아야 한다.

    @PostMapping("/submit")
    public String submitForm(@RequestParam("username") String username, @RequestParam("password") String password) {
        // 폼 데이터를 받아와서 처리하는 로직
        return "successView";
    }

 

@RequestParam 대신 vo객체를 이용하면 코드를 줄일 수 있다.

스프링은  vo 객체에 자동으로 할당해 준다.

 

@RequestMapping("/signUpConfirm")
public String signUpConfirm(@RequestParam String m_id,@RequestParam String m_pw,
			@RequestParam String m_mail,@RequestParam String m_phone) {
	System.out.println("멤버변수출력");
		System.out.println(m_id);
		return null;
	}

vo 객체 사용

	@RequestMapping("/signUpConfirm")
	public String signUpConfirm(MemberVo memberVo) {
		System.out.println("멤버변수출력");
		System.out.println(memberVo.getM_id());
		System.out.println(memberVo.getM_mail());
		System.out.println(memberVo.getM_phone());
		System.out.println(memberVo.getM_pw());
		memberService.signUpConfirm(memberVo);
		return "home";
	}

 

vo 객체 코드

public class MemberVo {
	
	String m_id;
	String m_pw;
	String m_mail;
	String m_phone;

게터 세터 ~~~
	
	

}

 

Service

사용자가 요청한 컨트롤러가 실행되면 컨트롤러는 서비스 객체를 이용한다.

@Service
public class MemberService {
	@Autowired
	MemberDao memberDao;
    
	public int addUser(MemberVo memberVo) {

		서비스 내용
		memberDao.insertMember(memberVo);
		return 0;
	}

}

@Service 이걸 이용해서  스프링 컨테이너에 빈 객체를 생성할 수 있다.

 

컨트롤러 코드에 @Autowired를 사용하여 빈을 쉽게 사용할 수 있다.

	@Autowired
	 MemberService memberService;

 

 

DAO

애플리케이션과 데이터베이스 또는 다른 데이터 저장소 간의 데이터 액세스를 추상화하는 역할을 합니다.

간단히 말하면 실제로 DB와 연결하여 DB의 데이터를 수정할 수 있도록 해주는 메서들이 담겨 있는 곳이다.

 

@Component
public class MemberDao {

	private Map<String, MemberVo> memberDB= new HashMap<String, MemberVo>();
	
	public void addUser(MemberVo memberVo) {
		System.out.println("삽입");
		System.out.println(memberVo.getM_id());
		System.out.println(memberVo.getM_mail());
		System.out.println(memberVo.getM_phone());
		System.out.println(memberVo.getM_pw());
		
		memberDB.put(memberVo.getM_id(), memberVo);
		//위 부분은 실제로 db를 사용할때 쿼리문을 사용해서 db로 에 값을 집어넣을수 있다
	}
	
	}

}

 

 

실재 jdbc template를 이요한 코드

@Repository
public class MemberDao {

    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public MemberDao(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void addUser(MemberVo memberVo) {
        String query = "INSERT INTO members (m_id, m_mail, m_phone, m_pw) VALUES (?, ?, ?, ?)";
        jdbcTemplate.update(query, memberVo.getM_id(), memberVo.getM_mail(), memberVo.getM_phone(), memberVo.getM_pw());
    }
}

@Repository 어노테이션은 해당 클래스가 데이터 액세스 계층의 일부임을 나타냅

반응형