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에서 어노테이션을 통해 각종 설정이 가능해서 개발이 편리해진다!!
'SpringBoot' 카테고리의 다른 글
[MyBatis] update에서 selectKey가 안돼요! :: No setter found for the keyProperty '' in java.lang.String. (0) | 2020.07.01 |
---|---|
[mybatis] multiple select key (0) | 2020.06.23 |
[MyBatis] mybatis03 (0) | 2020.05.27 |
[MyBatis] mybatis02 Dynamic SQL (0) | 2020.05.26 |