在src/main/java下,创建SpringConfig类,用于读取以上配置信息:
package cn.tedu.ssm; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.core.io.Resource; @Configuration @PropertySource("classpath:application.properties") public class SpringConfig { @Value("${datasource.url}") private String url; @Value("${datasource.driver-class-name}") private String driverClassName; @Value("${datasource.username}") private String username; @Value("${datasource.password}") private String password; @Value("${datasource.initialSize}") private Integer initialSize; @Value("${datasource.maxTotal}") private Integer maxTotal; @Value("${mybatis.mapper-locations}") private Resource mapperLocations; }
并且,在这个文件中,继续配置使用MyBatis时所需要使用的数据源DataSource和SqlSessionFactoryBean的对象:
@Bean
public DataSource getDataSource() {
// 当前方法声明的返回值类型是javax.sql.DataSource接口类型的,符合该接口类型的数据源有多种
// 由于本次使用的是commons-dbcp,则创建并返回BasicDataSource的对象
// 如果改用其它数据源,则创建并返回其它数据源的对象
BasicDataSource dataSource = new BasicDataSource(); dataSource.setUrl(url); dataSource.setDriverClassName(driverClassName); dataSource.setUsername(username); dataSource.setPassword(password); dataSource.setInitialSize(initialSize); dataSource.setMaxTotal(maxTotal); return dataSource; } @Bean public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource) { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(mapperLocations); return bean; }
然后,再创建SpringMvcConfig类,用于配置SpringMVC相关的配置:
package cn.tedu.ssm; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.thymeleaf.spring5.SpringTemplateEngine; import org.thymeleaf.spring5.view.ThymeleafViewResolver; import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; @Configuration @EnableWebMvc @ComponentScan("cn.tedu.ssm") public class SpringMvcConfig implements WebMvcConfigurer {
/**
* 字符编码
*/
private String characterEncoding = "utf-8";
// 如果需要使用Thymeleaf,则必须添加以下配置
@Bean
public ViewResolver getViewResolver() { ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); templateResolver.setCacheable(false); templateResolver.setCharacterEncoding(characterEncoding); templateResolver.setTemplateMode("HTML"); templateResolver.setPrefix("/templates/"); templateResolver.setSuffix(".html"); SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver); ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setCharacterEncoding(characterEncoding); viewResolver.setTemplateEngine(templateEngine); return viewResolver; } }
注意:由于以上配置了使用Thymeleaf时的“前缀”与“后缀”,所以,必须在src/main/resources下创建templates文件夹,用于存放Thymeleaf模版页面,且这些模版页面的扩展名必须是.html。
后续,如果还有与SpringMVC相关的配置,也写在以上SpringMvcConfig类中,例如拦截器的配置信息等。
最后,创建SpringMvcInitializer类作为项目的初始化类:
package cn.tedu.ssm; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[] { SpringConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { return new Class[] { SpringMvcConfig.class }; } @Override protected String[] getServletMappings() { return new String[] { "*.do" }; } }
由于SpringMVC项目中,默认情况下,使用POST方式的请求提交的数据都是ISO-8859-1编码的,所以,在以上初始化类中,继续补充过滤器的配置,以应用字符编码过滤器:
private String encoding = "utf-8"; @Override protected Filter[] getServletFilters() { CharacterEncodingFilter filter = new CharacterEncodingFilter(encoding); return new Filter[] { filter }; }
一个整合的SSM框架就已经全部配置完成,接下来,就是具体的使用了!
注意:在确定了使用MyBatis时创建的接口所在的包之后,需要在SpringConfig类的声明之前添加@MapperScan,以指定接口文件所在的包,例如:
@Configuration @PropertySource("classpath:application.properties") @MapperScan("cn.tedu.ssm.mapper") public class SpringConfig {