纯注解驱动smm集合
详细的ssm整合 在上一篇博客中有介绍
项目结构
- Web.xml
- applciationContext.xml
- spring-mvc.xml
- UserDao.xml
- 去掉以上的文件 使用注解进行执行
Jdbc.properties
项目结构
首先去掉对应的UserDao.xml创建类jdbcConfig类进行等价替换
public class JdbcConfig {
// 使用注入的形式 读取properties文件的属性值
// 使用private 定义其中的属性 在SpringConfig 中加载属性
// 进行set注入
@Value("${jdbc.driverClass}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
// 定义DataSource的Bean
@Bean("dataSource")
public DataSource getDataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
}
创建对应的MyBatisConfig
public class MyBatisConfig {
// 定义MyBatis的核心连接工厂bean
@Bean
// 参数使用自动装配的形式加载dataSource 为set注入提供数据
public SqlSessionFactoryBean getSqlSessionFactoryBean(@Autowired DataSource dataSource){
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
ssfb.setTypeAliasesPackage("cn.yl.domain");
ssfb.setDataSource(dataSource);
// 增加 引入分页插件 Pagehelper
Interceptor interceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("helperDialect","mysql");
properties.setProperty("reasonable","true");
interceptor.setProperties(properties);
ssfb.setPlugins(new Interceptor[]{interceptor});
return ssfb;
}
// 定义MyBatis的映射扫描
@Bean
public MapperScannerConfigurer getMapperScannerConfigurer(){
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("cn.yl.dao");
return msc;
}
}
配置SpringConfig
@Configuration
@ComponentScan(value="cn.yl" ,excludeFilters =
@ComponentScan.Filter(type= FilterType.ANNOTATION,classes = {Controller.class}))
@PropertySource("classpath:jdbc.properties")
@EnableTransactionManagement()
@Import({MyBatisConfig.class,JdbcConfig.class})
public class SpringConfig {
@Bean("transactionManager")
public DataSourceTransactionManager getTxManager(@Autowired DataSource dataSource){
DataSourceTransactionManager tm = new DataSourceTransactionManager();
tm.setDataSource(dataSource);
return tm;
}
}
配置Sprig-mvc.xml
@Configuration 配置类
@Configuration
@ComponentScan("cn.yl.controller")
@EnableWebMvc
public class SpringMvcConfig {
}
工具类
代码格式固定 其中SpringMvcConfig与SpringConfig二者互相依赖
/*
* 中文编码 前端控制器拦截所有请求
* */
public class ServketContainershitConfig extends AbstractDispatcherServletInitializer {
//创建servlet应用上下文环境 使用注解的方式加载SpringMVC配置类中的信息,并加载成WEB专用的Application对象
//该对象放入了ServletContext范围,后期在整个WEb容器中可以随时调用
@Override
protected WebApplicationContext createServletApplicationContext() {
//创建注解配置web应用上下文环境
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
//将SpringMVC配置类注册到web应 用上下文环境
ctx.register(SpringMvcConfig.class);
return ctx;
}
//设置拦截所有路径请求
//代替:DispatcherServlet配置
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected WebApplicationContext createRootApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
//将SpringMVC配置类注册到web应 用上下文环境
ctx.register(SpringConfig.class);
return ctx;
}
//中文乱码处理 使用filter过滤器实现
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
FilterRegistration.Dynamic registration = servletContext.addFilter("characterEncodingFilter", characterEncodingFilter);
registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST,DispatcherType.FORWARD,DispatcherType.INCLUDE),false,"/*");
}
}