ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.