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

创建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}%n


log4j.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}%n

log4j.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.xsd
		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: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.xsd
		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
		http://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 INTO
		car_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{
	
	@Autowired
	private ICarService ics;

	//@Test
	public void testAddCar() {
		ics.addCar(new Car(null,"奔驰300", "白色", 500000.00));
		System.out.println("添加成功");
	}

	//@Test
	public void testDeleteById() {
		fail("Not yet implemented");
	}

	//@Test
	public void testUpdate() {
		fail("Not yet implemented");
	}

	@Test
	public void testFindAll() {

		System.out.println(ics.findAll());
	}

}

直接在测试代码上运行,查看结果:
在这里插入图片描述

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

(3) 测试Controller:

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

在这里插入图片描述

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

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

  • 16
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值