service, dao

최고고·2022년 11월 9일
0

https://velog.io/@ggg4155/SpringMVC-Board-CRUD
에서 서비스인터페이스, DAO인터페이스를 추가한 코드

package kr.web.dao;

import java.util.List;

import kr.web.vo.BoardVO;

public interface BoardDAO {
	
	public List<BoardVO> boardlist() throws Exception;

	public BoardVO boardContent(int idx) throws Exception;

	public void boardInsert(BoardVO vo) throws Exception;

	public void boardUpdate(BoardVO vo) throws Exception;

	public void boardDelete(int idx) throws Exception;

	public void countUpdate(int idx) throws Exception;
	
   

}



package kr.web.dao;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import kr.web.vo.BoardVO;

@Repository
public class BoardDAOimpl implements BoardDAO {
	
	@Inject
	private SqlSession session;
	
	private static String namespace = "kr.web.mapper.BoardMapper";
	

	@Override
	public List<BoardVO> boardlist() throws Exception {
		return session.selectList(namespace + ".boardlist");
	}

	@Override
	public BoardVO boardContent(int idx) throws Exception {
		return session.selectOne(namespace + ".read", idx);
 }

	@Override
	public void boardInsert(BoardVO vo) throws Exception {
		session.insert(namespace + ".boardInsert", vo);
	}

	@Override
	public void boardUpdate(BoardVO vo) throws Exception {
		session.update(namespace + "boardUpdate", vo);
		
	}

	@Override
	public void boardDelete(int idx) throws Exception {
		session.delete(namespace + ".delete", idx);		
		
	}

	
	@Override
	public void countUpdate(int idx) throws Exception {
		session.update(namespace + "countUpdate", idx);
	}
	

}

서비스(비즈니스계층)

package kr.web.service;

import java.util.List;

import kr.web.vo.BoardVO;

public interface BoardService {

	public void create(BoardVO vo) throws Exception;

	public BoardVO read(int idx) throws Exception;

	public void update(BoardVO vo) throws Exception;

	public void updateCnt(int idx) throws Exception;

	public void delete(int idx) throws Exception;

	public List<BoardVO> listAll() throws Exception;

}


package kr.web.service;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import kr.web.dao.BoardDAO;
import kr.web.vo.BoardVO;

@Service
public class BoardServiceimpl implements BoardService{
	
	@Inject
	private BoardDAO dao;

	@Override
	public void create(BoardVO vo) throws Exception {
		dao.boardInsert(vo);
		
	}

	@Override
	public BoardVO read(int idx) throws Exception {
		return dao.boardContent(idx);
	}

	@Override
	public void update(BoardVO vo) throws Exception {
		dao.boardUpdate(vo);
		
	}

	@Override
	public void updateCnt(int idx) throws Exception {
		
	}

	@Override
	public void delete(int idx) throws Exception {
		dao.countUpdate(idx);
		
	}

	@Override
	public List<BoardVO> listAll() throws Exception {
		return dao.boardlist();
	}

}

바뀐 root-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd
    http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"
	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring">
	<!-- Root Context: defines shared resources visible to all other web components -->
	
	<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName"
			value="com.mysql.jdbc.Driver">
		</property>
		<property name="jdbcUrl"
			value="jdbc:mysql://localhost:3306/mysql"></property>
		<property name="username" value="root"></property>
		<property name="password" value="12345"></property>
	</bean>

	<!-- 히카리 CP 설정 -->
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
		destroy-method="close">
		<constructor-arg ref="hikariConfig" />
	</bean>

	<!-- sqlSession -->
	<bean id="sqlSession"
		class="org.mybatis.spring.SqlSessionTemplate"
		destroy-method="clearCache">
		<constructor-arg name="sqlSessionFactory"
			ref="sqlSessionFactory"></constructor-arg>
	</bean>

	<!-- sql xml db 연결 sqlSessionFactory -->
	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation"
			value="classpath:/mybatis-config.xml"></property>
		<property name="mapperLocations"
			value="classpath:mappers/**/*Mapper.xml"></property>
	</bean>
	<mybatis-spring:scan base-package="test.web.dao"/>
	<!-- service, repository 스캔 -->
	
</beans>

컨트롤러도 수정해줌

