SSM框架指的是Spring、SpringMVC、MyBatis
本文介绍将这三个框架进行整合。本文使用的工具是
IDEA2022、JDK1.8、maven3.6.3
一、创建数据库
创建一个数据,名字为ssm,然后创建一个名字为book的表
CREATE DATABASE IF NOT EXISTS ssm;
use ssm;
-- 如果表存在则删除
DROP TABLE IF EXISTS book;
-- 创建新表
CREATE TABLE book (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
press VARCHAR(100),
author VARCHAR(50)
);
INSERT INTO book (name, press, author) VALUES ('Java编程思想', '机械工业出版社', 'Bruce Eckel');
INSERT INTO book (name, press, author) VALUES ('Spring实战', '人民邮电出版社', 'Craig Walls');
SELECT * from book;
创建完毕以后查询数据库结果如下:

二、创建项目
打开IDEA,点击File—>New—>Project

我们 选择“Maven”项目, JDK这里选择1.8版本,下面勾选maven-archtype-webapp,然后点击“Next”

项目名称为SSM

此处主要配置一下maven,配置完了以后选择”Finish”

点击“Finish”,等待一会儿(网络好的情况下会快一些),可以看到项目结构如下:

(1)下面开始生成相关文件夹(java、resources)
右击main文件夹,选择New—>Directory

在弹出来的框中分别选择java和resources文件夹,按回车,生成这两个文件夹。

(2)创建相关文件夹
右击java文件夹,选择New—>Package

包名为com.guo.www (可以自定义为其他的)

继续右击www文件夹,分别创建controller、domain、service、mapper、test文件夹,创建后结构如下:

三、引入项目依赖
打开pom.xml文件,参考下面的代码。
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>SSM</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>SSM Maven Webapp</name>
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<!-- Spring相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--Spring事务管理-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--Spring MVC的相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--MyBatis相关依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--MyBatis与Spring整合相关依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.1</version>
</dependency>
<!--数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.20</version>
</dependency>
<!--单元测试相关的依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 相关的依赖-->
<!--ServletAPI:引入servlet的功能-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--ServletAPI: jsp页面的功能包 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<!-- 数据库驱动相关依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<finalName>SSM</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.4.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.1</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.3.0</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.4.0</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>3.1.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.1.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
然后右击右侧的maven,点击上面按钮,下载maven相关的依赖,等待依赖下载。

四、创建实体类
右击domain文件夹,选择New—Java Class

实体类的名字为Book

实体类的参考代码如下:
package com.guo.www.domain;
public class Book {
private Integer id; //图书id
private String name; //图书名称
private String press; //出版社
private String author; //作者
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
五、创建DAO层代码
(1)创建Mapper文件
右击mapper文件夹,选择New—>Java Class,名字为BookerMapper,这里的类型要选Interface

参考代码如下:
package com.guo.www.mapper;
import com.guo.www.domain.Book;
public interface BookMapper {
public Book findBookById(Integer id);
}

(2)创建mapper对应的xml文件,
上面的mapper文件对应的xml文件,这个xml文件就是我们需要对数据库进行操作的文件。
右击resources文件夹,选择New—>Directory文件夹,

创建文件夹名字为dao。
然后继续右击刚才创建的dao文件夹,选择New—>File

文件名为BooKMapper.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">
<mapper namespace="com.guo.www.mapper.BookMapper">
<!--根据id查询图书信息 -->
<select id="findBookById" parameterType="int"
resultType="com.guo.www.domain.Book">
select * from tb_book where id = #{id}
</select>
</mapper>
注意:xml文件中的namespace指向的是上面的mapper,这个是必须的,这样上面的mapper文件才会知道要执行哪个xml文件中的代码。
下面的resultType一般指向实体类(注意路径)

六、创建Service层代码
Service一个有两个代码,一个是接口,一个是接口的实现类。
(1)Service代码
右击service文件夹,选择New—>Java Class

名字为BookService,类型选Interface

参考代码如下:
package com.guo.www.service;
import com.guo.www.domain.Book;
public interface BookService {
public Book findBookById(Integer id);
}
(2)创建impl代码
右击service文件夹,新建impl文件夹

刚才新建的impl文件夹,选择New—>java Class

名称为BookServiceImpl

参考代码如下:
package com.guo.www.service.impl;
import com.guo.www.domain.Book;
import com.guo.www.mapper.BookMapper;
import com.guo.www.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookMapper bookMapper;
public Book findBookById(Integer id) {
return bookMapper.findBookById(id);
}
}
创建完毕后项目结构如下:

七、创建Controller层代码
右击controller文件夹,选择New—>Java Class

名称为BookController

参考代码如下:
package com.guo.www.controller;
import com.guo.www.domain.Book;
import com.guo.www.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class BookController {
@Autowired
private BookService bookService;
@RequestMapping("/book")
public ModelAndView findBookById(Integer id) {
Book book = bookService.findBookById(id);
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("book.jsp");
modelAndView.addObject("book", book);
return modelAndView;
}
}
八、Sping和MyBatis整合
(1)创建数据库文件
右击resources文件夹,选择New—>File

名字为db.properties

参考代码如下:
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=root
创建完后,项目结构如下:

(2)创建MyBatis配置文件(mybatis-config.xml)
右击service文件夹,选择New—File

