手把手教你搭建SSM框架,简单有效理解SSM框架

引言:一个好的项目必须有一个好的框架支持,今天我们来讲一下Java中一个很重要的框架——SSM框架。所谓SSM框架就是Spring+SpringMVC+MyBatis的整合。

1.基本概念

1.1、Spring概念

  • Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。
  • 它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
  • 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

1.2、SpringMVC概念

  • Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

1.3、MyBatis概念

  • MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

2.开发步骤

2.1、maven项目创建

maven项目的创建是基础,一个好的maven项目直接决定了项目开发的效率。

  1. File——>New——>Mave Project
    在这里插入图片描述
  2. 选择项目的路径,并Next
    在这里插入图片描述
  3. 以下配置,点击Finis
    在这里插入图片描述
  4. 完成后pom.xml会有错误,下面方法去除错误
    在这里插入图片描述
  5. 配置项目的Tomcat,右键项目->Properties
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    此时我们的maven项目已经创建好。

2.2、SSM框架的配置

众所周知,Java的后期学习基本上是重配置,轻代码。所以一个好的项目,首先要从配置出发,并且要把配置做好,才能有利于后面的代码编写。

2.2.1 配置前准备工作

  1. pom.xml导入需要用的jar包或者引入依赖。我采用依赖方式。
	<properties>
		<project.spring.version>5.2.12.RELEASE</project.spring.version>
		<project.slf4j.version>1.7.5</project.slf4j.version>
		<project.druid.version>1.2.4</project.druid.version>
		<project.lombok.version>1.18.16</project.lombok.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.junit.version>4.12</project.junit.version>
		<project.json.version>2.12.1</project.json.version>
		<project.pageHelper.version>5.1.2</project.pageHelper.version>
	</properties>

	<dependencies>
		<!-- 减少我们写实体类的get,set方法以及构造方法的依赖 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>${project.lombok.version}</version>
		</dependency>
		<!-- 数据源依赖 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>${project.druid.version}</version>
		</dependency>
		<!-- spring-mvc的依赖 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${project.spring.version}</version>
		</dependency>
		<!-- spring的测试依赖 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${project.spring.version}</version>
		</dependency>
		<!-- orm依赖 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${project.spring.version}</version>
		</dependency>
		<!-- 日志依赖 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${project.slf4j.version}</version>
		</dependency>
		<!-- mysql依赖 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${project.mysql.version}</version>
		</dependency>
		<!-- mybatis依赖 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>${project.mybatis.version}</version>
		</dependency>
		<!-- spring依赖 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>${project.mybatis-spring.version}</version>
		</dependency>
		<!-- Junit测试依赖 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${project.junit.version}</version>
		</dependency>
		<!-- json数据依赖 -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${project.json.version}</version>
		</dependency>
		<!-- 后期分页依赖 -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper</artifactId>
			<version>${project.pageHelper.version}</version>
		</dependency>
	</dependencies>

在这里插入图片描述
在这里插入图片描述

  1. 创建备用文件夹
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    同样的方法在mybatis文件夹下创建spring-mybatis,这两个文件夹至关重要,千万不能出错

注意mybatis添加namespace的不一样
在这里插入图片描述

  1. 在mybatis文件夹下创建config文件夹,并放入druid.properties文件
    在这里插入图片描述
    druid.properties文件
    在这里插入图片描述
	druid.url=jdbc:mysql://192.168.47.129:3306/ssm_db?useUnicode=true&serverTimezone=Asia/Shanghai&useSSL=true
	druid.username=root
	druid.password=123

  1. 在根目录下放日志文件
    在这里插入图片描述
    日志文件
	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=D:/logs/mybatis.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
  1. 完整的文件目录
    在这里插入图片描述

