整合思路
由于SpringMVC是Spring框架中的一个模块,SSM框架的整合只涉及Spring与MyBatis的整合及Spring MVC与MyBatis的整合。如下图所示
整合环境
SSM框架整合需要使用Spring、SpringMVC、Mybaits依赖的jar包。项目创建后,需要将这些jar导入。如果是maven工程,只需在pom文件中添加以下依赖包,具体内容如下:
<!--spring核心依赖包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.5.RELEASE</version>
<scope>test</scope>
</dependency>
<!--spring AOP-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
<scope>runtime</scope>
</dependency>
<!--spring 的事物管理-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<!--第三方数据源依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.5.0</version>
</dependency>
<!-- mybatis与spring整合的jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!--spring管理的 jdbc ,以及事务相关的-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.17.RELEASE</version>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!--mySQL数据库连接依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!--springmvc依赖包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!--json与java对象转换依赖包-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.8</version>
</dependency>
<!--文件上传与下载依赖包-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
项目结构
配置文件
SSM配置文件包括数据库配置、Spring配置、mybaits配置、spring-mvc配置、日志配置及web.xml配置等。
数据库连接配置(db.properties):
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://xx.xx.xxx.xxx:3306/sl?serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=xxxxxx
jdbc.maxTotal=30
jdbc.maxIdle=10
jdbc.initialSize=5
日志配置(log4j.properties):
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.bjwl=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
applicationContext.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 开启扫描 -->
<context:annotation-config/>
<!--读取db.properties -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置数据源 -->
<bean id="dataSource"
class="org.apache.commons.dbcp2.BasicDataSource">
<!--数据库驱动 -->
<property name="driverClassName" value="${jdbc.driver}"/>
<!--连接数据库的url -->
<property name="url" value="${jdbc.url}"/>
<!--连接数据库的用户名 -->
<property name="username" value="${jdbc.username}"/>
<!--连接数据库的密码 -->
<property name="password" value="${jdbc.password}"/>
<!--最大连接数 -->
<property name="maxTotal" value="${jdbc.maxTotal}"/>
<!--最大空闲连接 -->
<property name="maxIdle" value="${jdbc.maxIdle}"/>
<!--初始化连接数 -->
<property name="initialSize" value="${jdbc.initialSize}"/>
</bean>
<!-- 事务管理器,依赖于数据源 -->
<bean id="transactionManager" class=
"org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置MyBatis工厂 -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入数据源 -->
<property name="dataSource" ref="dataSource"/>
<!--指定核心配置文件位置 -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!-- Mapper代理开发(基于MapperScannerConfigurer) -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.bjwl.dao"/>
</bean>
<!--自动扫描-->
<context:component-scan base-package="com.bjwl.**"/>
</beans>
springmvc.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 指定需要扫描的包 -->
<context:component-scan base-package="com.bjwl.controller" />
<!-- 配置注解驱动 -->
<mvc:annotation-driven />
<!--配置静态资源的访问映射,此配置中的文件,将不被前端控制器拦截 -->
<mvc:resources location="/js/" mapping="/js/**" />
<!-- 定义视图解析器 -->
<bean id="viewResolver" class=
"org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 设置前缀 -->
<property name="prefix" value="/" />
<!-- 设置后缀 -->
<property name="suffix" value=".jsp" />
</bean>
<!-- 配置文件上传解析器 MultipartResolver -->
<bean id="multipartResolver" class=
"org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置请求编码格式-->
<property name="defaultEncoding" value="UTF-8" />
</bean>
</beans>
myBatis-config.xml配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置Mapper的位置 -->
<mappers>
<mapper resource="mapper/UserDao.xml"/>
</mappers>
</configuration>
测试代码
pojo目录下实体类代码
public class UserEntity {
private Integer id;
private String username;
private String address;
//省略get set方法
}
dao目录下代码
@Mapper
public interface UserDao {
List<UserEntity> getAll();
UserEntity findUserById(Integer id);
int addUser(UserEntity user);
int updateData(UserEntity user);
int deleteData(Integer id);
}
不要忘了@Mapper或@Repository注解符
services目录下,服务接口与实现
public interface UserService {
List<UserEntity> getAll();
UserEntity getUserById(int id);
int save(UserEntity userEntity);
int remove(int id);
}
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public List<UserEntity> getAll() {
return userDao.getAll();
}
@Override
public UserEntity getUserById(int id) {
return userDao.findUserById(id);
}
@Override
public int save(UserEntity userEntity) {
int num=0;
if (userEntity.getId() == null) {
num = userDao.addUser(userEntity);
} else {
num = userDao.updateData(userEntity);
}
return num;
}
@Override
public int remove(int id) {
return userDao.deleteData(id);
}
}
不要忘了在具体的实现类上加注解符@Service
controller目录下写控制类
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/list")
public List<UserEntity> getAll(){
return userService.getAll();
}
@RequestMapping("/getUserById")
public UserEntity getUserById(Integer id){
return userService.getUserById(id);
}
@RequestMapping("/save")
public Map saveData(@RequestBody UserEntity userEntity ){
Map<String,String> map = new HashMap<>();
int num= userService.save(userEntity);
System.out.println("保存数据返回参数!");
if(num>-1) {
map.put("msg", "保存成功!");
}else{
map.put("msg", "保存失败!");
}
return map;
}
@RequestMapping("/delete")
public Map delData(Integer id){
Map<String,String> map = new HashMap<>();
int num= userService.remove(id);
if(num>-1) {
map.put("msg", "删除成功!");
}else{
map.put("msg", "删除失败!");
}
return map;
}
}
全部返回json数据,注意注解赋@RestController、@RequestMapping、@RequestBody的使用
使用postman进行测试: