//Google AdSense

Configuration

63P

편리한 두 줄을 class로 !?

configration 어노테이션 명시

Configuration 어노테이션을 구현하여 클래스가 하나 이상의 Bean 메소드를 제공
스프링 컨테이너가 Bean의 정의를 생성하고 런타임시 그 Bean이 요청을 처리할 것을 선언.

궁극적으로 Sql Session Package를 얻어야 함

인터페이스 구현체가 필요

SqlSessionFactoryBean 클래스를 통해 인터페이스 구현

package kr.or.ksmart35.springboot_mybatis.config;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan(basePackages = "kr.or.ksmart35.springboot_mybatis", sqlSessionFactoryRef = "mybatisSessionFactory")
public class MybatisConfig {
	
	@Bean(name = "mybatisSessionFactory") 
	public SqlSessionFactory mybatisConfig(ApplicationContext context, DataSource dataSource) throws Exception {
		SqlSessionFactoryBean mybatisFactory = new SqlSessionFactoryBean();
		mybatisFactory.setDataSource(dataSource);
		mybatisFactory.setMapperLocations(context.getResources("classpath:mapper/**/*.xml"));
		mybatisFactory.setTypeAliasesPackage("kr.or.ksmart35.springboot_mybatis.domain");
		return mybatisFactory.getObject();
	}
}

SqlSessionFactoryBean 클래스 타입의 객체를 생성하여

dataSource, mapperLocations,typeAliasesPackage 설정 후 object리턴

Bean어노테이션으로 Spring(IOC) Container에 Bean을 등록하도록 하는 메타데이터를 기입

MapperScan 어노테이션으로 bascPackage와 sqlSessionFactoryRef 설정


interceptor

100P

package kr.or.ksmart35.springboot_mybatis.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

@Component 
public class LoginInterceptor implements HandlerInterceptor{
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
			HttpSession session = request.getSession();
			String sessionId = (String) session.getAttribute("SID");
			if(sessionId == null) {
				response.sendRedirect("/login");
				return false;
			}
		return true;
	}
}

dispatcher servlet 이전 handler interceptor에서 요청된 분기작업을 실행하도록함.

component 어노테이션으로 Spring(IOC) Container에 Bean을 등록하도록 하는 메타데이터를 기입

bean 어노테이션 : 개발자가 직접 제어할 수 없는 외부 라이브러리 등을 Bean으로 등록하기 위함
 vs 
component 어노테이션 : 개발자가 직접 작성한 Class를 Bean으로 등록하기 위함

package kr.or.ksmart35.springboot_mybatis.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import kr.or.ksmart35.springboot_mybatis.interceptor.LoginInterceptor;

@Configuration
public class WebConfig implements WebMvcConfigurer{
	
	@Autowired LoginInterceptor loginInterceptor;
	
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(loginInterceptor)
				.addPathPatterns("/**")
				.excludePathPatterns("/css/**")
				.excludePathPatterns("/")
				.excludePathPatterns("/login")
				.excludePathPatterns("/logout")
				.excludePathPatterns("/addMember");
	}
}

configuration 어노테이션 명시

구현한 interceptor 를 autowired 시키고 

webMvcConfigurer 인터페이스를 구현하여 interceptor add/exclude path pattern 설정


mybatis 사용 시 동적 쿼리를 이용하여 검색을 쉽게 처리할 수 있음!!!!!!!!!!!!!!!!!!!!


class에서 어노테이션을 통해 각종 설정이 가능해서 개발이 편리해진다!!

+ Recent posts