三、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 {
首先继承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;
}
@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());
}
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();
}
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();
}
再看看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 {
@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;
}
@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 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/");
}
@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;
// }
* 描述 : <文件上传处理器>
* @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();
}
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";
}
看看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就结束了,但是还有很多细节需要去分析,去思考。
到这里,Java配置Mybatis就结束了,但是还有很多细节需要去分析,去思考。