文章目录
概念介绍
SSM:Spring+SpringMVC+MyBatis
SpringMVC负责MVC设计模式的实现,MyBatis负责数据持久层,Spring的IOC来管理SpringMVC和MyBatis相关对象的创建注入,Spring的AOP负责事务管理;
SSM整合Spring的作用:
- 通过Spring管理持久层mapper(dao层接口);
- 通过Spring管理service层,service层调用dao层,事务管理;
- 通过Spring管理展示层,Controller,Controller调用service层;
以下是一个SSM整合框架的实现思路:
- 整合dao层:MyBatis和Spring整合,通过Spring管理接口,使用Mapper接口扫自动扫描mapper接口在Spring中注册;
- 整合service层:通过Spring管理service层接口,是使用配置方法将service接口配置在Spring的文件中;
- 整合SpringMVC:SpringMVC本来就是Spring的一部分,不需要整合;
实现步骤
- 导入依赖;
- 创建对应的bean类、dao层接口、service对应的类、Controller层对应的类;
- 创建Mapper的配置文件、创建MyBatis的配置文件、创建Spring、SpringMVC的配置文件,创建JSP显示页面文件、配置web.xml文件;
- 部署项目到服务器;
- 使用;
整个目录结构如下:
一、导入依赖
<!--Spring 基本核心jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!--SpringMVC相关-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!--jdbc相关的包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.2.8.RELEASE</version>
</dependency>
<!--加入jstl包-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--mybatis的依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--mysql的依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<!--打印日志 打印sql语句-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<!--AOP相关jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<!--c3p0连接池-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!--mybatis和spring整合包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
二、创建对应的类;
目录结构如下:
数据库表如下:
bean类:
public class Student {
private int SID;
private String Sname;
private String Ssex;
private int Age;
//get、set、toString方法略
}
dao层接口
public interface StudentMapper {
@Select("select * from Student")
public List<Student> getStudentBean(); //根据给定id查找并返回对象
}
service层对应的类
@Service
public class StudentService {
@Autowired
private StudentMapper studentMapper;
public List<Student> getAllStudent() {
return studentMapper.getStudentBean();
}
}
Controller层对应的类
@Controller
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping("/springmvc2")
public ModelAndView getStudentList(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
//查询
List<Student> list = studentService.getAllStudent();
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("students",list);
//逻辑视图名
modelAndView.setViewName("jsp1");
return modelAndView;
}
}
三、创建对应的文件
对应的目录结构如下:
创建Mapper的配置文件
StudentMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tulun3.dao.StudentMapper">
<!--下面注释的语句和StudentMapper接口中的注解语句二留其一-->
<!--<select id="getStudentBean" resultType="com.tulun3.bean.Student">
select * from Student
</select>-->
</mapper>
创建MyBatis的配置文件
mybatis.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>
<!--数据源 和spring整合后交给spring管理-->
<!--mapper映射 整合放在spring的配置文件中-->
<mappers>
<mapper resource="ssm整合/StudentMapper.xml"/>
</mappers>
</configuration>
创建Spring的配置文件
spring.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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--配置数据源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springmvc?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<!--配置会话工厂-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入数据源-->
<property name="dataSource" ref="dataSource"/>
<!--注入mybatis的配置xml文件-->
<property name="configLocation" value="classpath:ssm整合/mybatis.xml"/>
<!--注入mapper映射,这个我放mybatis的配置为文件里面去了,所以就不需要下面这个了
两个位置只需要一个位置有就好了-->
<!--<property name="mapperLocations" value="classpath:ssm整合/*Mapper.xml"/>-->
</bean>
<!--配置代理对象-->
<bean class="org.mybatis.spring.mapper.MapperFactoryBean">
<!--注入接口-->
<property name="mapperInterface" value="com.tulun3.dao.StudentMapper"/>
<!--注入会话工厂-->
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<!--开启注解扫描-->
<context:component-scan base-package="com.tulun3"/>
</beans>
SpringMVC的配置文件
springmvc4.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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 注解扫描 -->
<context:component-scan base-package="com.tulun3.controller"/>
<!--自动扫描mvc相关的注解 适配器、映射器等,都有相关的默认配置-->
<mvc:annotation-driven/>
<!--视图处理器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置jsp的视图解析类-->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 后缀 -->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
创建JSP显示页面文件
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户列表</title>
</head>
<body>
<table width="80%" border="1" align="center">
<h1 align="center">用户列表</h1>
<tr>
<%--<td>选择</td>--%>
<td>编号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
</tr>
<%-- students 要与后台保持一致--%>
<c:forEach items="${students }" var="student">
<tr>
<td>${student.SID }</td>
<td>${student.sname} </td>
<td>${student.ssex }</td>
<td>${student.sage }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>springmvc</display-name>
<!--配置加载spring.xml文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:ssm整合/spring.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--配置前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--初始化用的-->
<init-param>
<!--contextConfigLocation 配置处理器映射器、处理器适配器,如果不写的话,
默认在当前的web的同级目录添加web-INF/servler名称(就是外层的servlet-name对应的值)-servlet.xml-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:ssm整合/springmvc4.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
四、部署项目
前面文章写过,不在赘述,地址→https://blog.csdn.net/QQ2899349953/article/details/85397967
五、使用
启动项目,本地访问http://localhost:8080/student/springmvc2即可;
无法创建对象错误
我的错误是在启动项目的时候,一直报错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'studentController': Injection of autowired dependencies failed; nested exception is ......
我搜博客,给的解决办法是说什么注解写错了或没写、配置路径写错了、依赖包导入少了之类的,但我检查之后发现我的注解、配置、依赖都没有问题,问题出在mybatis的配置文件的约束上面,约束错了,就是mybatis.xml最前面的那几行网址错了:
所以结合博客,如果发现自己的项目启动之后报这个错误,无法创建bean,无法注入属性之类的,解决办法如下:
- 检查对应的注解是否写了,是否写正确;
- 检查配置文件路径是否写对;
- 检查对应文件的约束是否正确(如果1、2都正确,一般就是这个的问题,比较隐蔽);
- 检查依赖包是否导全了(一般不会是因为这个的问题);