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

文章目录

  • 1.基本概念
    • 1.1、Spring概念
    • 1.2、SpringMVC概念
    • 1.3、MyBatis概念
  • 2.开发步骤
    • 2.1、maven项目创建
    • 2.2、SSM框架的配置
      • 2.2.1 配置前准备工作
      • 2.2.2 开始配置
    • 2.3、代码编写
      • 2.3.1 编写实体类
      • 2.3.2 编写mapper接口
      • 2.3.3 编写增删改查语句
      • 2.3.4 编写service层
      • 2.3.5 编写controller层
    • 2.4、测试代码
      • 2.4.1 测试添加数据
      • 2.4.2 测试删除数据
      • 2.4.1 测试修改数据
      • 2.4.1 测试查询数据

引言:一个好的项目必须有一个好的框架支持,今天我们来讲一下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
    手把手教你搭建SSM框架,简单有效理解SSM框架_第1张图片
  2. 选择项目的路径,并Next
    手把手教你搭建SSM框架,简单有效理解SSM框架_第2张图片
  3. 以下配置,点击Finis
    手把手教你搭建SSM框架,简单有效理解SSM框架_第3张图片
  4. 完成后pom.xml会有错误,下面方法去除错误
    手把手教你搭建SSM框架,简单有效理解SSM框架_第4张图片
  5. 配置项目的Tomcat,右键项目->Properties
    手把手教你搭建SSM框架,简单有效理解SSM框架_第5张图片
    手把手教你搭建SSM框架,简单有效理解SSM框架_第6张图片
    手把手教你搭建SSM框架,简单有效理解SSM框架_第7张图片
    此时我们的maven项目已经创建好。

2.2、SSM框架的配置

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

2.2.1 配置前准备工作

  1. pom.xml导入需要用的jar包或者引入依赖。我采用依赖方式。
	<properties>
		<project.spring.version>5.2.12.RELEASEproject.spring.version>
		<project.slf4j.version>1.7.5project.slf4j.version>
		<project.druid.version>1.2.4project.druid.version>
		<project.lombok.version>1.18.16project.lombok.version>
		<project.mysql.version>8.0.22project.mysql.version>
		<project.mybatis.version>3.5.6project.mybatis.version>
		<project.mybatis-spring.version>2.0.6project.mybatis-spring.version>
		<project.junit.version>4.12project.junit.version>
		<project.json.version>2.12.1project.json.version>
		<project.pageHelper.version>5.1.2project.pageHelper.version>
	properties>

	<dependencies>
		
		<dependency>
			<groupId>org.projectlombokgroupId>
			<artifactId>lombokartifactId>
			<version>${project.lombok.version}version>
		dependency>
		
		<dependency>
			<groupId>com.alibabagroupId>
			<artifactId>druidartifactId>
			<version>${project.druid.version}version>
		dependency>
		
		<dependency>
			<groupId>org.springframeworkgroupId>
			<artifactId>spring-webmvcartifactId>
			<version>${project.spring.version}version>
		dependency>
		
		<dependency>
			<groupId>org.springframeworkgroupId>
			<artifactId>spring-testartifactId>
			<version>${project.spring.version}version>
		dependency>
		
		<dependency>
			<groupId>org.springframeworkgroupId>
			<artifactId>spring-ormartifactId>
			<version>${project.spring.version}version>
		dependency>
		
		<dependency>
			<groupId>org.slf4jgroupId>
			<artifactId>slf4j-log4j12artifactId>
			<version>${project.slf4j.version}version>
		dependency>
		
		<dependency>
			<groupId>mysqlgroupId>
			<artifactId>mysql-connector-javaartifactId>
			<version>${project.mysql.version}version>
		dependency>
		
		<dependency>
			<groupId>org.mybatisgroupId>
			<artifactId>mybatisartifactId>
			<version>${project.mybatis.version}version>
		dependency>
		
		<dependency>
			<groupId>org.mybatisgroupId>
			<artifactId>mybatis-springartifactId>
			<version>${project.mybatis-spring.version}version>
		dependency>
		
		<dependency>
			<groupId>junitgroupId>
			<artifactId>junitartifactId>
			<version>${project.junit.version}version>
		dependency>
		
		<dependency>
			<groupId>com.fasterxml.jackson.coregroupId>
			<artifactId>jackson-databindartifactId>
			<version>${project.json.version}version>
		dependency>
		
		<dependency>
			<groupId>com.github.pagehelpergroupId>
			<artifactId>pagehelperartifactId>
			<version>${project.pageHelper.version}version>
		dependency>
	dependencies>

