创建SSM项目框架搭建流程--史上最详细教程

写在前面: 本篇详细记录如何创建一个ssm项目,首先博主使用的工具是STS,使用eclipse也是和STS非常相似的哈,推荐使用STS。在这里我使用的是mac环境,但是具体的软件操作是一样的,不需要担心,耐心按照步骤去做就不会出错的。

1.首先,我们需要创建一个maven项目

2.打开pom.xml文件,注入依赖

这两个步骤大家都很熟悉哈就不放截图了,有疑惑的朋友们可以戳博主的另一篇文章跟着步骤一步一步来 ==>
步骤一、二:创建maven项目+注入依赖

在这里罗列出我所用到的需要注入的常用依赖:
虽然在左侧看到依赖非常之多,但是很多是在导入的时候自动加载的,只需要引入我在代码中写的依赖就可以了

代码:

<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.0</modelVersion><groupId>com.dyit.ssm</groupId><artifactId>ssm-basic</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><properties><project.spring.version>5.2.12.RELEASE</project.spring.version><project.lombok.version>1.18.16</project.lombok.version><project.junit.version>4.12</project.junit.version><project.mysql.version>8.0.22</project.mysql.version><project.mybatis.version>3.5.6</project.mybatis.version><project.mybatis-spring.version>2.0.6</project.mybatis-spring.version><project.slf4j.version>1.7.25</project.slf4j.version><project.jackson.version>2.12.1</project.jackson.version></properties><dependencies><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${project.lombok.version}</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${project.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${project.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${project.spring.version}</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${project.junit.version}</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${project.mysql.version}</version></dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${project.mybatis.version}</version></dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${project.mybatis-spring.version}</version></dependency><!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${project.slf4j.version}</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${project.jackson.version}</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.4</version></dependency></dependencies>
</project>

3.配置servlet的文件

(1) 创建配置文件

在这里我们需要配置的是,在ssm当中要使用到的springMVC和Mybatis的servlet配置文件,一共两个配置文件,下图是博主的项目结构,建议大家养成良好的编程习惯哈,比如管理好文件夹的结构。清晰明了的文件夹结构往往更方便我们去管理我们的项目。

首先,我们分别创建两个servlet文件的配置文件,因为ssm有两个容器,一个是springMVC管理前后端交互的,既管理controller层,另一个容器是spring+mybatis,管理除了第一个之外所有的,它的任务更重一些。
这两个位置文件的类型如图,创建过程是:
new —> 搜索spring —> 选择如图类型文件

分别起名为springmvc-servlet和springmybatis-servlet,放在对应的结构下:

在这一步,我们将数据源文件druid.properties也加进来,如图中放在mybatis下config文件夹位置,并编写好数据库信息:

模板代码如下,关键位置已做标记需要各位配置自己的数据库:

druid.url=jdbc:mysql://172.16.8.134:3306/car_db?useUnicode=true&serverTimezone=Asia/Shanghai&useSSL=true
druid.username=root
druid.password=123
durid.driverClassName=com.mysql.cj.jdbc.Driver

需要日志功能(可以良好记录我们的每次出错信息,有时候不能在控制台看到的错误信息可以在日志中看到)的话,将日志配置文件log4j.propertis文件也放在resource之下,我已经放进去了,这里设置的日志等级是debug,console,logfile

日志文件代码:


log4j.rootLogger=debug,Console,Logfile#Console output
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} [%t] %rms (%-5p) [%c] -%l-- {%m}%nlog4j.appender.Logfile=org.apache.log4j.FileAppender
log4j.appender.Logfile.File=/Users/apple/sts_log/mybatis_log/log.log
log4j.appender.Logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.Logfile.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} [%t] %rms (%-5p) [%c] -%l-- {%m}%nlog4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

