文章目录
- 1、什么是SSM框架
-
- 1.1、持久层
- 1.2、业务层
- 1.3、表现层
- 1.4、View层
- 1.5、SpringMVC执行流程
- 1.6、MyBatis
- 2、SSM实战搭建
-
- 2.1、创建工程
- 2.2、添加依赖
- 2.3、配置spring.xml文件
- 2.4、配置web.xml文件
- 2.5、log4j.properties
- 2.6、准备表
- 2.7、实体类
- 2.8、mapper
- 2.9、service
- 2.10、controller
- 2.11、前端页面
-
- 1、index.html
- 2、addUser.jsp
- 3、queryUser.jsp
- 4、success.jsp和fail.jsp
- 2.12、项目结构
- 2.13、部署
-
- 1、tomcat准备
- 2、IDEA配置Tomcat
- 3、运行
- 4、Tomcat乱码问题
1、什么是SSM框架
- SSM框架是Spring、Spring MVC 和MyBatis框架的整合,是标准的MVC模式
- 标准的SSM框架有四层,分别是dao层(mapper),service层,controller层和View层
- 使用spring实现业务对象管理,使用spring MVC负责请求的转发和视图管理,mybatis作为数据对象的持久化引擎
1.1、持久层
持久层,也就是我们常说的dao层或者mapper层
作用:主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此
- Dao层首先设计的是接口,然后再Spring的配置文件中定义接口的实现类
- 然后可以在模块中进行接口的调用来进行数据业务的处理(不在关心接口的实现类是哪个类)
- 数据源的配置以及有关数据库连接的参数都在Spring的配置文件中进行配置
1.2、业务层
业务层,也就是我们常说的service层
作用:Service层主要负责业务模块的逻辑应用设计
- 先设计接口然后再设计实类,然后再在Spring的配置文件中配置其实现的关联
- 业务逻辑层的实现具体要调用到自己已经定义好的Dao的接口上,这样就可以在应用中调用Service接口来进行业务处理
- 建立好Dao之后再建立service层,service层又要在controller层之下,因为既要调用Dao层的接口又要提供接口给controller层,每个模型都有一个service接口,每个接口分别封装各自的业务处理的方法
1.3、表现层
表现层,也就是我们常说的Controller层
作用:负责具体的业务模块流程的控制
- 配置也同样是在Spring的配置文件里面进行
- 调用Service层提供的接口来控制业务流程
- 业务流程的不同会有不同的控制器,在具体的开发中可以将我们的流程进行抽象的归纳,设计出可以重复利用的子单元流程模块
1.4、View层
作用:主要和控制层紧密结合,主要负责前台jsp页面的表示
各层之间的关系:
1.5、SpringMVC执行流程
复杂版:
1、 用户发送请求至前端控制器DispatcherServlet
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器
3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
4、 DispatcherServlet调用HandlerAdapter处理器适配器
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)
6、 Controller执行完成返回ModelAndView
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、 ViewReslover解析后返回具体View
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)
11、 DispatcherServlet响应用户
简单版:
1.客户端发送请求到DispacherServlet(分发器)
2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller
3.Controller调用业务逻辑处理后,返回ModelAndView
4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图
5.视图负责将结果显示到客户端
1.6、MyBatis
- MyBatis是对jdbc的封装,它让数据库底层操作变的透明
- MyBatis的操作都是围绕一个SqlSessionFactory实例展开的
- MyBatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射
- 在每次与数据库交互时,通过SqlSessionFactory拿到一个SqlSession,再执行sql命令
- 所以,MyBatis的核心是SqlSession
2、SSM实战搭建
搭建思路如下:
2.1、创建工程
新建完成后工程目录结构如下:
然后替换web.xml中的内容如下:
web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
web-app>
2.2、添加依赖
在pom.xml中添加依赖,如下:
project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
modelVersion>4.0.0modelVersion>
groupId>cn.itsourcegroupId>
artifactId>SSMTestartifactId>
version>1.0-SNAPSHOTversion>
packaging>warpackaging>
name>SSMTest Maven Webappname>
properties>
project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
maven.compiler.source>1.8maven.compiler.source>
maven.compiler.target>1.8maven.compiler.target>
properties>
dependencies>
dependency>
groupId>org.springframeworkgroupId>
artifactId>spring-webmvcartifactId>
version>5.2.15.RELEASEversion>
dependency>
dependency>
groupId>org.mybatisgroupId>
artifactId>mybatisartifactId>
version>3.5.6version>
dependency>
dependency>
groupId>org.mybatisgroupId>
artifactId>mybatis-springartifactId>
version>2.0.6version>
dependency>
dependency>
groupId>mysqlgroupId>
artifactId>mysql-connector-javaartifactId>
version>8.0.28version>
dependency>
dependency>
groupId>com.alibabagroupId>
artifactId>druidartifactId>
version>1.2.1version>
dependency>
dependency>
groupId>org.projectlombokgroupId>
artifactId>lombokartifactId>
version>1.18.24version>
dependency>
dependency>
groupId>com.fasterxml.jackson.coregroupId>
artifactId>jackson-databindartifactId>
version>2.13.2.2version>
dependency>
dependency>
groupId>javax.servletgroupId>
artifactId>javax.servlet-apiartifactId>
version>4.0.1version>
dependency>
dependency>
groupId>org.springframeworkgroupId>
artifactId>spring-jdbcartifactId>
version>5.2.15.RELEASEversion>
dependency>
dependency>
groupId>log4jgroupId>
artifactId>log4jartifactId>
version>1.2.17version>
dependency>
dependency>
groupId>org.slf4jgroupId>
artifactId>slf4j-log4j12artifactId>
version>1.7.30version>
dependency>
dependencies>
project>
2.3、配置spring.xml文件
在main目录下,新建java和resources目录,如下:(如果有就不需要新建了)
然后在resources目录下新建spring.xml,内容如下:
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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
context:component-scan base-package="cn.itsource" />
bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
property name="prefix" value="/WEB-INF/jsp/" />
property name="suffix" value=".jsp" />
bean>
mvc:default-servlet-handler />
mvc:annotation-driven />
bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
property name="url" value="jdbc:mysql://localhost:3306/ssmtest?serverTimezone=Asia/Shanghai"/>
property name="username" value="root"/>
property name="password" value="123456"/>
property name="minIdle" value="5"/>
property name="initialSize" value="5"/>
property name="maxActive" value="10"/>
property name="maxWait" value="3000"/>
bean>
bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
property name="dataSource" ref="dataSource" />
property name="mapperLocations" value="classpath:mapper/*.xml" />
bean>
bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
property name="basePackage" value="cn.itsource.dao" />
bean>
beans>
2.4、配置web.xml文件
web.xml内容如下:
web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
servlet>
servlet-name>springservlet-name>
servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
init-param>
param-name>contextConfigLocationparam-name>
param-value>classpath:spring.xmlparam-value>
init-param>
servlet>
servlet-mapping>
servlet-name>springservlet-name>
url-pattern>/url-pattern>
servlet-mapping>
filter>
filter-name>CharacterEncodingFilterfilter-name>
filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
init-param>
param-name>encodingparam-name>
param-value>utf-8param-value>
init-param>
init-param>
param-name>forceRequestEncodingparam-name>
param-value>trueparam-value>
init-param>
init-param>
param-name>forceResponseEncodingparam-name>
param-value>trueparam-value>
init-param>
filter>
filter-mapping>
filter-name>CharacterEncodingFilterfilter-name>
url-pattern>/*url-pattern>
filter-mapping>
web-app>
2.5、log4j.properties
在resources目录下新建log4j.properties文件,内容如下:
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
2.6、准备表
在本地MySQL服务器中新建数据库【ssmtest】,然后新建表【t_user】,建表语句如下:
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`username` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
`sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',
`age` int(3) NULL DEFAULT NULL COMMENT '年龄',
`intro` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '个人简介',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_user_username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC;
2.7、实体类
package cn.itsource.entity;
import lombok.Data;
/**
* 用户信息表对应实体类
*
* @author 波波老师(微信 : javabobo0513)
*/
@Data
public class User {
private Long id;
private String username;
private String sex;
private Integer age;
private String intro;
}
2.8、mapper
在dao包下新建UserMapper类,代码:
package cn.itsource.dao;
import cn.itsource.entity.User;
import java.util.List;
/**
* UserMapper
*
* @author 波波老师(微信 : javabobo0513)
*/
public interface UserMapper {
//保存用户信息到数据库
int saveUser(User user);
//查询数据库中所有用户信息
ListUser> selectAllUser();
}
在resources下的mapper文件夹中新建UserMapper.xml文件,代码如下:
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
mapper namespace="cn.itsource.dao.UserMapper">
insert id="saveUser">
insert into t_user(username, sex, age, intro) values (#{username}, #{sex}, #{age}, #{intro})
insert>
select id="selectAllUser" resultType="cn.itsource.entity.User">
select id, username, sex, age, intro from t_user order by id desc
select>
mapper>
2.9、service
在service包下新建UserService类:代码如下:
package cn.itsource.service;
import cn.itsource.entity.User;
import java.util.List;
/**
* UserService
*
* @author 波波老师(微信 : javabobo0513)
*/
public interface UserService {
//保存用户信息到数据库
int saveUser(User user);
//查询数据库中所有用户信息
ListUser> selectAllUser();
}
然后在service包下新建impl包,其下新建UserServiceImpl类,代码如下:
package cn.itsource.service.impl;
import cn.itsource.dao.UserMapper;
import cn.itsource.entity.User;
import cn.itsource.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* UserServiceImpl
*
* @author 波波老师(微信 : javabobo0513)
*/
@Service
public class UserServiceImpl implements UserService {
//注入 UserMapper 对象
@Resource
private UserMapper userMapper;
@Override
public int saveUser(User user) {
return userMapper.saveUser(user);
}
@Override
public ListUser> selectAllUser() {
return userMapper.selectAllUser();
}
}
2.10、controller
在controller包下新建UserController类,代码如下:
package cn.itsource.controller;
import cn.itsource.entity.User;
import cn.itsource.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import java.util.List;
/**
* UserController
*
* @author 波波老师(微信 : javabobo0513)
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
/**
* 新增用户
* @param user
* @return
*/
@PostMapping("/saveUser")
public ModelAndView saveUser(User user){
ModelAndView mv = new ModelAndView();
int saveCount = userService.saveUser(user);
if(saveCount > 0){
mv.addObject("msg", "新增用户成功");
mv.setViewName("success");
}else{
mv.addObject("msg", "新增用户失败");
mv.setViewName("fail");
}
return mv;
}
/**
* 查询所有用户信息
* @param user
* @return
*/
@GetMapping("/selectAllUser")
public ListUser> selectAllUser(User user){
ListUser> userList = userService.selectAllUser();
return userList;
}
}
2.11、前端页面
1、index.html
首先改造webapp目录下的index.html文件,内容如下:
SSM实战案例
SSM整合小案例
注册用户
查询用户
效果如下:
2、addUser.jsp
在webapp目录下新建文件addUser.jsp,用来新增用户,代码如下:
注册用户
注册用户
效果如下:
3、queryUser.jsp
在webapp目录下新建文件queryUser.jsp,用来查询所有用户,代码如下:
查询学生
--%>
用户列表
id
姓名
年龄
性别
简介
效果如下:
4、success.jsp和fail.jsp
在webapp – WEB-INF目录下新建success.jsp和fail.jsp文件,内容分别如下:
success.jsp:
success
结果:${msg}
效果:
fail.jsp:
fail
结果:${msg}
2.12、项目结构
目前项目结构如下:
2.13、部署
1、tomcat准备
本地部署到tomcat,首先需要你本地有tomcat服务器,下载地址:
链接:https://pan.baidu.com/s/1VpRboSME8R64yhXE4MwxiA
提取码:nr43
下载下来后,直接解压即可,如下:
我这里使用的tomcat版本是:8.5.75
2、IDEA配置Tomcat
按照下面步骤一步一步做就可以在IDEA中配置好tomcat了
然后开始部署:
然后:
就成这样了:
3、运行
启动成功后,会自动打开页面,如下:
到此,我们的SSM项目就部署完毕,可以正常使用了
4、Tomcat乱码问题
上面我们可以看到,Tomcat启动后,控制台打印的日志出现了乱码,按照下面方式做即可
打开tomcat安装目录下conf下的logging.properties文件:
将该配置文件中的UTF-8全部改成GBK
然后再重启一下Tomcat,就会发现已经没有乱码了:
如果按照上面设置后还没有好的话,就继续设置:
查看下IDEA的字集是不是UTF-8,确认一下,不是的话,改成UTF-8:
打开IDEA的安装目录下的bin目录,打开里面的idea64.exe.vmoptions文件:
添加内容:
-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8