728x90
Mapper
Mapper에서
BoardMapper, TopMenuMapper, UserMapper를 생성 후
MyBatis Mapper 인터페이스를 스프링 애플리케이션 컨텍스트에 빈으로 등록하여, 나중에 스프링의 의존성 주입을 통해 해당 Mapper 인터페이스를 사용할 수 있도록 하는 것이다.
이를 통해 SQL 쿼리를 Java 메서드로 쉽게 매핑하고, 데이터베이스와 상호작용하는 코드를 간결하게 작성할 수 있다.
ServletAppContext
@Bean
public MapperFactoryBean<BoardMapper> board_mapper(SqlSessionFactory factory) throws Exception {
MapperFactoryBean<BoardMapper> fac =
new MapperFactoryBean<BoardMapper>(BoardMapper.class);
fac.setSqlSessionFactory(factory);
return fac;
}
@Bean
public MapperFactoryBean<TopMenuMapper> top_Mapper(SqlSessionFactory factory) throws Exception {
MapperFactoryBean<TopMenuMapper> fac =
new MapperFactoryBean<TopMenuMapper>(TopMenuMapper.class);
fac.setSqlSessionFactory(factory);
return fac;
}
@Bean
public MapperFactoryBean<UserMapper> user_mapper(SqlSessionFactory factory) throws Exception {
MapperFactoryBean<UserMapper> fac =
new MapperFactoryBean<UserMapper>(UserMapper.class);
fac.setSqlSessionFactory(factory);
return fac;
}
}
굳이 Model(Service or DAO)를 거쳐서 매핑작업을 하는가? 하면 유지보수를 원활히 하게 하기 위함이있다. "약한 결속력"에 의함!
TopMenuMapper
package kr.bit.mapper;
import kr.bit.beans.BoardInfo;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface TopMenuMapper {
@Select("select board_info_idx, board_info_name from board_info_table order by board_info_idx;")
List<BoardInfo> getTopMenuList();
// 함수 호출시 위 쿼리문이 실행됨 -> 쿼리문 결과값들이 /List에 저장됨
}
TopMenuDao
에서 TopMenuMapper를 @Autowired를 통해 주입받는다.
package kr.bit.dao;
import kr.bit.beans.BoardInfo;
import kr.bit.mapper.TopMenuMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class TopMenuDao {
@Autowired
private TopMenuMapper topMenuMapper;
public List<BoardInfo> getTopMenuList() {
List<BoardInfo> topMenuList = topMenuMapper.getTopMenuList();
return topMenuList;
// 1,2,3,4, 1팀,2팀,3팀,4팀
}
}
Service 패키지 생성
ServletAppcontext에서 @ComponentScan에 등록해준다
@ComponentScan은 Spring 프레임워크에서 사용되는 애너테이션으로, 주로 스프링 컨텍스트가 빈(bean)으로 등록할 컴포넌트들을 검색하고 자동으로 인식하기 위해 사용된다.
TopMenuService
package kr.bit.service;
import kr.bit.beans.BoardInfo;
import kr.bit.dao.TopMenuDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TopMenuService {
@Autowired
private TopMenuDao topMenuDao;
public List<BoardInfo> getTopMenuList(){
List<BoardInfo> topMenuList = topMenuDao.getTopMenuList();
return topMenuList;
}
}
// 상단에 팀명을 띄우고 싶을 때( 상단메뉴는 어떤 주소를 눌러도 다 동작이 되야한다 -> 무엇을 요청하던 Interceptor를 거쳐야함)
// 뭘 요청하던 topmenu를 통과해야함
/java/kr.bit/
interceptor 패키지 추가
TopInterceptor
package kr.bit.interceptor;
import kr.bit.beans.BoardInfo;
import kr.bit.beans.User;
import kr.bit.service.TopMenuService;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public class TopInterceptor implements HandlerInterceptor {
private TopMenuService topMenuService;
// @Resource(name = "loginBean")
// private User loginBean;
public TopInterceptor(TopMenuService topMenuService) {
this.topMenuService = topMenuService;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
List<BoardInfo> team = topMenuService.getTopMenuList(); //select .. 1,2,1팀,2팀
request.setAttribute("team", team);
return true;
}
}
ServletAppContext에 아래 코드 추가
public void addInterceptors(InterceptorRegistry re) {
WebMvcConfigurer.super.addInterceptors(re);
TopMenuInterceptor top = new TopMenuInterceptor(topMenuService);
InterceptorRegistration re1 = re.addInterceptor(top); // TopMenuInterceptor등록
re1.addPathPatterns("/**"); // 모든 경로로 매핑해도 다 뜨도록, 컨트롤러 전에 preHandle
}
상단에 팀명 띄우기
top_menu.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:url value='/' var="root"/>
<nav class="navbar navbar-expand-md bg-dark text-white fixed-up shadow-lg">
<a class=navbar-brand" href="${root }main">Board Project</a>
<div class="container-fluid">
<button class="navbar-toggler" type="button" data-toggle="collapse"
data-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<c:forEach var="obj" items="${team }">
<li class="nav-item">
<a href="${root }board/main?board_info_idx=${obj.board_info_idx}"
class="nav-link">${obj.board_info_name}</a>
</li>
</c:forEach>
</ul>
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="${root }user/modify">Modify</a>
</li>
<li class="nav-item">
<a class="nav-link" href="${root }user/logout">Log Out</a>
</li>
<li class="nav-item">
<a class="nav-link" href="${root }user/login">Log In</a>
</li>
<li class="nav-item">
<a class="nav-link" href="${root }user/join">Join Us</a>
</li>
</ul>
</div>
</div>
</nav>
728x90
'Frameworks > Spring' 카테고리의 다른 글
[Spring] Board CRUD (Login(orNot) TopMenu/ Modify) (0) | 2024.05.16 |
---|---|
[Spring] Board CRUD (Validator + DB insert) III (0) | 2024.05.14 |
[Spring] Board CRUD (use Bootstrap) (2) | 2024.05.13 |
[Spring] MVC (MyBatis with XML) (0) | 2024.05.13 |
[Spring] MVC (Restcontroller) (2) | 2024.05.13 |