SSM:Spring+SpringMVC+MyBatis。
SSM框架组合已经是现在最热门的后端框架组合了。本篇我要说的就是使用纯注解整合这三大框架。当然了SpringMVC本身就是spring的一部分。也谈不上整合。所以SSM有时我叫SM。(其实不用在意叫法,好听就行)。
当然了我们都知道现在有SpringBoot可以轻松完成这些框架整合配置。所以这篇文章是给学习中的学子们准备的,已经熟练使用SpringBoot的大佬请绕行。
tips:后面有源码下载地址。
首先我们要有明确的整合思路,所谓SSM整合其实就是将MyBatis整合到Spring中。这时就要考虑MyBatis中都有什么要整的呢??
经过考虑,整体思路大概如下:
打开你的idea,配置好Maven,创建新的项目,创建好需要的目录和包。像下面的截图一样。
打开POM文件,添加下面的配置
版本锁定的部分,我这里使用的spring5.2.6 你是啥打算呢?
<!-- 版本锁定 -->
<properties>
<!-- spring版本 -->
<spring.version>5.2.6.RELEASE</spring.version>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
</properties>
添加依赖:
<dependencies>
<!-- spring框架的jar -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mysql驱动 5.1.47 -->
<!-- 如果你的数据库是MySQL8 请更换对应的版本 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- MyBatisjar -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!-- MyBatis和spring整合的第三方jar文件 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<!-- 这里的scope必须是 provided -->
<scope>provided</scope>
</dependency>
<!-- 处理JSON的jar文件 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
</dependencies>
再来个插件吧:
<build>
<!-- 配置将main/java下的资源文件也打包 -->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.*</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.*</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<!-- tomcat插件控制 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
<!-- maven插件控制 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
添加一个RootConfig配置,这个配置类主要用来创建根容器。
这个类就相当使用XML配置文件整合时的spring的配置文件applicationContext.xml
package com.qidian.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
/**
* @author 戴着假发的程序员
* 相当于spring的配置文件
*/
@Configuration
// 配置service的扫描包
@ComponentScans({
@ComponentScan("com.qidian.service")
})
// 这个配置用来扫描加载所有的mapper接口和xml文件。
// 当然也可以使用@Bean的方式注入一个扫描器MapperScannerConfigurer来扫描
@MapperScan("com.qidian.mapper")
// 加载数据库连接的配置的资源文件
@PropertySource("classpath:db.properties")
public class RootConfig {
@Value("${jdbc.driver}")
private String driverClass;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
// 配置数据源
@Bean
public DataSource dataSource(){
// druid数据源
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setPassword(password);
dataSource.setUsername(username);
dataSource.setUrl(url);
return dataSource;
}
// 注入SqlSessionFactoryBean
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(){
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource());
// 实体类别名包
bean.setTypeAliasesPackage("com.qidian.bank.pojo");
return bean;
}
// 注入事务管理器
@Bean
public TransactionManager transactionManager(){
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(dataSource());
return transactionManager;
}
}
添加配置类WebConfig
这个类可以继承WebMvcConfigurer,可以通过父类的API添加视图解析器,静态资源映射,拦截器等等。
这个配置主要用来配置web相关的内容,扫描controller等。
package com.qidian.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author 戴着假发的程序员
*/
@Configuration
// 扫描所有的controller
@ComponentScan("com.qidian.controller")
// 添加SpringMVC相关配置
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 静态资源的映射
registry.addResourceHandler("/**/*.html").addResourceLocations("/");
registry.addResourceHandler("/**/*.css").addResourceLocations("/");
registry.addResourceHandler("/**/*.js").addResourceLocations("/");
registry.addResourceHandler("/**/*.png").addResourceLocations("/");
registry.addResourceHandler("/**/*.jpg").addResourceLocations("/");
registry.addResourceHandler("/lib/**/*.*").addResourceLocations("/lib/");
registry.addResourceHandler("/**/*.json").addResourceLocations("/");
}
}
当然不要忘记在resources中添加db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/bank?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=
看看现在情况呢:
以下简称RootWebApplicationContext为:RootContext,DispatcherServletWebApplicationContext为:DispatcherServletContext。
WebApplicationContext扩展了ApplicationContext,代表的Spring Web的应用上下文,RootContext由ContextLoaderListener创建,其中存放了各种注册到Spring的非Web组件的bean(比如service)。RootContext初始化完成后将其存储到ServletContext中,便于获取。在源码中你可以看到这样的代码:servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);
接着是DispatcherServletContext的初始化,它会以RootContext为父上下文(在DispatcherServletContext中可以引用RootContext中的非web组件,而反过来不行。),然后初始化Web相关组件,比如控制器,视图解析器等。DispatcherServletContext初始化完毕后将自身存入ServletContext.
WebApplicationContext和DispatcherServlet上下文初始化方式
在主包中添加一个初始化Web环境的类:
package com.qidian;
import com.qidian.config.RootConfig;
import com.qidian.config.WebConfig;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
/**
* @author 戴着假发的程序员
*/
public class BankContextInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
// 根容器配置类
return new Class[]{RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
// web容器配置类
return new Class[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
// 拦截的路径
return new String[]{"/*","*.action"};
}
}
看看这个类的位置:
浏览器访问:
源码下载地址:https://gitee.com/win-dk/SSM-annotation-demo
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/q2780004063/article/details/123148949
内容来源于网络,如有侵权,请联系作者删除!