초보 개발자의 기록

관리자모드-상품등록 페이지 개발 순서 본문

SpringFramework/FashionShop

관리자모드-상품등록 페이지 개발 순서

bambinodeveloper 2021. 1. 7. 23:23
728x90

관리자 모드에서 대부분 코드를 작성하기때문에 클라이언트를 만들 경우 수월함 (이미 만들어진 DAO,Service 이용)

 

대부분의 경우, 테이블마다 컨트롤러를 1:1로 만듬

업무의 복잡성에 따라 컨트롤러를 만들 것인지 아닌지 정함

상위 카테고리에 자세한 작성을 하려면 따로 배분하는것이 좋지만, select만 하는 경우니까 컨트롤러 하나로

 

Controller->Service->DAO->Mybatis

로직을 짤경우-개발은 역방향으로!

상위로 올라갈수록 하위에 의존적이므로

 

<-Mybatis

1. model.domain패키지 : VO생성

TopCategory.java

package com.study.fashionshopapp.model.domain;

public class TopCategory {
	private int topcategory_id;
	private String name;
	private int rank;
	public int getTopcategory_id() {
		return topcategory_id;
	}
	public void setTopcategory_id(int topcategory_id) {
		this.topcategory_id = topcategory_id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getRank() {
		return rank;
	}
	public void setRank(int rank) {
		this.rank = rank;
	}
}

 

2. mybatis.mapper 패키지: Mapper생성

TopCategoryMapper.xml

<?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="TopCategory">

	<select id="selectAll" resultType="TopCategory">
		SELECT * FROM topcategory ORDER BY rank ASC
	</select>
    
</mapper>

3. mybatis.config 패키지: Mybatis 설정파일 만듬 -config.xml

mybatis.org/mybatis-3/ko/getting-started.html

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

 

config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<typeAliases>
		<typeAlias type="com.study.fashionshopapp.model.domain.TopCategory" alias="TopCategory"/>
	</typeAliases>
	<mappers>
		<mapper resource="com/study/fashionshopapp/mybatis/mapper/TopCategoryMapper.xml"/>
	</mappers>
</configuration>

자바 class가 아닌경우는 모두 일반 파일로 간주되기때문에 .이 아닌 /로 표시

 

DAO<-Mybatis

규모가 큰 경우에는 DAO를 interface로 만들어야함 -DI를 이용하려면

DI(Dependency Injection) 의존성 주입 클래스 사이의 의존관계 (설정 정보)를 컨테이너가 자동적으로 연결

개발구분-Mybatis/Jdbc?

 

1. DAO 클래스를 인터페이스로 변경

2. CRUD 작업

model.product.repository

TopCategoryDAO.java

package com.study.fashionshopapp.model.product.repository;

import java.util.List;

import com.study.fashionshopapp.model.domain.TopCategory;

public interface TopCategoryDAO {
	//CRUD
	public List selectAll();
	public TopCategory select(int topcategory_id);
	public void insert(TopCategory topcategory);
	public void update(TopCategory topcategory);
	public void delete(int topcategory_id);
}

SubCategoryDAO.java

package com.study.fashionshopapp.model.product.repository;

public interface SubCategoryDAO { }

ProductDAO.java

package com.study.fashionshopapp.model.product.repository;

public interface ProductDAO { }

 

3. DAO의 구현체 - 하위객체 만들기

model.product.repository

MybatisTopCategoryDAO.java

package com.study.fashionshopapp.model.product.repository;

import java.util.List;

import com.study.fashionshopapp.model.domain.TopCategory;

public class MybatisTopCategoryDAO implements TopCategoryDAO{

	@Override
	public List selectAll() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public TopCategory select(int topcategory_id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void insert(TopCategory topcategory) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void update(TopCategory topcategory) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void delete(int topcategory_id) {
		// TODO Auto-generated method stub
		
	}
}

 

Service<-DAO<-Mybatis

모든 하위 객체가 반드시 구현해야 할 공통 및 필수적인 기능을 정의

 

1. Service를 interface로 생성

2. CRUD생성

서비스의 하위객체들은 Mybatis/jdbc 구분하지 않음

DAO의 interface만 조종하면 되기떄문

 

 

model.product.service

TopCategoryService.java

package com.study.fashionshopapp.model.product.repository;

import java.util.List;

import com.study.fashionshopapp.model.domain.TopCategory;

//모든 하위 객체가 반드시 구현해야 할 공통 및 필수적인 기능을 정의
public interface TopCategoryService {
	public List selectAll();
	public TopCategory select(int topcategory_id);
	public void insert(TopCategory topcategory);
	public void update(TopCategory topcategory);
	public void delete(int topcategory_id);
}

3.Service의 하위 객체 ServiceImpl 생성

Service 만들어야하는이유? 서비스의 존재가 없다면 스트림 이용한 파일처리 불가능 (DAO가 처리할 수 없음)

Service도 다양한 종류의 업무 타입이 있어서 교체의 대상이 되어야하므로 interface처리 (변동가능성-유연해짐)

ex>이메일 처리할경우 : ServiceEmail 등..과 같이

TopCategoryServiceImpl.java

package com.study.fashionshopapp.model.product.repository;

import java.util.List;

import com.study.fashionshopapp.model.domain.TopCategory;

public class TopCategoryServiceImpl implements TopCategoryService{

	@Override
	public List selectAll() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public TopCategory select(int topcategory_id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void insert(TopCategory topcategory) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void update(TopCategory topcategory) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void delete(int topcategory_id) {
		// TODO Auto-generated method stub
		
	}
}

 

Controller<-Service<-DAO<-Mybatis

ProductController.java

package com.study.fashionshopapp.controller.admin;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

//관리자 모드에서의 상품에 대한 요청 처리
@Controller
public class ProductController {
	//상위 카테고리 가져오기
	
	//하위 카테고리 가져오기
	
	//상품 목록
	@RequestMapping(value="/admin/product/list", method=RequestMethod.GET)
	public ModelAndView getProductList() {
		ModelAndView mav = new ModelAndView("admin/product/product_list");
		return mav;
	}
	//상품 등록 폼
	@RequestMapping(value="/admin/product/registform")
	public String registForm() {
		return "admin/product/regist_form";
	}
	
	//상품 상세
	
	//상품 등록
	
	//상품 수정
	
	//상품 삭제
}

 

 

 

728x90
반응형