0


SSM项目搭建保姆级教程

文章目录

1、什么是SSM框架

  1. SSM框架是Spring、Spring MVC 和MyBatis框架的整合,是标准的MVC模式
  2. 标准的SSM框架有四层,分别是dao层(mapper),service层,controller层和View层
  3. 使用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页面的表示

各层之间的关系:

image-20221228114700648

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实战搭建

搭建思路如下:

image-20221229085956979

2.1、创建工程

image-20221228123037107

image-20221228123137046

image-20221228123228941

新建完成后工程目录结构如下:

image-20221228123430878

然后替换web.xml中的内容如下:

<?xml version="1.0" encoding="UTF-8"?><web-appxmlns="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中添加依赖,如下:

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="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.0</modelVersion><groupId>cn.itsource</groupId><artifactId>SSMTest</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>SSMTest Maven Webapp</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><!--spring-webmvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.15.RELEASE</version></dependency><!--mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><!--mybatis和spring整合的依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><!--druid连接池依赖--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.1</version></dependency><!--lombok依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency><!--jackson java对象转换为json对象 @ResponseBody--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.2.2</version></dependency><!--servlet-api依赖--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.15.RELEASE</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.30</version></dependency></dependencies></project>

2.3、配置spring.xml文件

在main目录下,新建java和resources目录,如下:(如果有就不需要新建了)

image-20221228123823850

然后在resources目录下新建spring.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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-scanbase-package="cn.itsource"/><!-- 声明视图解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefix"value="/WEB-INF/jsp/"/><propertyname="suffix"value=".jsp"/></bean><!--静态资源放行--><mvc:default-servlet-handler/><!-- 声明springmvc注解驱动 --><mvc:annotation-driven/><!--数据源配置--><beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"><propertyname="driverClassName"value="com.mysql.cj.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/ssmtest?serverTimezone=Asia/Shanghai"/><propertyname="username"value="root"/><propertyname="password"value="123456"/><!--初始化连接数量:根据你项目的并发进行评估--><!--最少连接池的个数--><propertyname="minIdle"value="5"/><!--初始的连接池的个数--><propertyname="initialSize"value="5"/><!--最大的连接个数--><propertyname="maxActive"value="10"/><!--超过的最大连接池个数,等待时间 单位是毫秒--><propertyname="maxWait"value="3000"/></bean><beanid="sessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><!--设置数据源--><propertyname="dataSource"ref="dataSource"/><!--设置mybatis映射文件的路径--><propertyname="mapperLocations"value="classpath:mapper/*.xml"/></bean><!--为dao接口生成代理实现类--><beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="basePackage"value="cn.itsource.dao"/></bean></beans>

2.4、配置web.xml文件

web.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?><web-appxmlns="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><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>spring</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 声明字符集过滤器 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param><init-param><param-name>forceRequestEncoding</param-name><param-value>true</param-value></init-param><init-param><param-name>forceResponseEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-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】,建表语句如下:

DROPTABLEIFEXISTS`t_user`;CREATETABLE`t_user`(`id`bigint(11)NOTNULLAUTO_INCREMENTCOMMENT'主键ID',`username`varchar(100)CHARACTERSET utf8 COLLATE utf8_general_ci NULLDEFAULTNULLCOMMENT'姓名',`sex`varchar(2)CHARACTERSET utf8 COLLATE utf8_general_ci NULLDEFAULTNULLCOMMENT'性别',`age`int(3)NULLDEFAULTNULLCOMMENT'年龄',`intro`varchar(12)CHARACTERSET utf8 COLLATE utf8_general_ci NULLDEFAULTNULLCOMMENT'个人简介',PRIMARYKEY(`id`)USINGBTREE,INDEX`idx_user_username`(`username`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=1CHARACTERSET= utf8 COLLATE= utf8_general_ci COMMENT='用户信息表' ROW_FORMAT = DYNAMIC;

2.7、实体类

packagecn.itsource.entity;importlombok.Data;/**
 * <p>用户信息表对应实体类</p>
 *
 * @author 波波老师(微信 : javabobo0513)
 */@DatapublicclassUser{privateLong id;privateString username;privateString sex;privateInteger age;privateString intro;}