名字为mybatis-config.xml
注意,这里文件的名称不一定是这个,也可以命名成其他的,比如application-dao.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"
xsi:schemaLocation="
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.xsd
">
<!--引入属性文件-->
<context:property-placeholder location="classpath:db.properties"/>
<!--数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--创建SqlSessionFactory对象-->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<!--数据源-->
<property name="dataSource" ref="dataSource"/>
<!-- 扫描sql配置文件:mapper需要的xml文件 -->
<property name="mapperLocations" value="classpath:dao/*.xml"/>
</bean>
<!--扫描Dao包,创建动态代理对象, 会自动存储到spring IOC容器中-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--指定要扫描的dao的包-->
<property name="basePackage" value="com.guo.www.mapper"/>
</bean>
</beans>
注意对应关系

九、Spring配置文件
在resources目录下创建配置文件application-service.xml用于配置Spring对Service层的扫描信息。
右击

名字为application-service.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"
xsi:schemaLocation="
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.xsd
">
<!--开启注解扫描, 扫描包-->
<context:component-scan base-package="com.guo.www.service"/>
</beans>

十、SpringMVC的配置
(1)新增spring-mvc.xml文件
右击resources文件夹,选择New—>File

名字为spring-mvc.xml

参考代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 配置要扫描的包 -->
<context:component-scan base-package="com.guo.www.controller"/>
<!-- 配置注解驱动 -->
<mvc:annotation-driven/>
</beans>
十一、修改web.xml文件
打开web.xml文件,修改参考如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
version="4.0"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:javaee="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
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">
<display-name>Archetype Created Web Application</display-name>
<!--配置文件加载-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:mybatis-config.xml,
classpath:application-service.xml
</param-value>
</context-param>
<!--容器加载的监听器-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!--Spring MVC 前端控制器-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!--初始化参数-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!--项目启动时候,初始化前端控制器-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
十二、增加jsp文件
本文前端需要jsp文件进行配合,右击webapp,选择New—>JSP/JSPX

名称为book
参考代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head><title>图书信息查询</title></head>
<body>
<table border="1">
<tr>
<th>图书id</th>
<th>图书名称</th>
<th>出版社</th>
<th>作者</th>
</tr>
<tr>
<td>${book.id}</td>
<td>${book.name}</td>
<td>${book.press}</td>
<td>${book.author}</td>
</tr>
</table>
</body>
</html>
十三、效果测试
参考下面这篇文章配置tomcat:Spring MVC项目配置tomcat – 每天进步一点点
然后启动项目。
启动后在浏览器访问下面的网址:
http://localhost:8080/SSM_war/book?id=1
然后可以看到实现的效果

十四、后记
上面简单完成了SSM框架代码,但是没有配置json的相关配置, 在实际开发中,后端一般返回json格式数据,这里也简单说明一下配置方式。
修改下面的代码:
BookMapper.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">
<mapper namespace="com.guo.www.mapper.BookMapper">
<!--根据id查询图书信息 -->
<select id="findBookById" parameterType="int"
resultType="com.guo.www.domain.Book">
select * from book where id = #{id}
</select>
<select id="findAllBook" resultType="com.guo.www.domain.Book">
select * from book;
</select>
</mapper>
BookMapper修改如下:
package com.guo.www.mapper;
import com.guo.www.domain.Book;
import java.util.List;
public interface BookMapper {
public Book findBookById(Integer id);
public List<Book> findAllBook();
}
BookServiceImpl文件修改如下:
package com.guo.www.service.impl;
import com.guo.www.domain.Book;
import com.guo.www.mapper.BookMapper;
import com.guo.www.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookMapper bookMapper;
public Book findBookById(Integer id) {
Book book = bookMapper.findBookById(id);
return book;
}
public List<Book> findAllBook(){
return bookMapper.findAllBook();
}
}
BookService文件修改如下:
package com.guo.www.service;
import com.guo.www.domain.Book;
import java.util.List;
public interface BookService {
public Book findBookById(Integer id);
public List<Book> findAllBook();
}
BookController文件修改如下:
package com.guo.www.controller;
import com.guo.www.domain.Book;
import com.guo.www.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@Controller
public class BookController {
@Autowired
private BookService bookService;
@RequestMapping("/book")
public ModelAndView findBookById(Integer id) {
Book book = bookService.findBookById(id);
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("book.jsp");
modelAndView.addObject("book", book);
return modelAndView;
}
@RequestMapping("/allbook")
@ResponseBody
public List<Book> findAllBook(){
List<Book> books = bookService.findAllBook();
return books;
}
}
pom文件需要引入json转换的相关依赖,
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>SSM</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>SSM Maven Webapp</name>
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<!-- Spring相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--Spring事务管理-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--Spring MVC的相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--MyBatis相关依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--MyBatis与Spring整合相关依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.1</version>
</dependency>
<!--数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.20</version>
</dependency>
<!--单元测试相关的依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 相关的依赖-->
<!--ServletAPI:引入servlet的功能-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--ServletAPI: jsp页面的功能包 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<!-- 数据库驱动相关依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<!-- Jackson 转换的数据绑定包依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
</dependencies>
<build>
<finalName>SSM</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.4.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.1</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.3.0</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.4.0</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>3.1.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.1.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
重新启动项目,访问下面的网址,就可以看到返回的是json数据了
http://localhost:8080/SSM_war/allbook
效果如下:

本文源代码下载地址(访问密码: 6521):
SSM.zip: https://url47.ctfile.com/f/64055047-1509662263-29e17b?p=6521