ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1130 spring19-mvc-mybatis-junit-javaconfig
    Spring 2022. 11. 30. 17:04

     

    spring19-mvc-mybatis-junit-javaconfig

     

    // WebAppConfig.java

    package org.kosta.myproject.config;
    
    import javax.servlet.Filter;
    
    import org.springframework.web.filter.CharacterEncodingFilter;
    import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
    
    /*
     *   springmvc project를 java Config 스타일로 설정하기 위한 클래스 
     *   기존 SprnigMVC의 web.xml 역할을 한다 
     *   -> FrontController인 spring의 DispatcherServlet 설정 , url-pattern 정의 
     *   	 CharacterEncodingFilter를 이용한 한글처리 설정  
     */
    public class WebAppConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
    
    	@Override
    	protected Class<?>[] getRootConfigClasses() {		
    		return new Class[] {RootContextConfig.class};// 프로젝트 model 영역 설정 ( dbcp , mybatis , mybatis mapper 등 ) 
    	}
    	@Override
    	protected Class<?>[] getServletConfigClasses() {		
    		return new Class[] {ServletContextConfig.class};// springmvc web 영역 설정( view 와 controller 설정 ) 
    	}
    	@Override
    	protected String[] getServletMappings() {		
    		return new String[] {"/"};// DispatcherServlet에 대한 url pattern 지정 
    	}
    	@Override
    	protected Filter[] getServletFilters() {		// 인코딩 설정 
    		CharacterEncodingFilter encodingFilter=new CharacterEncodingFilter();
    		encodingFilter.setEncoding("utf-8");
    		return new Filter[] {encodingFilter};
    	}
    }

    WebAppConfig의 역할은 18 프로젝트에서의 web.xml의 역할이다

     

    // RootContextConfig.java

    package org.kosta.myproject.config;
    
    import javax.sql.DataSource;
    
    import org.apache.commons.dbcp2.BasicDataSource;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /*
     *  기존 springmvc에서 root-context.xml 설정 역할을 하는 클래스
     *  web을 제외한 service , persistence layer 설정 (  dbcp , mybatis 연동 설정 , MapperScan 설정 )  
     */
    @Configuration
    @MapperScan(value = "org.kosta.myproject.model.mapper") // MyBatis MapperProxy 를 위한 설정 
    public class RootContextConfig {
    	@Bean // 메서드에서 반환하는 객체를 스프링 컨테이너에 bean으로 등록하고 관리하게 하는 어노테이션 
    	public DataSource dataSource() {
    		BasicDataSource dataSource=new BasicDataSource();
    		dataSource.setDriverClassName("oracle.jdbc.OracleDriver");
    		dataSource.setUrl("jdbc:oracle:thin:@43.200.5.69:1521:xe");
    		dataSource.setUsername("scott");
    		dataSource.setPassword("tiger");
    		return dataSource;
    	}
    	
    	@Bean
    	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{
    		SqlSessionFactoryBean sessionFactory=new SqlSessionFactoryBean();
    		sessionFactory.setDataSource(dataSource);		
    		// class 명으로 자동 별칭을 정해주는 옵션 -> 만약 이 설정을 하지 않으면 Mapper.xml의 parameterType 과 
    		// resultType에 모두 resultType="org.kosta.myproject.model.ProductVO" 와 같이 모든 패키지명을 기술해야 한다 
    		sessionFactory.setTypeAliasesPackage("org.kosta.myproject.model.vo");				
    		// db 는 underscore로 합성어를 표현 (product_no) , java 는 camelcase로 합성어를 표현 (productNo)
    		// db의 underscore와 java의 camelcase를 자동 연결하는 설정 
    		org.apache.ibatis.session.Configuration conf=new org.apache.ibatis.session.Configuration();
    		conf.setMapUnderscoreToCamelCase(true);
    		sessionFactory.setConfiguration(conf);		
    		return sessionFactory.getObject();
    	}  
    	// Spring과 MyBatis 연동 
    	// SqlSessionTemplate : AOP 기반 Transaction 을 지원 
    	@Bean
    	public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
    		return new SqlSessionTemplate(sqlSessionFactory);
    	}
    }

     

    // ServletContextConfig.java

    package org.kosta.myproject.config;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    /*
     *  기존 springmvc 의 servlet-context.xml 설정 역할을 하는 클래스 
     *  web( view 와 conroller ) 관련 설정을 한다 ( controller bean , annotation 기반 springmvc 설정 , viewResolver 설정 , 정적 자원에 대한 설정 )
     */
    @Configuration
    @EnableWebMvc // 어노테이션 기반 SpringMVC 컨트롤러 설정( <mvc:annotation-driven/> 설정 역할 )
    @ComponentScan("org.kosta.myproject.controller") // bean 생성 등록 관리 
    public class ServletContextConfig implements WebMvcConfigurer{
    	@Override
    	public void configureViewResolvers(ViewResolverRegistry registry) {	//servlet-context.xml의 viewResolver 설정 	
    		WebMvcConfigurer.super.configureViewResolvers(registry);
    		registry.jsp("/WEB-INF/views/", ".jsp");
    	}
    	@Override
    	public void addResourceHandlers(ResourceHandlerRegistry registry) {		
    		WebMvcConfigurer.super.addResourceHandlers(registry);
    		//<resources mapping="/resources/**" location="/resources/" />
    		registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    	}
    }

    둘이 같은 역할을 한다

     

    * 어떤 스타일인지 상관 없이 내용은 동일하다

     

     

    'Spring' 카테고리의 다른 글

    1205  (0) 2022.12.05
    1201 springbootsttudy0-jsp  (0) 2022.12.01
    1130 / spring18-mvc-mybatis-junit-xml.config  (0) 2022.11.30
    Spring MVC  (0) 2022.11.29
    1129 spring17-mvc-basic  (0) 2022.11.29
Designed by Tistory.