以上是src/java/resource下的配置文件,之后,我们在webapp下创建static文件夹,准备将前端界面静态文件放到当中,即页面文件路径都为:static/**.html , *号是根据你的页面名字哈,目前我们先搭建后台环境

使用ssm就要使用mybatis一套东西啦,我们在recourse之下还需要一个mapper文件夹,准备用来放置我们的mapper.xml文件(用来实现对数据库的操作)

(2) 配置springmvc-servlet文件

项目结构清晰之后呢,我们开始书写具体的配置信息。首先是springMVC的servlet文件,其中大部分内容都是生成的不需要管,下图中标记出来的部分是我们需要写的,内容很少。
这里粗心的博主没有截图到标签们的左括号,需要大家在绿色标签的左边加上一个左尖括号哦!
内容解释:

代码:

<?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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"><!-- 分别是:扫描有注解的文件放入容器 注解驱动 静态资源  -->
<context:component-scan base-package="com.dyit.ssm.controller"></context:component-scan>
<mvc:annotation-driven />
<mvc:resources location="static/" mapping="static/**" /></beans>

(3) 配置springmybatis-servlet文件

这里的内容就比较多了,其中涉及到mybatis一套就需要配置数据库数据源、会话、mapper、事物等,不过不要担心,跟着博主耐心一步一步做下来就好了。
整体内容展示:

springmybatis-servlet.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" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"><context:component-scan base-package="com.dyit.ssm"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 读取数据源对象 druid文件 -->
<context:property-placeholder location="classpath:spring/mybatis/config/druid.properties" />
<!-- 数据源对象 -->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="url" value="${druid.url}"></property><property name="username" value="${druid.username}"></property><property name="password" value="${druid.password}"></property>
</bean>
<!-- 会话工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="druidDataSource"></property><property name="typeAliasesPackage" value="com.dyit.ssm.entity"></property><property name="mapperLocations" value="classpath:mapper/*.mapper.xml"></property>
</bean>
<!-- 绑定mybatis的操作接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.dyit.ssm.mapper"></property><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- 管理事务方式 -->
<bean id="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="druidDataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="txManager" />
</beans>

看完展示我们来说一下各部分详细解释:

  1. 这部分写的是mybatis需要扫描注解的文件包,因为ssm是有两个容器,一个是springmvc,一个是spring+mybatis,这里其实是需要扫描出了springmvc的controller 层之外的部分,但是写成整体也是没有问题的。这里直接写了我们的项目名称
<context:component-scan base-package="com.dyit.ssm"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
  1. 读取数据源对象 druid文件,配置数据源路径
<context:property-placeholder location="classpath:spring/mybatis/config/druid.properties" />
  1. 读取数据源对象,起名为druidDataSource,类型为com.alibaba.druid.pool.DruidDataSource,property是数据源对象的属性名,${ }取出文件中对应项的值
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="url" value="${druid.url}"></property><property name="username" value="${druid.username}"></property><property name="password" value="${druid.password}"></property>
</bean>
  1. 创建会话工厂对象,名为sqlSessionFactory,类型为org.mybatis.spring.SqlSessionFactoryBean,

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="druidDataSource"></property><property name="typeAliasesPackage" value="com.dyit.ssm.entity"></property><property name="mapperLocations" value="classpath:mapper/*.mapper.xml"></property>
</bean>
  1. 绑定mybatis的操作接口

<!-- 绑定mybatis的操作接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.dyit.ssm.mapper"></property><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
  1. 管理事务方式

<!-- 管理事务方式 -->
<bean id="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="druidDataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="txManager" />

设置事物之后,可以看到这样的标记:

到这里我们的servlet就配置完成啦,接下来需要写web.xml文件。

4. 配置web.xml的文件

我们打开web.xml文件

首先是修改版本号为3.1 , 接着我们在这里配置一下刚刚写好的servlet的拦截请求相关配置

到这里配置文件部分就完成啦,接下来编写Java代码

5. 编写Java代码

首先展示一下搭建一个项目的基本包结构,我们模拟做一个汽车管理系统:

下面按照创建编写的顺序详细展开:

(1) 实体类entity

这里写了lombok的注解

代码:

package com.dyit.ssm.entity;import org.apache.ibatis.type.Alias;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Alias("Car")
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Car {private Integer id;private String brand;private String color;private Double price;
}

(2) dto传输层:HttpResp

package com.dyit.spring.dto;import java.util.Date;import com.fasterxml.jackson.annotation.JsonFormat;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class HttpResp {private int code;private String msgString;private Object results;@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss",timezone="GMT+8")private Date date;}

(3) dao层: Mapper

  1. 这里写的是我们即将对数据库进行的操作,在这里先定义出所有的方法接口

代码:

package com.dyit.ssm.mapper;
import java.util.List;
import com.dyit.ssm.entity.Car;
public interface ICarMapper {void save(Car car);void delete(int id);void update(Car car);List<Car> findAll();
}
  1. 接着,我们去刚刚创建的mapper文件夹下,创建一个Car.mapper.xml文件,我们将在这里书写对数据库操作的sql语句。
    这个xml文件当中一开始的部分和前面的xml文件不太一样,前面的文件用的都是自动生成的,这一个不使用自动生成的前部分,建议保存一份直接复制粘贴。
    代码在图片后。
    先解释代码内容:
    首先建立和mapper接口的匹配,接着建立和表的映射

接着实现接口当中的方法,在其中使用了很多种标签帮助我们完成数据库操作语句的拼接,和标志不同的操作类型

代码:

<?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接口的位置,在这里要实现该接口方法 -->
<mapper namespace="com.dyit.ssm.mapper.ICarMapper"><!-- 建立和表的映射关系 --><resultMap type="Car" id="carMap"><id property="id" column="car_id" /><result property="brand" column="car_brand" /><result property="color" column="car_color" /><result property="price" column="car_price" /></resultMap><insert id="save">INSERT INTOcar_tab(car_id,car_brand,car_color,car_price)VALUES(#{id},#{brand},#{color},#{price})</insert><delete id="delete">DELETE FROM car_tab WHERE car_id = #{id}</delete><update id="update">UPDATE car_tab<set><if test="brand!=null">car_brand=#{brand},</if><if test="color!=null">car_color=#{color},</if><if test="price!=null">car_price=#{price},</if></set>WHERE car_id = #{id}</update><select id="findAll" resultMap="carMap">SELECT * FROM car_tab</select>
</mapper>

(4) service层:

首先我们写出CarService接口,这里是完成把controller来的请求向做分析处理,转换信息后去调用mapper层方法实现业务

接着写具体的实现类,在这里加入事物注解,看到前面与设置事物的配置生效了,出现了事物的标志符号,表现了面向切面aop:

(5) Controller层:CarController

这里是至关重要的一层,负责将前端来的数据转发到后台,将后台实现业务后的数据送回页面。

6. 测试

(1) 创建测试单元:

一般在写完对数据库等具体业务实现功能后先测试Service层,此时不需要启动tomcat,我们使用ssm当中Spring自带的测试框架。
在src/test/Java下创建测试模块,new —> 搜索junit

选择junit3,看到framework.TestCase出来,检查文件夹目录也没有问题。
然后看到最后一行,添加我们将要测试的类

搜索CarServiceImpl,选定我们自己包中的,之后ok —> NEXT
next!!!
next!!!
next!!!!!!!

选定要测试的方法。—> finish

(2) 测试service层:

之后就可以看到生成的文件自带我们的四种方法,补全功能即可:
这里的两个注解,第一个是启动我们的mybatis容器,第二个是使用ssm当中Spring自带的测试框架。

代码:

package com.dyit.ssm.test;import static org.junit.Assert.*;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.dyit.ssm.entity.Car;
import com.dyit.ssm.service.ICarService;@ContextConfiguration(locations="classpath:spring/mybatis/springmybatis-servlet.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class testService{@Autowiredprivate ICarService ics;//@Testpublic void testAddCar() {ics.addCar(new Car(null,"奔驰300", "白色", 500000.00));System.out.println("添加成功");}//@Testpublic void testDeleteById() {fail("Not yet implemented");}//@Testpublic void testUpdate() {fail("Not yet implemented");}@Testpublic void testFindAll() {System.out.println(ics.findAll());}}

直接在测试代码上运行,查看结果:

可以看到我们数据库当中的内容是已经被查询到了哈,说明我们的service是没有问题的

(3) 测试Controller:

这个就需要使用测试软件了,我使用的是postman,十分好用给大家安利一波。
输入我们的请求,这里测试findAll请求,选择GET方式

点击send后,看到结果是正常显示出来了,说明这一项功能是没有问题的,前后已经跑通啦!

到这里我们本次的分享就到尾声啦,整理不易,希望我们共同进步,期待你的一键三连哦~(手动狗头)

创建SSM项目框架搭建流程--史上最详细教程相关推荐

  1. 《0元搭建个人博客史上最详细教程》(阿里云学生服务器+宝塔一键部署篇)

    1为什么你需要一个服务器? 如何0元获得服务器? 如何0元获得域名及备案? 如何使用WordPress一键部署? 疫情期间可0元白嫖1年(首次6个月到期后再次申请即可),但是限量得每天8.00准时抢! ...

  2. GitHub-Hexo-搭建个人博客史上最详细教程

    GitHub+Hexo 搭建个人网站详细教程 更多精彩内容欢迎访问我的个人博客皮皮猪:http://www.zhsh666.xyz或者http://www.zh66.club期待您的光临哦!我是皮皮猪 ...

  3. Python图形界面开发——PyQt5环境的搭建(史上最详细,保证都能搭建好)

    前期准备:PyQt5以及其他组件的下载与安装 在python的图形界面开发过程中,我们需要三个组件,分别是:PyQt5.pyqt5-tools.PyQt5Designer,我们直接在命令行输入下面的代 ...

  4. 《0元搭建个人博客史上最详细教程》(域名申请及备案篇)

    阿里云域名0元申请链接 疫情期间可以免费申请一年3个 .网址后缀的域名,需要分3次下单,一次申请一个! 0元结算申请 域名备案教程(建议手机阿里云app备案提高通过率) 阿里云备案网址链接: 1移动端 ...

  5. Ubuntu16.04安装Caffe史上最详细教程(CPU),亲测三次!!!

    一.前言 为了安装caffe,本人已经在centos7.x上试错了1次,目前弃疗~:在Ubuntu18.04上试错了3次,目前也弃疗~不是我懒,说实话,bug是真tm多,问问度娘,自己体会体会~我一向 ...

  6. 【如何利用idea提交本地代码到git远程仓库,史上最详细教程,建议收藏!】

    1.首先在gitee上注册一个账号 2.在gitee创建一个远程仓库 3.idea配置git 注意git要提前下载配置好 4.建立一个简单项目 5.建立本地仓库 本地仓库选择在本项目即可 6.建立本地 ...

  7. Git史上最详细教程(详细图解)

    目录 Git简介: 什么是Git,它有什么作用? Git四个区域 ?Git四个状态: .gitignore忽略文件 格式规范: glob模式的正则表达式: ?操作文件 ?上传至云端服务器 远程连接: ...

  8. [转]个人网站对接支付宝,微信支付接口史上最详细教程

    对接支付宝支付接口,官方文档已经写的很清楚了,但是也有很多像我一样的小白,第一次对接支付宝支付接口,会有些迷茫,所以我在此写下这篇文章,给我和我一样的同学,一点思路吧.三分钟就可以申请,支付宝个人即时 ...

  9. 网站对接支付宝,微信支付接口史上最详细教程

    联系qq:1104752746对接支付宝支付接口,官方文档已经写的很清楚了,但是也有很多像我一样的小白,第一次对接支付宝支付接口,会有些迷茫,所以我在此写下这篇文章,给我和我一样的同学,一点思路吧.三 ...

  10. ansj分词史上最详细教程

    项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步 最近的项目需要使用到分词技术.本着不重 ...

最新文章

  1. 从深度学习到深度森林方法(Python)
  2. 服务器开启虚拟机就死机,解决ESXi服务器上磁盘锁导致虚拟机卡死的问题
  3. numpy教程:快速傅里叶变换模块numpy.fft
  4. 【HTTPS运维神器】终于等到你!MySSL企业版重磅上线!
  5. 干货 | 自然语言处理中注意力机制综述
  6. 一台电脑能装两个版本的cad吗_同一台电脑装多个cad 电脑怎么装cad软件步骤
  7. 电影爱好者福利,一些电影网站汇总
  8. 分区软件工具哪个好用
  9. 微信小程序-仿微信朋友圈
  10. mysql 查询结果取别名_mysql合并查询结果及为表和字段取别名
  11. android基础的博客,【复习】Android基础
  12. 生日快乐网页模板(HTML5+CSS3+JS)
  13. 我是如何在一晚上拿到阿里巴巴offer的?
  14. Hive数据库创建表
  15. 安卓11:android studio出现:Executing tasks: [:app:assembleDebug] in project D:\Android studio\New start
  16. mysql point 经纬度_lbs - Mysql POINT类型数据,怎么计算经纬度偏差
  17. python中bool函数用法_在python中bool函数的取值方法
  18. orecle的decode函数用法
  19. CentOS 8.1安装MySQL 8.0详解
  20. Hyperscan 浅见

热门文章

  1. 【海康威视】WPF客户端二次开发:【2】语音对讲
  2. SEO优化软件测试初学者,一款文章原创度检测工具,做seo的你应该需要!
  3. fan4801开关电源原理图_六款简单的开关电源电路设计,内附原理图详解
  4. 从OPPO TWS耳机看OPPO声学的体面回归
  5. 1.1音响系统放大器设计
  6. 计算机应用技术辅助设计方向课程,AutoCAD计算机辅助设计课程标准.doc
  7. 数字孪生技术协助信息物理系统构建数字化城市
  8. 一台 ZXHN F650(GPON ONU) 学习小记
  9. 计算机端口lpt,教你把USB、COM串口打印机映射到LPT端口
  10. 基于Springboot的物业管理系统_代码