-
homeController -> Service -> Dao 의 흐름Back end/SpringBoot 2023. 8. 8. 15:07
* homeController 생성
package com.example.demo.controller;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.example.demo.service.homeService;
import org.springframework.ui.Model;
@Controller
// 이 클래스는 Spring의 컨트롤러 역할을 하도록 지정합니다. Spring MVC는 이 컨트롤러 클래스를 사용하여 클라이언트 요청을 처리하고 응답을 생성합니다.
public class homeController {
@Autowired
private homeService hService;
// homeService라는 서비스(Service) 클래스를 자동으로 주입합니다. 의존성 주입을 통해 컨트롤러에서 homeService의 메서드를 호출하여 데이터베이스 작업을 수행할 수 있습니다.
//조회
@RequestMapping("/") // 루트 경로 ("/")로 들어오는 요청을 처리하는 home() 메서드를 정의합니다. 이 메서드는 홈 화면을 조회하여 화면에 표시할 회원 정보를 가져옵니다.
public String home(Model model) {
// Spring에서 제공하는 모델 객체로, 컨트롤러에서 뷰로 데이터를 전달하는데 사용됩니다.
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
// List<Map<String, Object>> list: 회원 정보를 저장하는 리스트입니다. 각 회원 정보는 맵(Map) 형태로 저장됩니다.
list= hService.homeList();
// homeService의 homeList() 메서드를 호출하여 데이터베이스에서 회원 정보 목록을 가져옵니다.
// 나중에 예외처리... try catch
// try {
// list= hService.homeList();
// } catch (Exception e) {
// e.printStackTrace();
// System.out.println(e.getMessage());
// }
model.addAttribute("member",list);
// "member"라는 이름으로 회원 정보 목록을 모델에 추가하여 뷰로 전달합니다.
return "home";
// home"이라는 뷰 이름을 반환하여 해당 뷰를 보여줍니다. 이 뷰는 홈 화면에 표시할 내용을 생성합니다.
}
@RequestMapping("/sign")
//"/sign" 경로로 들어오는 요청을 처리하는 sign() 메서드를 정의합니다. 이 메서드는 회원 가입 페이지로 이동합니다.
public String sign() {
System.out.println();
return "sign";
}
@RequestMapping("/insert")
// "/insert" 경로로 들어오는 요청을 처리하는 insert() 메서드를 정의합니다. 이 메서드는 회원 정보를 입력받아 데이터베이스에 삽입하고, 다시 홈 화면으로 리다이렉트합니다.
public String insert(@RequestParam Map<String, Object> map, Model model) {
//회원가입에서 받아온 파라미터들 잘 받아오는지 확인.
System.out.println(map);
//Mybatis에서는 0(안됨), 1(됨)으로 온다. 그래서 자료형을 int로 사용한다.
int ins = hService.insert(map);
// hService.insert(map);: homeService의 insert() 메서드를 호출하여 회원 정보를 데이터베이스에 삽입합니다. 삽입 결과를 ins 변수에 저장합니다.
return "redirect:/";
//redirect 쓴 이유는 그냥 바로 / (home.jsp)임. 가입시키고 리프레쉬같은 느낌.
}
}↓
* homeService 생성
package com.example.demo.service;
import java.util.List;
import java.util.Map;
public interface homeService {
List<Map<String, Object>> homeList();
// 이 메서드는 인터페이스 내에 선언된 추상 메서드입니다. homeList() 메서드는 데이터베이스로부터 가져온 홈 화면 목록을 반환하는 기능을 정의합니다.
// 반환값은 List 형태이며, 각 항목은 Map<String, Object> 형태로 구성됩니다. 이는 데이터베이스 결과를 매핑하기 위한 일반적인 방법 중 하나입니다.
int insert(Map<String, Object> map);
// 이 메서드는 인터페이스 내에 선언된 또 다른 추상 메서드입니다. insert() 메서드는 회원 정보를 데이터베이스에 삽입하는 기능을 정의합니다. 메서드의 파라미터로 Map<String, Object>을 받아와 회원 정보를 나타내는 데이터를 전달받습니다.
// 반환값은 int 형태로, 삽입 작업의 결과를 나타냅니다. 일반적으로 성공 시 1, 실패 시 0을 반환하는 관행이 있습니다.
}↓
* homeService interface 생성
package com.example.demo.service;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.dao.homeDao;
@Service
//이 클래스가 Spring의 서비스 빈(Service Bean)으로 등록되어야 함을 나타내는 어노테이션입니다.
//Spring은 @Service 어노테이션이 붙은 클래스를 서비스 계층의 구성요소로 인식하고 필요한 곳에서 사용할 수 있도록 관리합니다.
public class homeServiceImpl implements homeService {
//homeService 인터페이스를 구현하는 homeServiceImpl 클래스를 선언합니다.
@Autowired
// Spring의 의존성 주입(Dependency Injection)을 위한 어노테이션입니다. 이를 통해 homeDao 인스턴스를 자동으로 주입받습니다.
// 즉, homeDao 객체를 생성하고 초기화하는 작업을 Spring이 대신 처리해줍니다.
private homeDao hDao;
// homeDao 인터페이스의 구현체를 가리키는 변수입니다. 이 변수를 통해 데이터 액세스 작업을 수행합니다.
@Override
//이 어노테이션은 상위 클래스나 인터페이스의 메서드를 재정의(오버라이드)한다는 것을 나타냅니다.
public List<Map<String, Object>> homeList() {
// 이 메서드는 homeService 인터페이스에 정의된 homeList() 메서드를 구현한 것입니다.
// 이 메서드는 데이터베이스로부터 홈 화면 목록을 가져오는 역할을 합니다.
return hDao.homeList();
//데이터 액세스 계층인 homeDao의 homeList() 메서드를 호출합니다. 이를 통해 실제 데이터베이스에서 홈 화면 목록을 조회합니다.
}
@Override
public int insert(Map<String, Object> map) {
// 이 메서드는 homeService 인터페이스에 정의된 insert() 메서드를 구현한 것입니다.
// 이 메서드는 회원 정보를 데이터베이스에 삽입하는 역할을 합니다.
return hDao.insert(map);
// homeDao의 insert() 메서드를 호출합니다. 이를 통해 실제 데이터베이스에 회원 정보를 삽입합니다.
}
}↓
* homeDao 생성
package com.example.demo.dao;
import java.util.List;
import java.util.Map;
public interface homeDao {
List<Map<String, Object>> homeList();
int insert(Map<String, Object> map);
}↓
*homeDao interface 생성 (이 코드는 Spring 프레임워크에서 데이터 액세스 계층(DAO)의 구현체를 정의하는 homeDaoImpl 클래스를 보여줍니다. 이 클래스는 데이터베이스와의 상호작용을 담당하며, 실제 SQL 쿼리를 실행하여 데이터를 조회하거나 삽입하는 역할을 합니다.)
package com.example.demo.dao;
import java.util.List;
import java.util.Map;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository("dao")
//이 클래스가 Spring의 빈(Bean)으로 등록되어야 함을 나타내는 어노테이션입니다.
//Spring은 @Repository 어노테이션이 붙은 클래스를 데이터 액세스 계층의 구성요소로 인식하고 필요한 곳에서 사용할 수 있도록 관리합니다.
public class homeDaoImpl implements homeDao {
@Autowired
public SqlSessionTemplate sqlST;
//SqlSessionTemplate 객체를 자동으로 주입받습니다. 이 객체는 MyBatis와 Spring을 연결하여 데이터베이스 액세스 작업을 수행합니다.
@Override
public List<Map<String, Object>> homeList() {
// 이 메서드는 homeDao 인터페이스에 정의된 homeList() 메서드를 구현한 것입니다. 이 메서드는 데이터베이스로부터 홈 화면 목록을 가져오는 역할을 수행합니다.
return sqlST.selectList("home.List");
// MyBatis의 Mapper에서 home.List 쿼리를 실행하여 데이터베이스로부터 데이터를 가져옵니다.
// 이 쿼리가 정의된 Mapper XML 파일에 접근하여 해당 SQL을 실행합니다.
}
@Override
public int insert(Map<String, Object> map) {
// 이 메서드는 homeDao 인터페이스에 정의된 insert() 메서드를 구현한 것입니다. 이 메서드는 회원 정보를 데이터베이스에 삽입하는 역할을 수행합니다.
return sqlST.insert("home.Insert",map);
// MyBatis의 Mapper에서 home.Insert 쿼리를 실행하여 데이터베이스에 데이터를 삽입합니다. Mapper XML 파일에 해당하는 쿼리가 정의되어 있어야 합니다.
// map 파라미터는 회원 정보를 나타내는 데이터를 전달받습니다.
// 메서드의 반환값은 int로, 삽입 작업의 결과를 나타냅니다. 일반적으로 성공 시 1, 실패 시 0을 반환하는 관행이 있습니다.
}
}↓
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="home">
<!-- Select 쿼리: homeList() 메서드에 대응 -->
<select id="List" parameterType="map" resultType="map">
select
ID, NAME, AGE, GENDER, EMAIL, PHONE, ADDRESS, JOB, PASSWORD
from MEMBERLIST
</select>
<!-- Insert 쿼리: insert() 메서드에 대응 -->
<insert id="Insert" parameterType="map">
insert into MEMBERLIST
(
ID, NAME, AGE, GENDER, EMAIL, PHONE, ADDRESS, JOB, PASSWORD
) values (
#{ID}, #{NAME}, #{AGE}, #{GENDER}, #{EMAIL}, #{PHONE}, #{ADDRESS}, #{JOB}, #{PASSWORD}
)
</insert>
</mapper>* misson: 게시판 수정,삭제 기능 추가로 구현해보기
'Back end > SpringBoot' 카테고리의 다른 글
뷰 템플릿과 MVC 패턴 (2) 2023.11.29 Controller -> Service -> Dao || repository -> dbms (0) 2023.11.16 @Test (0) 2023.11.14 스프링부트 핵심정리 (0) 2023.11.11 home.jsp 와 sign.jsp (0) 2023.08.08