项目目录
与xml版区别在于下图三个文件
WebAppInitializer.java 对应文件web.xml
WebConfig.java 对应文件dispatcher-servlet.xml
RootConfig.java 对应文件 applicationContext.xml
其他文件都一致
package config; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{ @Override protected Class<?>[] getRootConfigClasses() { // TODO Auto-generated method stub return new Class<?>[] {RootConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { // TODO Auto-generated method stub return new Class<?>[] {WebConfig.class}; } @Override protected String[] getServletMappings() { // TODO Auto-generated method stub return new String[] {"/"}; } }
package config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Service; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration @ComponentScan(value="com.*",includeFilters= {@Filter(type=FilterType.ANNOTATION,value= {Controller.class})}) @EnableWebMvc public class WebConfig { @Bean(name="internalResourceViewResolver") public ViewResolver initViewResolver() { InternalResourceViewResolver viewResolver=new InternalResourceViewResolver(); viewResolver.setPrefix("/jsp/"); viewResolver.setSuffix(".jsp"); return viewResolver; } }
package config; import java.util.Properties; import javax.sql.DataSource; import org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.mapper.MapperScannerConfigurer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.TransactionManagementConfigurer; @Configuration @ComponentScan(value="com.*",includeFilters= {@Filter(type=FilterType.ANNOTATION,value= {Service.class})}) @EnableTransactionManagement public class RootConfig implements TransactionManagementConfigurer { private DataSource dataSource=null; @Bean(name="dataSource") public DataSource initDataSource() { if(dataSource!=null) return dataSource; Properties props=new Properties(); props.setProperty("driverClassName", "com.mysql.jdbc.Driver"); props.setProperty("url", "jdbc:mysql://localhost:3306/test?allowPublicKeyRetrieval=true"); props.setProperty("username", "root"); props.setProperty("password", "admin"); props.setProperty("maxActive", "200"); props.setProperty("maxIdle", "20"); props.setProperty("maxWait", "30000"); try { dataSource=BasicDataSourceFactory.createDataSource(props); }catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return dataSource; } @Bean(name="sqlSessionFactory") public SqlSessionFactoryBean initSqlSessionFactory() { SqlSessionFactoryBean sqlSessionFactory=new SqlSessionFactoryBean(); sqlSessionFactory.setDataSource(initDataSource()); Resource resource=new ClassPathResource("mybatis/mybatis-config.xml"); sqlSessionFactory.setConfigLocation(resource); return sqlSessionFactory; } @Bean public MapperScannerConfigurer initMapperScannerConfigurer() { MapperScannerConfigurer msc=new MapperScannerConfigurer(); msc.setBasePackage("com.*"); msc.setSqlSessionFactoryBeanName("sqlSessionFactory"); msc.setAnnotationClass(Repository.class); return msc; } @Override @Bean(name="annotationDrivenTransactionManager") public PlatformTransactionManager annotationDrivenTransactionManager() { // TODO Auto-generated method stub DataSourceTransactionManager transactionManager=new DataSourceTransactionManager(); transactionManager.setDataSource(initDataSource()); return transactionManager; } }
注意事项如下:
Demo中 数据库的账号密码 改为自己的,然后创建 test 数据库 再创建 test 表,或者改相应文件中的 数据库名和表名, mybatis 配置文件中用到的实体的字段应和数据库表中的字段保持一致,数据类型保持一致
相对来说,注解配置更易于理解,项目结构更清晰,更简洁。
其他的参考 基于eclipse 的 ssm(spring+springmvc+mybatis)项目搭建 -xml版
链接:https://pan.baidu.com/s/1mRxmgsLIPq7093U4sp0Cug
提取码:m9gi