聊聊、Mybatis 第三篇

三、Java实现<mybatis:scan/>
首先继承AbstractAnnotationConfigDispatcherServletInitializer
public class MvcInitializer extends
  AbstractAnnotationConfigDispatcherServletInitializer {
 @Override
 protected Class<?>[] getRootConfigClasses() {
  return new Class<?>[] { RootConfig.class };
 }
 @Override
 protected Class<?>[] getServletConfigClasses() {
  return new Class<?>[] { WebConfig.class };
 }
 @Override
 protected String[] getServletMappings() {
  return new String[] { "/" };
 }
 @Override
 protected Filter[] getServletFilters() {
  CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
  characterEncodingFilter.setEncoding("UTF-8");
  characterEncodingFilter.setForceEncoding(true);
  return new Filter[] { characterEncodingFilter };
 }
}
下面是AbstractAnnotationConfigDispatcherServletInitializer源码
 protected WebApplicationContext createRootApplicationContext() {
  Class<?>[] configClasses = getRootConfigClasses();
  if (!ObjectUtils.isEmpty(configClasses)) {
   AnnotationConfigWebApplicationContext rootAppContext = new AnnotationConfigWebApplicationContext();
   rootAppContext.register(configClasses);
   return rootAppContext;
  }
  else {
   return null;
  }
 } 
 protected WebApplicationContext createServletApplicationContext() {
  AnnotationConfigWebApplicationContext servletAppContext = new AnnotationConfigWebApplicationContext();
  Class<?>[] configClasses = getServletConfigClasses();
  if (!ObjectUtils.isEmpty(configClasses)) {
   servletAppContext.register(configClasses);
  }
  return servletAppContext;
 }
应该可以看出来,分别初始化applicationContext和servletContext,再来看看WebConfig和RootConfig
(1)RootConfig
@Configuration
@ComponentScan(basePackages={"mybatis"},
excludeFilters={
        @ComponentScan.Filter(type= FilterType.ANNOTATION, value=EnableWebMvc.class)
})
public class RootConfig {
}
来看看mybatis包下的Mybatis.config类
@Configuration
@MapperScan("mapper")
public class MybatisConfig {
 @Bean
 public DataSource dataSource() {
  DriverManagerDataSource dataSource = new DriverManagerDataSource();
  dataSource.setDriverClassName("com.mysql.jdbc.Driver");
  dataSource.setUrl("url");
  dataSource.setUsername("name");
  dataSource.setPassword("password");
  return dataSource;
 }
 @Bean
 public DataSourceTransactionManager transactionManager() {
  return new DataSourceTransactionManager(dataSource());
 }
 @Bean
 public SqlSessionFactory sqlSessionFactory() throws Exception {
  SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
  sessionFactory.setDataSource(dataSource());
  //下面配置的是MapperLocation,如果配置了,那么Mapper接口就不需要@Select了
  //PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
     //Resource[] mapperLocations = resolver.getResources("classpath:mappers/*.xml");
  //sessionFactory.setMapperLocations(mapperLocations);
  return sessionFactory.getObject();
 }
}
再看看mapper包下面的ChannelMapper接口
public interface ChannelMapper {
  //如果上面那段代码不注释掉,那么这个@Select就可以不用了
 @Select("select * from t_distributor")
    List<ChannelManageDto> queryAllChannels();
}
(2)WebConfig
@Configuration
@EnableWebMvc
@ComponentScan("mvc.controller.scan")
public class WebConfig extends WebMvcConfigurerAdapter {
 // 视图解析器
 @Bean
 public ViewResolver viewResolver() {
  InternalResourceViewResolver resolver = new InternalResourceViewResolver();
  resolver.setPrefix("/WEB-INF/");
  resolver.setSuffix(".jsp");
  resolver.setExposeContextBeansAsAttributes(true);
  return resolver;
 }
 // 跳转主页面
// @Override
// public void addViewControllers(ViewControllerRegistry registry) {
//  registry.addViewController("/hello/user").setViewName("hello");
//  registry.addViewController("/user").setViewName("user");
// }
 // 访问静态资源
 @Override
 public void addResourceHandlers(ResourceHandlerRegistry registry) {
  registry.addResourceHandler("/static/**").addResourceLocations(
    "/static/");
 }
 /**
  * 描述 : <文件上传处理器>
  * @return
  */
// @Bean(name = "multipartResolver")
// public CommonsMultipartResolver commonsMultipartResolver() {
//  CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
//  multipartResolver.setResolveLazily(true);
//  multipartResolver.setMaxUploadSize(1048576000L);
//  return multipartResolver;
// }
 @Override
 public void configureDefaultServletHandling(
   DefaultServletHandlerConfigurer configurer) {
  configurer.enable();
 }
}
看看mvc.controller.scan包下面UserController类
@Controller
@RequestMapping("/")
public class UserController {
 
 @Autowired
 private ChannelMapper channelMapper;
 
 @RequestMapping("getName")
 @ResponseBody
 public String getName(){
  List<ChannelManageDto> list = channelMapper.queryAllChannels();
  for(ChannelManageDto dto:list){
   System.out.println(dto.getChannelName());
  }
  return "name";
 }
}
到这里,Java配置Mybatis就结束了,但是还有很多细节需要去分析,去思考。

猜你喜欢

转载自www.cnblogs.com/xums/p/10331365.html