스프링 mvc에서 컨트롤러를 설계할 때 고려할 것들

  • 공통적인 uri 경로와 각 기능별 uri
    RequestMapping value

  • 각 uri에 대한 호출 방식(get, post)
    RequestMapping method

  • 결과 처리와 리다이렉트 방식의 페이지 결정
    화면전환 방식

  • 예외 페이지
    @ExceptionHandler 애노테이션을 이용한 처리
    @ControllerAdvice를 이용한 처리
    @ResponseStatus를 이용한 Http 상태 코드 처리

package test.web.board2;


import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import test.web.service.BoardService;
import test.web.vo.BoardVO;

@Controller
public class BoardController {
	
	@Inject
	private BoardService service;
	
	@RequestMapping("/boardlist")
	public void boardlist(Model model) throws Exception {
		System.out.println("게시판 목록 보기");
		model.addAttribute("list", service.listAll());
	}
	
	@RequestMapping("/boardContent")
	public void boardContent(int idx, Model model) throws Exception {
		System.out.println("게시글 보기 실행, idx : " + idx);
		BoardVO vo = service.read(idx);
		service.updateCnt(idx);
		model.addAttribute("vo", vo);
	}
	
	@RequestMapping("/boardInsertForm")
	public void boardInsertForm()  {
	}
	
	@RequestMapping("/boardInsert")
	public String boardInsert(BoardVO vo) throws Exception {
		System.out.println("작성내용 : " + vo.toString());
		service.create(vo);
		return "redirect:/boardlist";	
		//게시글 가지고 가도록 redirect
	}
	
	@RequestMapping("/boardUpdateForm")
	public void boardUpdateForm(int idx, Model model) throws Exception {
		BoardVO vo =  service.read(idx);
		System.out.println(vo.toString());
		model.addAttribute("vo", vo);
		
	}
	
	@RequestMapping("/boardUpdate")
	public String boardUpdate(BoardVO vo) throws Exception {
		System.out.println("게시글수정내용 : " + vo.toString());
		service.update(vo);
		return "redirect:/boardlist";	
	}
	
	@RequestMapping("/boardDelete")
	public String boardDelete(int idx) throws Exception {
		System.out.println("게시글삭제 실행, index : " + idx);
		service.delete(idx);
		return "redirect:/boardlist";	
	}
	
	

	
}

레파지토리, 서비스, 컨트롤러 어노테이션 작성하고, Mybatis 설정을 할 수 있는 Mybatis-config.xml 파일도 만들었는데,,
왜 자꾸 에러가 나는지 ㅠㅜ,,

에러 고치면 또다른에러가 나오고 산너머 산이다

  1. The prefix "context" for element "context:component-scan" is not bound.
    -----> 서비스,dao 객체 불러오려면 root-context에 xmlns:context="http://www.springframework.org/schema/context"
    이 스키마 추가시키고 아래에 컨텍스트 태그를 추가해야됨 <context:component-scan base-package="test.web.dao"></context:component-scan>

  2. 위 문제가 해결이 안됨 .. 일치하는 와일드 카드 문자가 엄격하게 적용되지만 'context:component-scan' 요소에 대한 선언을 찾을 수 없습니다.
    ---> root-context에 위에거 지우고 다시xmlns:context="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" 스키마 추가함

  3. Servlet.init() 호출이 예외를 발생시켰습니다.서비스,레파지토리 어노태이션문제

https://liante0904.tistory.com/113
이분 거 에러 원인 참고했지만,, 뭐가 잘못된건지 난 왜안돼,,,
구글링 겁나했지만 전부다 어노테이션이 잘 안달려있거나, 오타 등의 문제였는데 눈씻고찾아봐도 오타가 안보이고 xml sql문오타도 없고 (서비스DAO로 했을때와 달리 mapper로 매칭했을땐 잘 동작했음) 뭐가 문제냐. pom.xml 문제라기엔 에러 창에 그런 문구가 없는거같음 게다가 갑자기 jUnit DataSource 테스트에서 ds가 null이라고 뜸 ㄷㄷㄷㄷㄷ 아...아아아아아아앜!!!!!

error creating bean with name 'sqlSession' defined in ServletContext resource [/WEB-INF/spring/root-context.xml]: Cannot resolve reference to bean 'sqlSessionFactory' while setting constructor argument;
어쩌고저쩌고
이런 에러..

org.springframework.web.context.support.XmlWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'boardController':

어쩌고저쩌고
에러가 뜬다

0개의 댓글