2.2.2 开始配置

  1. 在web.xml配置容器启动
    在这里插入图片描述
    代码
	<?xml version="1.0" encoding="UTF-8"?>
	<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	 xmlns="http://java.sun.com/xml/ns/javaee"
	  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
	  <display-name>ssm-student</display-name>
	
		<!-- 启动mybatis容器 -->
		<context-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/mybatis/spring-*.xml</param-value>
		</context-param>
		<listener>
			<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
		</listener>
	
		<!-- 启动springmvc容器 -->
		<servlet>
			<servlet-name>springDispatcherServlet</servlet-name>
			<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
			<init-param>
				<param-name>contextConfigLocation</param-name>
				<param-value>classpath:spring/mvc/springmvc-*.xml</param-value>
			</init-param>
			<load-on-startup>1</load-on-startup>
		</servlet>
		<servlet-mapping>
			<servlet-name>springDispatcherServlet</servlet-name>
			<url-pattern>/*</url-pattern>
		</servlet-mapping>
	 
	</web-app>
  1. 配置springmvc-servlet.xml文件
    • 前提先把各种包建好
      在这里插入图片描述
    • 配置springmvc-servlet包
	<!-- 扫描注解 -->
	<context:component-scan
		base-package="com.ithouke.ssm.controller"></context:component-scan>
	<!-- 资源 -->
	<mvc:resources location="static/" mapping="static/**"></mvc:resources>
	<!-- 注解驱动 -->
	<mvc:annotation-driven></mvc:annotation-driven>

  1. 配置spring-mybatis.xml文件
    • 首先创建映射文件
      在根目录下创建mapper文件夹以及映射文件
      在这里插入图片描述
    • 配置spring-mybatis.xml文件
	<!-- 扫描注解驱动 -->
	<context:component-scan
		base-package="com.ithouke.ssm">
		<context:exclude-filter type="annotation"
			expression="org.springframework.stereotype.Controller" />
	</context:component-scan>

	<!-- 读取数据源配置信息 -->
	<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.ithouke.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.ithouke.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" />

做到这里,基本上的配置已经完成。

2.3、代码编写

这次我们来做一个学生信息管理系统的一个小模块——对学生信息进行增删改查

编写代码之前我们要创建数据库以及表,博主用的是linux里面的数据库,以前的文章里面有写在linux中安装docker,以及在docker安装mysql,感兴趣的可以看一下。

  1. 创建建数据库(已经创建好一个,不重复创建了)
    在这里插入图片描述

  2. 创建Student表
    在这里插入图片描述

2.3.1 编写实体类

  • Student.java
	import java.util.Date;
	import org.apache.ibatis.type.Alias;
	import lombok.AllArgsConstructor;
	import lombok.Data;
	import lombok.NoArgsConstructor;
	
	@Alias("Student")    //别名
	@Data                //get,set方法
	@AllArgsConstructor  //全参构造方法
	@NoArgsConstructor   //无参构造方法
	public class Student {
	
		private Integer id;
		private String name ;
		private Integer age;
		private Date birth;
	}

2.3.2 编写mapper接口

  • IStudentMapper.java
	import java.util.List;
	import com.ithouke.ssm.entity.Student;
	
	public interface IStudentMapper {
	
		void save(Student student);
		void delete(int id);
		void update(Student student);
		List<Student> findAll();
	}

2.3.3 编写增删改查语句

  • Student.mapper.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">
	<!-- 命名空间,指向IStudentMapper-->
	<mapper namespace="com.ithouke.ssm.mapper.IStudentMapper">
	
		<!-- 定义映射规则 -->
		<resultMap type="Student" id="studentMap">
			<id property="id" column="stu_id" />
			<result property="name" column="stu_name" />
			<result property="age" column="stu_age" />
			<result property="birth" column="stu_birth" />
		</resultMap>
	
		<!-- 添加SQL语句 -->
		<insert id="save">
			INSERT INTO student_tab(stu_name,stu_age,stu_birth)
			VALUES(#{name},#{age},#{birth})
		</insert>
		
		<!-- 删除SQL语句 -->
		<delete id="delete">
			DELETE FROM student_tab WHERE stu_id = #{id}
		</delete>
		
		<!-- 更新SQL语句 -->
		<update id="update">
			<!--  -->
			UPDATE student_tab
			<set>
				<if test="name != null">
					stu_name=#{name},
				</if>
				<if test="age != null">
					stu_age=#{age},
				</if>
				<if test="birth != null">
					car_birth=#{birth},
				</if>
			</set>
			WHERE stu_id = #{id}
			<!-- 普通写法 -->
			<!-- UPDATE car_tab SET car_brand =#{brand},car_color=#{color},car_price=#{price}
				WHERE car_id = #{id} -->
		</update>
		
		<!-- 查询SQL语句 -->
		<select id="findAll" resultMap="studentMap">
			SELECT * FROM student_tab
		</select>
	</mapper>

此时mybatis的部分已经完成(重点就是接口的编写和xml文件的配置)

2.3.4 编写service层

  • 编写接口IStudentService.java
	import java.util.List;
	import com.ithouke.ssm.entity.Student;
	
	public interface IStudentService {
	
		void addStu(Student student);
		void deleteStu(int id);
		void updateStu(Student student);
		List<Student> findAll();
	}
  • 编写接口实现类StudentServiceImpl
	import java.util.List;
	import org.springframework.beans.factory.annotation.Autowired;
	import org.springframework.stereotype.Service;
	import org.springframework.transaction.annotation.Transactional;
	import com.ithouke.ssm.entity.Student;
	import com.ithouke.ssm.mapper.IStudentMapper;
	import com.ithouke.ssm.service.IStudentService;
	
	@Service
	@Transactional
	public class StudentServiceImpl implements IStudentService {
		
		@Autowired
		private IStudentMapper mapper;
	
		@Override
		public void addStu(Student student) {
			mapper.save(student);
		}
	
		@Override
		public void deleteStu(int id) {
			mapper.delete(id);
	
		}
	
		@Override
		public void updateStu(Student student) {
			mapper.update(student);
	
		}
	
		@Override
		public List<Student> findAll() {
			
			return mapper.findAll();
		}
	
	}

2.3.5 编写controller层

  • 编写StudentController.java
	import java.util.Date;
	import java.util.List;
	import org.springframework.beans.factory.annotation.Autowired;
	import org.springframework.stereotype.Controller;
	import org.springframework.web.bind.annotation.DeleteMapping;
	import org.springframework.web.bind.annotation.GetMapping;
	import org.springframework.web.bind.annotation.PostMapping;
	import org.springframework.web.bind.annotation.PutMapping;
	import org.springframework.web.bind.annotation.RequestMapping;
	import org.springframework.web.bind.annotation.ResponseBody;
	import com.ithouke.ssm.dto.HttpResp;
	import com.ithouke.ssm.entity.Student;
	import com.ithouke.ssm.service.IStudentService;
	
	@Controller
	@RequestMapping("/api")
	public class StudentController {
		
		@Autowired
		private IStudentService iss;
	
		@PostMapping("/addStu")
		@ResponseBody
		public HttpResp addStu(Student student) {
			
			iss.addStu(student);
			return new HttpResp(20001, "学生信息添加成功", null, new Date());
			
		}
	
		@DeleteMapping("/deleteStu")
		@ResponseBody
		public HttpResp deleteStu(int id) {
			
			iss.deleteStu(id);
			
			return new HttpResp(20002, "学生信息删除成功", null, new Date());
			
		}
	
		@PutMapping("/updateStu")
		@ResponseBody
		public HttpResp updateStu(Student student) {
			
			iss.updateStu(student);
			return new HttpResp(20003, "学生信息修改成功", null, new Date());
			
		}
	
		@GetMapping("/findAllStu")
		@ResponseBody
		public HttpResp findAllStu() {
			
			List<Student> list = iss.findAll();
			return new HttpResp(20004, "学生信息查询成功", list, new Date());
			
		}
	}

2.4、测试代码

博主用的是postman进行测试后端。

2.4.1 测试添加数据

  1. 启动Tomcat(第一次启动后,后续不再启动)
    在这里插入图片描述

  2. postman中输入地址,以及数据
    在这里插入图片描述

  3. 查看返回数据
    在这里插入图片描述

  4. 后端控制台查看日志
    在这里插入图片描述

  5. 数据库中查看记录
    在这里插入图片描述

2.4.2 测试删除数据

  1. postman中输入地址,以及数据
    在这里插入图片描述

  2. 查看返回数据
    在这里插入图片描述

  3. 后端控制台查看日志
    在这里插入图片描述

  4. 数据库中查看记录
    在这里插入图片描述

2.4.1 测试修改数据

  1. postman中输入地址,以及数据
    在这里插入图片描述

  2. 查看返回数据
    在这里插入图片描述

  3. 后端控制台查看日志
    在这里插入图片描述

  4. 数据库中查看记录
    在这里插入图片描述
    在这里插入图片描述

2.4.1 测试查询数据

  1. postman中输入地址,以及数据
    在这里插入图片描述

  2. 查看返回数据
    在这里插入图片描述

  3. 后端控制台查看日志
    在这里插入图片描述

  4. 数据库中查看记录
    在这里插入图片描述

到此时,我们的SSM框架基本成功,项目还不完善,之后博主会在进行完善前端部分以及后续的项目。文章中有任何问题,请在评论区进行留言,博主会一一解答。码字不易,请一键三连哟

关于文章中的注解,之后会有一个详细的文章进行介绍。欢迎阅读

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值