Back end/SpringBoot
homeController -> Service -> Dao 의 흐름
jinpark1992
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: 게시판 수정,삭제 기능 추가로 구현해보기