SpringBoot2.x系列教程06--SpringBoot中结合XML文件实现SSM整合
SpringBoot2.x系列教程06--SpringBoot中结合XML文件实现SSM整合
前言
前面几篇文章中主要是带各位简单的认识一下SpringBoot,算是做了个开场白,接下来才是咱们学习SpringBoot的重点。所以从本篇文章开始,咱们逐步进入到更实用的学习上来,前面的配置只是为了让我们使用SpringBoot的时候更简单舒服一点。
接下来我们就看看在SpringBoot到底该怎么实现SSM整合吧。
一. 添加核心配置
1. SSM整合简介
在学习SpringBoot之前,相信各位都有SSM整合的经验,我们知道之前的SSM配置,真的是很痛苦,需要编写大量的xml文件,稍不注意就会出错。但是自从有了SpringBoot,这一切都变得轻松而简单了。
Spring Boot可以帮助我们快速搭建出一个SSM框架整合的环境,我们只需要少量代码即可实现。如果我们想在SpringBoot项目中实现SSM整合,可以用如下两种方式:
- 1️⃣. 以XML配置方式;
- 2️⃣. 以注解配置方式。
接下来,壹哥 就带各位在SpringBoot中,先以XML配置文件的方式来实现SSM整合。
2. 创建一个新的module
本系列教程中所有的代码案例,都是以迭代方式,在之前案例的基础上进行增量编写的!所以我这里就直接在之前的SpringBoot项目里,创建一个新的Module,各位可以自行创建。
设置自己module模块的名称,不一定非要和我一样。
创建出来的module模块代码结构如下图:
3. 将项目改造成Spring Boot项目
接下来我们就在这个module的基础上进行改造,把项目改造成SpringBoot项目,这时候我们只需要在项目中添加SpringBoot的父依赖以及编译插件即可。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
4. 在pom文件中添加相关依赖
因为我们这里要实现SSM整合,所以需要有Spring、SpringMVC、Mybatis等相关依赖包,而SpringBoot中的依赖包不再想以前那样导入很多分散的依赖,只需要导入相关starter启动器即可。
<dependencies>
<!-- web支持: 1、web mvc; 2、restful; 3、jackjson支持; 4、aop ........ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!--
spring-boot mybatis依赖:
请不要使用1.0.0版本,因为还不支持拦截器插件.
-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!--mybatis分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
<!--简化bean代码-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
5. 添加识别xml文件的配置
因为本案例中,是以XML文件方式来实现SSM整合,所以我们需要在项目中能够识别所有的XML文件,我们只需要添加如下配置即可支持XML文件的识别功能了。
<build>
<!--注意:配置xml资源属性,允许java包下的xml文件可编译-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
6. 配置application.properties
接下来我们还要创建一个application.properties文件,在这里进行必要的配置,主要是设置数据源和mybaits配置,各位请根据自己的数据库信息自行配置。
#数据源配置
spring.datasource.username=root
spring.datasource.password=syc
spring.datasource.url=jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#mybatis配置
mybatis.type-aliases-package=com.yyg.boot.domain
mybatis.mapper-locations=classpath:com/yyg/boot/domain/*.xml
二. 编写核心代码
1. 创建数据库以及student表
因为本案例中需要实现SSM整合,所以离不开数据库的支持,这里我先创建一个简单的数据库表格,SQL脚本如下:
#数据库脚本
CREATE TABLE student (id INTEGER(20) PRIMARY KEY AUTO_INCREMENT NOT NULL,NAME VARCHAR(30),sex VARCHAR(4));
#添加数据语句
INSERT INTO student (NAME,sex) VALUES('三胖','男');
INSERT INTO student (NAME,sex) VALUES('特没谱','女');
2. 创建pojo实体对象
为了方便数据封装,我们可以创建出“com.yyg.boot.domain”包,在该包下面创建一个Student实体类,封装student表中的数据信息!
package com.syc.boot.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private Integer id;
private String name;
private String sex;
}
3. 编写StudentMapper接口类
接下来我们需要创建一个“com.yyg.boot.mapper”包,在该包下面创建出StudentMapper接口,这是Mybatis的dao层映射接口类,我们在这里封装好数据库操作方法。
package com.yyg.boot.mapper;
import com.yyg.boot.domain.Student;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface StudentMapper {
List<Student> getAll();
Student getById(@Param("id") int id);
}
4. 编写对应的StudentMapper.xml文件
有了Mapper接口类,肯定还需要有对应的Mapper.xml文件,这里我们编写一个StudentMapper.xml文件,存放在“com.yyg.boot.mapper”包里面。
StudentMapper.xml文件内容如下,各位可以参考创建自己的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.yyg.boot.mapper.StudentMapper">
<select id="getAll" resultType="com.yyg.boot.domain.Student">
SELECT * FROM student
</select>
<select id="getById" resultType="com.yyg.boot.domain.Student">
SELECT * FROM student
where id=#{id}
</select>
</mapper>
5. 编写service及其实现类
根据三层架构的思想,我们还应该创建一个“com.yyg.boot.service”的包及其子包“impl”。
5.1 StudentService接口
我们在service包里面创建出一个StudentService接口。
package com.yyg.boot.service;
import com.yyg.boot.domain.Student;
import java.util.List;
public interface StudentService {
/**
* 分页参数
*/
List<Student> getAll(Integer pageNum, Integer pageSize);
Student get(Integer id);
}
5.2 StudentServiceImpl实现类
然后在impl包里面,创建出对应的StudentServiceImpl实现类。
package com.yyg.boot.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yyg.boot.domain.Student;
import com.yyg.boot.mapper.StudentMapper;
import com.yyg.boot.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentMapper studentMapper;
@Override
public List<Student> getAll(Integer pageNum, Integer pageSize) {
//在查询之前设置分页,利用Mybatis的分页插件实现分页
PageHelper.startPage(pageNum, pageSize);
List<Student> list = studentMapper.getAll();
PageInfo<Student> info = new PageInfo<>(list);
return info.getList();
}
@Override
public Student get(Integer id) {
return studentMapper.getById(id);
}
}
6. 编写Controller类
接着我们再创建出一个“com.yyg.boot.web”包,在该包里面创建一个StudentController类,在该类中创建一下Web接口。
package com.syc.boot.web;
import com.syc.boot.domain.Student;
import com.syc.boot.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/stu")
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping(value = "/find", method = RequestMethod.GET)
public List<Student> find(@RequestParam(name = "pageNum",required = false,defaultValue = "1") Integer pageNum,@RequestParam(name="pageSize" ,required = false,defaultValue = "20") Integer pageSize) {
return studentService.getAll(pageNum,pageSize);
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public Student get(@PathVariable(name = "id") Integer id) {
return studentService.get(id);
}
}
7. 编写程序入口
最后我们在“com.yyg.boot”包的根目录下,创建一个程序入口类SSMApplication!这里一定要注意在该类上 配置@MapperScan注解,扫描mapper接口文件所在包!
package com.yyg.boot;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 以XML方式整合SSM.
* MapperScan:扫描Mybatis接口文件
*/
@MapperScan("com.yyg.boot.mapper")
@SpringBootApplication
public class SSMApplication {
public static void main(String[] args) {
SpringApplication.run(SSMApplication.class, args);
}
}
8. 项目包结构
最后,我们项目的核心配置与核心代码就都编写完毕了,整个项目的代码结构如下图所示:
三. 测试项目
接下来我们就把项目启动起来,看看SSM整合有没有实现。
1. 测试ssm整合及分页效果
我们通过启动入口类,把项目启动起来,进行测试。
2. 查询所有学生
项目启动起来后,我们在浏览器中可以访问如下接口,测试查询所有学生功能。
3. 根据id查询某个学生
然后我们再访问如下接口,测试根据id查询学生功能。
4. 分页查询
因为咱们项目中添加了分页依赖,这里我再测试一下分页查询功能。
结语
至此,我们就以XML配置文件的方式,实现了SSM整合功能。如果各位在以前使用过传统的SSM配置方式,你会发现,SpringBoot实现SSM整合真的简单轻松了很多,我们根本就不需要再编写那么多的xml文件了。今天的内容你学会了吗?评论区留言讨论今天的得失吧。
今日小作业:
实现SSM整合,编写一个带有页面的学生信息管理功能。