1.首先创建一个mavenWEB工程
2.在pom.xml文件中导入相关的依赖
我的包结构如下:
config包: 配置spring与Mybatis整合的包
controller: 放置控制层
mapper:放置数据层类
service: 放置业务层
servletConfig: SSM整合类所在的包
1.首先Mybatis与spring进行整合
spring核心配置类如下(如果不懂这些注解的含义可以去看我前面写的一篇介绍这些注解的博客):
//指定此类为一个spring的配置类(相当于applicationContext.xml文件)
@Configuration
//扫描spring要管理的包,我这里管理的是数据层和业务层
@ComponentScan({"com.java.webmvc.mapper", "com.java.webmvc.service"})
//将MybatisConfig这个类中被@Bean修饰的工厂方法所返回的对象交给spring管理
@Import(MybatisConfig.class)
public class SpringConfig {
}
MybatisConfig配置类如下,主要的作用是通过@Bean注解将工厂方法所返回的对象交给spring的容器进行管理:
public class MybatisConfig {
@Bean
public DataSource getDataSource(){
//我这里用的数据库连接池的jar包为dbcp2,该连接池的核心类为BasicDataSource,你们也可以
//自由指定想要的数据库连接池(比如Druid,这里就要将BasicDataSource核心类换成Druid的
//核心类)
BasicDataSource basicDataSource = new BasicDataSource();
//设置一些基本的信息,比如数据库的用户名和密码等等
basicDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
basicDataSource.setUrl("jdbc:mysql://localhost:3306/java_servlet");
basicDataSource.setUsername("root");
basicDataSource.setPassword("root");
return basicDataSource;
}
//如果在工厂方法中想要spring中管理的对象,直接在工厂方法中的参数中进行指定即可
@Bean
public SqlSessionFactoryBean getFactoryBean(DataSource dataSource){
//通过SqlSessionFactoryBean对象将SqlSession的创建过程交给spring来管理
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
//指定SqlSession对象所依赖的数据源,直接指定为上面的数据源即可
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean;
}
//指定数据层所在的包
@Bean
public MapperScannerConfigurer getMapperScanner(){
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("com.java.webmvc.mapper");
return mapperScannerConfigurer;
}
}
到这里spring与Mybatis的整合就完成了.
2.书写spingMVC的配置类
//与spring的配置类几乎一样,只是我们将控制层的包交给springMVC来进行管理
@Configuration
@ComponentScan({"com.java.webmvc.controller"})
public class SpringMvcConfig {
}
3.将SSM进行整合
由于前面我们已经将spring与Mybatis进行了整合,所以其实我们现在只要将spring的配置类和springMVC的配置类进行整合即可.
//让SSM的整合类继承 AbstractAnnotationConfigDispatcherServletInitializer 这个类
public class ServletInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
//指定spring的核心配置类
@Override
protected Class<?>[] getRootConfigClasses() {
//要指定配置类的字节码对象
return new Class[]{SpringConfig.class};
}
//指定springMVC的核心配置类
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
//指定springMVC要管理的路径,"/"代表全归springMVC进行管理
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
到这里,SSM的整合就已经完成了,对比以前的要书写配置文件的整合方式,这种依靠注解进行整合的方式大大的简化了我们的操作.
测试:
在mapper包中新建了一个GoodsMapper接口用来根据ID查询商品信息:
@Repository
public interface GoodsMapper {
@Select("select * from goods where id=#{0}")
Map<String, Object> getGoodsById(Long id);
}
这里为了方便直接在controller层访问数据层
@Controller
public class TestController {
@Autowired
private GoodsMapper goodsMapper;
@RequestMapping("/test")
@ResponseBody
public Map<String, Object> test(){
return goodsMapper.getGoodsById(1L);
}
}
访问/test这个路径,结果:
可以看到,到这里已经整合成功了,感谢您的阅读!!