手把手教你搭建SSM框架,简单有效理解SSM框架_第8张图片
手把手教你搭建SSM框架,简单有效理解SSM框架_第9张图片

  1. 创建备用文件夹
    手把手教你搭建SSM框架,简单有效理解SSM框架_第10张图片
    手把手教你搭建SSM框架,简单有效理解SSM框架_第11张图片
    手把手教你搭建SSM框架,简单有效理解SSM框架_第12张图片
    手把手教你搭建SSM框架,简单有效理解SSM框架_第13张图片
    同样的方法在mybatis文件夹下创建spring-mybatis,这两个文件夹至关重要,千万不能出错

注意mybatis添加namespace的不一样
手把手教你搭建SSM框架,简单有效理解SSM框架_第14张图片

  1. 在mybatis文件夹下创建config文件夹,并放入druid.properties文件
    手把手教你搭建SSM框架,简单有效理解SSM框架_第15张图片
    druid.properties文件
    手把手教你搭建SSM框架,简单有效理解SSM框架_第16张图片
	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. 在根目录下放日志文件
    手把手教你搭建SSM框架,简单有效理解SSM框架_第17张图片
    日志文件
	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. 完整的文件目录
    手把手教你搭建SSM框架,简单有效理解SSM框架_第18张图片

2.2.2 开始配置

  1. 在web.xml配置容器启动
    手把手教你搭建SSM框架,简单有效理解SSM框架_第19张图片
    代码
	
	<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-studentdisplay-name>
	
		
		<context-param>
			<param-name>contextConfigLocationparam-name>
			<param-value>classpath:spring/mybatis/spring-*.xmlparam-value>
		context-param>
		<listener>
			<listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
		listener>
	
		
		<servlet>
			<servlet-name>springDispatcherServletservlet-name>
			<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
			<init-param>
				<param-name>contextConfigLocationparam-name>
				<param-value>classpath:spring/mvc/springmvc-*.xmlparam-value>
			init-param>
			<load-on-startup>1load-on-startup>
		servlet>
		<servlet-mapping>
			<servlet-name>springDispatcherServletservlet-name>
			<url-pattern>/*url-pattern>
		servlet-mapping>
	 
	web-app>
  1. 配置springmvc-servlet.xml文件
    • 前提先把各种包建好
      手把手教你搭建SSM框架,简单有效理解SSM框架_第20张图片
    • 配置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文件夹以及映射文件
      手把手教你搭建SSM框架,简单有效理解SSM框架_第21张图片
    • 配置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>

	
	<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. 创建建数据库(已经创建好一个,不重复创建了)
    手把手教你搭建SSM框架,简单有效理解SSM框架_第22张图片

  2. 创建Student表
    手把手教你搭建SSM框架,简单有效理解SSM框架_第23张图片

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
	
	
	
	<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>
	
		
		<insert id="save">
			INSERT INTO student_tab(stu_name,stu_age,stu_birth)
			VALUES(#{name},#{age},#{birth})
		insert>
		
		
		<delete id="delete">
			DELETE FROM student_tab WHERE stu_id = #{id}
		delete>
		
		
		<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>
		
		
		<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(第一次启动后,后续不再启动)
    手把手教你搭建SSM框架,简单有效理解SSM框架_第24张图片

  2. postman中输入地址,以及数据
    手把手教你搭建SSM框架,简单有效理解SSM框架_第25张图片

  3. 查看返回数据
    手把手教你搭建SSM框架,简单有效理解SSM框架_第26张图片

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

  5. 数据库中查看记录
    手把手教你搭建SSM框架,简单有效理解SSM框架_第27张图片

2.4.2 测试删除数据

  1. postman中输入地址,以及数据
    手把手教你搭建SSM框架,简单有效理解SSM框架_第28张图片

  2. 查看返回数据
    手把手教你搭建SSM框架,简单有效理解SSM框架_第29张图片

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

  4. 数据库中查看记录
    手把手教你搭建SSM框架,简单有效理解SSM框架_第30张图片

2.4.1 测试修改数据

  1. postman中输入地址,以及数据
    手把手教你搭建SSM框架,简单有效理解SSM框架_第31张图片

  2. 查看返回数据
    手把手教你搭建SSM框架,简单有效理解SSM框架_第32张图片

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

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

2.4.1 测试查询数据

  1. postman中输入地址,以及数据
    手把手教你搭建SSM框架,简单有效理解SSM框架_第33张图片

  2. 查看返回数据
    手把手教你搭建SSM框架,简单有效理解SSM框架_第34张图片

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

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

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

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

你可能感兴趣的:(SSM框架,spring,springmvc,mybatis)