2.8、mapper

在dao包下新建UserMapper类,代码:

packagecn.itsource.dao;importcn.itsource.entity.User;importjava.util.List;/**
 * <p>UserMapper</p>
 *
 * @author 波波老师(微信 : javabobo0513)
 */publicinterfaceUserMapper{//保存用户信息到数据库intsaveUser(User user);//查询数据库中所有用户信息List<User>selectAllUser();}

在resources下的mapper文件夹中新建UserMapper.xml文件,代码如下:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="cn.itsource.dao.UserMapper"><!-- 使用 insert、update、delete、select 标签编写sql语句 --><!--保存用户信息到数据库--><insertid="saveUser">
        insert into t_user(username, sex, age, intro) values (#{username}, #{sex}, #{age}, #{intro})
    </insert><!--查询所有用户信息--><selectid="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类:代码如下:

packagecn.itsource.service;importcn.itsource.entity.User;importjava.util.List;/**
 * <p>UserService</p>
 *
 * @author 波波老师(微信 : javabobo0513)
 */publicinterfaceUserService{//保存用户信息到数据库intsaveUser(User user);//查询数据库中所有用户信息List<User>selectAllUser();}

然后在service包下新建impl包,其下新建UserServiceImpl类,代码如下:

packagecn.itsource.service.impl;importcn.itsource.dao.UserMapper;importcn.itsource.entity.User;importcn.itsource.service.UserService;importorg.springframework.stereotype.Service;importjavax.annotation.Resource;importjava.util.List;/**
 * <p>UserServiceImpl</p>
 *
 * @author 波波老师(微信 : javabobo0513)
 */@ServicepublicclassUserServiceImplimplementsUserService{//注入 UserMapper 对象@ResourceprivateUserMapper userMapper;@OverridepublicintsaveUser(User user){return userMapper.saveUser(user);}@OverridepublicList<User>selectAllUser(){return userMapper.selectAllUser();}}

2.10、controller

在controller包下新建UserController类,代码如下:

packagecn.itsource.controller;importcn.itsource.entity.User;importcn.itsource.service.UserService;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importorg.springframework.web.servlet.ModelAndView;importjavax.annotation.Resource;importjava.util.List;/**
 * <p>UserController</p>
 *
 * @author 波波老师(微信 : javabobo0513)
 */@RestController@RequestMapping("/user")publicclassUserController{@ResourceprivateUserService userService;/**
     * 新增用户
     * @param user
     * @return
     */@PostMapping("/saveUser")publicModelAndViewsaveUser(User user){ModelAndView mv =newModelAndView();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")publicList<User>selectAllUser(User user){List<User> userList = userService.selectAllUser();return userList;}}

2.11、前端页面

1、index.html

首先改造webapp目录下的index.html文件,内容如下:

<%@ page contentType="text/html;charset=utf-8" language="java" %>
<%
    String basePath=request.getScheme() + "://" + request.getServerName()
            + ":" + request.getServerPort() + request.getContextPath() + "/";
%>
<html>
<head>
    <base href="<%=basePath%>">
    <title>SSM实战案例</title>
</head>
<body>
<div align="center">
    <p>SSM整合小案例</p>
    <table>
        <tr>
            <td><a href="addUser.jsp">注册用户</a></td>
            <td><br/></td>
            <td><a href="queryUser.jsp">查询用户</a></td>
        </tr>
    </table>
</div>
</body>
</html>

效果如下:

image-20221228143114725

2、addUser.jsp

在webapp目录下新建文件addUser.jsp,用来新增用户,代码如下:

<%@ page contentType="text/html;charset=utf-8" language="java"%>
<html>
<head>
    <title>注册用户</title>
</head>
<body>
<div align="center">
    <p>注册用户</p>
    <form action="user/saveUser" method="post">
        <table>
            <tr>
                <td>姓名:</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>年龄:</td>
                <td><input type="text" name="age"></td>
            </tr>
            <tr>
                <td>性别:</td>
                <td><input type="text" name="sex"></td>
            </tr>
            <tr>
                <td>简介:</td>
                <td><input type="text" name="intro"></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" value="注册"></td>
            </tr>
        </table>
    </form>
</div>
</body>
</html>

效果如下:

image-20221228143042628

3、queryUser.jsp

在webapp目录下新建文件queryUser.jsp,用来查询所有用户,代码如下:

<%@ page contentType="text/html;charset=utf-8" language="java" %>
<%
    String basePath=request.getScheme() + "://" + request.getServerName()
            + ":" + request.getServerPort() + request.getContextPath() + "/";
%>
<html>
<head>
    <base href="<%=basePath%>">
    <title>查询学生</title>
    <%--<script type="text/javascript" src="js/jquery-3.6.0.js"></script>--%>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#myBtn").on("click",function () {
                $.ajax({
                    url: "user/selectAllUser",
                    dataType: "json",
                    success: function (resp) {
                        $("#userInfo").empty();
                        $.each(resp, function (i,n) {
                            $("#userInfo").append("<tr><td>" + n.id + "</td>" +
                                "<td>" + n.username + "</td>" +
                                "<td>" + n.age + "</td>" +
                                "<td>" + n.sex + "</td>" +
                                "<td>" + n.intro + "</td></tr>");
                        })
                    }
                })
            })
        })
    </script>
    <style>
        .tdStyle{
            width: 100px;
        }
    </style>
</head>
<body>
<div align="center">
    <p>用户列表 <button id="myBtn">获取用户信息</button></p>
    <table>
        <thead>
        <tr>
            <td class='tdStyle'>id</td>
            <td class='tdStyle'>姓名</td>
            <td class='tdStyle'>年龄</td>
            <td class='tdStyle'>性别</td>
            <td class='tdStyle'>简介</td>
        </tr>
        </thead>
        <tbody id="userInfo">
        </tbody>
    </table>
</div>
</body>
</html>

效果如下:

image-20221228143206573

4、success.jsp和fail.jsp

在webapp - WEB-INF目录下新建success.jsp和fail.jsp文件,内容分别如下:

success.jsp:

<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
    <title>success</title>
</head>
<body>
<h3>结果:${msg}</h3>
</body>
</html>

效果:

image-20221228143322002

fail.jsp:

<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
    <title>fail</title>
</head>
<body>
<h3>结果:${msg}</h3>
</body>
</html>

2.12、项目结构

目前项目结构如下:

image-20221228143711302

2.13、部署

1、tomcat准备

本地部署到tomcat,首先需要你本地有tomcat服务器,下载地址:

链接:https://pan.baidu.com/s/1VpRboSME8R64yhXE4MwxiA

提取码:nr43

下载下来后,直接解压即可,如下:

image-20221228143542493

我这里使用的tomcat版本是:8.5.75

2、IDEA配置Tomcat

按照下面步骤一步一步做就可以在IDEA中配置好tomcat了

image-20221228143824954

image-20221228143909733

image-20221228144038540

image-20221228144206292

image-20221228144228706

image-20221228144249243

image-20221228144313541

然后开始部署:

image-20221228144421773

image-20221228144449980

image-20221228144529397

然后:

image-20221228144623293

就成这样了:

image-20221228144659317

3、运行

image-20221228144807680

image-20221228145017340

启动成功后,会自动打开页面,如下:

image-20221228145038065

到此,我们的SSM项目就部署完毕,可以正常使用了

4、Tomcat乱码问题

上面我们可以看到,Tomcat启动后,控制台打印的日志出现了乱码,按照下面方式做即可

打开tomcat安装目录下conf下的logging.properties文件:

image-20221228150624243

将该配置文件中的UTF-8全部改成GBK

然后再重启一下Tomcat,就会发现已经没有乱码了:

image-20221228150830314

如果按照上面设置后还没有好的话,就继续设置:

查看下IDEA的字集是不是UTF-8,确认一下,不是的话,改成UTF-8:

image-20221228145524466

打开IDEA的安装目录下的bin目录,打开里面的idea64.exe.vmoptions文件:

image-20221228145746705

添加内容:

-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8
标签: mybatis spring java

本文转载自: https://blog.csdn.net/wujiangbo520/article/details/129101958
版权归原作者 小学生波波 所有, 如有侵权,请联系我们删除。

“SSM项目搭建保姆级教程”的评论:

还没有评论