文章目录

  • 一.模块创建
  • 二. 实体类开发
    • 2.1 配置数据库连接
    • 2.2 使用Lombok定义实体类
  • 三.Dao层开发
    • 3.1 导入MybatisPlus与Druid的对应的Starter
    • 3.2 配置文件内配置Druid数据源
    • 3.3 创建Dao接口
    • 3.4 开启MybatisPlus日志
    • 3.5 开启分页组件
    • 3.6 目前项目结构
  • 四. Service层开发
    • 4.1 传统开发方式
      • 4.1.1 创建Service接口
      • 4.1.2 实现Service接口
      • 4.1.3 当前目录结构
    • 4.2 MybatisPlus快速开发
      • 4.2.1 定义Service接口
      • 4.2.2 实现Service接口
  • 五.View层开发
    • 5.1 编写控制器代码
    • 5.2 PostMan测试
    • 5.3 表现层数据一致性处理
    • 5.4 前后端调用
  • 六.项目功能开发
    • 6.1 列表功能
    • 6.2 添加人员功能实现
    • 6.3 删除人员功能实现
    • 6.4 修改人员功能实现
    • 6.5 异常消息处理
    • 6.7 分页操作
    • 6.8 条件查询

该项目基于SpringBoot+vue+elementUi+Mysql

一.模块创建

创建SpringBoot项目:创建时勾选SpringMVC和MySQL坐标

二. 实体类开发

2.1 配置数据库连接

spring: #Druid数据源datasource:druid:username: rootpassword: 123456url:jdbc:mysql://localhost:3306/mybatisplus?userSSL=false&useUnicode=true&characterEncoding=utf-8driver-class-name:com.mysql.cj.jdbc.Driver

表信息如下:

2.2 使用Lombok定义实体类

涉及到mybatisplus看这篇博客
涉及到Lombok看这篇博客

package com.ssmtest.test.Pojo;
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User{@TableId(type= IdType.AUTO)     //设置主键ID自增private long id;private String name;private long age;private String email;@TableField(fill = FieldFill.INSERT_UPDATE)  //插入和更新时自动填充private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE)  //插入和更新时自动填充private Date updateTime;@Version   //加入乐观锁private long version;@TableLogic   //逻辑删除private long flage;
}

三.Dao层开发

3.1 导入MybatisPlus与Druid的对应的Starter

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.9</version>
</dependency>

3.2 配置文件内配置Druid数据源

spring: #Druid数据源datasource:druid:username: rootpassword: 123456url:jdbc:mysql://localhost:3306/mybatisplus?userSSL=false&useUnicode=true&characterEncoding=utf-8driver-class-name:com.mysql.cj.jdbc.Driver

3.3 创建Dao接口

@Repository
public interface UserDao extends BaseMapper<User> {}

3.4 开启MybatisPlus日志

在配置文件中配置即可

mybatis-plus:global-config:db-config:logic-delete-value: 1logic-not-delete-value: 0configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.5 开启分页组件

定义一个配置类,将分页拦截器加入即可

 @Bean   //分页插件public PaginationInterceptor pageInationInterceptor(){return new PaginationInterceptor();}

3.6 目前项目结构

四. Service层开发

4.1 传统开发方式

4.1.1 创建Service接口

public interface UserService {Boolean save(User user);Boolean update(User user);Boolean delete(long id);User getByid(long id);List<User> getAll();
}

4.1.2 实现Service接口

@Service
public class UserServiceImpl implements UserService {@AutowiredUserDao userDao;@Overridepublic Boolean save(User user) {return userDao.insert(user)>0;}@Overridepublic Boolean update(User user) {return userDao.updateById(user)>0;}@Overridepublic Boolean delete(long id) {return userDao.deleteById(id)>0;}@Overridepublic User getByid(long id) {return userDao.selectById(id);}@Overridepublic List<User> getAll() {return null;}
}

4.1.3 当前目录结构

4.2 MybatisPlus快速开发

4.2.1 定义Service接口

继承Iservice类,它会自动帮我们提供一些常用的service方法

public interface UserService extends IService<User> {IPage<User> getPage(int currentpage,int pageSize);  //分页
}

4.2.2 实现Service接口

继承ServiceImpl,两个泛型分别是基于的Dao和基于的Pojo类,然后实现一下前面的Service接口即可

@Service
public class UserServiceImpl extends ServiceImpl<UserDao,User>implements UserService {@Autowiredprivate  UserDao userDao;@Overridepublic IPage<User> getPage(int currentpage, int pageSize) {IPage page=new Page(currentpage,pageSize);userDao.selectPage(page,null);return  page;}
}

五.View层开发

5.1 编写控制器代码

@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMappingpublic List<User> getAllUser(){return  userService.list(null);}@PostMappingpublic boolean save(@RequestBody User user){return  userService.save(user);}@PutMappingpublic boolean updateUser(@RequestBody User user){return  userService.update(user,null);}@DeleteMapping("{id}")public boolean updateUser(@PathVariable Long id){return  userService.removeById(id);}@GetMapping("{id}")public User getByid(@PathVariable Long id){return  userService.getById(id);}}

5.2 PostMan测试

编写完控制器后就可以开始运行springboot程序了,然后在postman软件中输入地址就可以看到结果了,查询结果如下:

5.3 表现层数据一致性处理

在刚刚测试时我们发现前端收到后端的消息的格式是各不相同的,例如增删改收到的消息格式如下:

查询单个收到的数据格式如下:

各种不同的数据格式会对前端工程师的数据处理造成困扰,所以要对表现层数据进行一致性处理,思想是将所有类型的数据放在一个data对象里面,以后前端取数据data对象里面取即可,同时加入一个flag标志此次操作的结果(是成功还是失败),具体操作方法如下:

  1. 设计表现层返回结果的模型类,用于后端和前端进行数据格式的统一,也称为前后端数据协议
@Data
public class R {private Boolean flag;private Object data;
}
  1. 编写控制器代码
@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMappingpublic R getAllUser(){R r=new R();r.setFlag(true);r.setData(userService.list(null));return r ;}@PostMappingpublic R save(@RequestBody User user){R r=new R();r.setFlag(userService.save(user));r.setData(null);return r ;}@PutMappingpublic R updateUser(@RequestBody User user){R r=new R();r.setFlag( userService.update(user,null));r.setData(null);return  r;}@DeleteMapping("{id}")public R deleteUser(@PathVariable Long id){R r=new R();r.setFlag(userService.removeById(id) );r.setData(null);return  r;}@GetMapping("{id}")public R getByid(@PathVariable Long id){R r=new R();r.setFlag(true);r.setData( userService.getById(id));return  r;}   @GetMapping("{currentPage}/{pageSize}")public R getPage(@PathVariable int currentPage,@PathVariable int pageSize){IPage<User> page=userService.getPage(currentPage,pageSize);//如果当前页面值大于总页面值,重新执行查询操作,使用最大页面值R r=new R();r.setData(page);r.setFlag(true);return r;}
}
  1. 前端结果

可以发现我们数据的格式都已经统一了

5.4 前后端调用

前后端分离结构中页面归属前端服务器
单体工程中页面放置在resources目录下的static目录中

  1. 导入页面
    (链接: https://pan.baidu.com/s/1zHMRVd8NQDT6buYHK3YaJw 提取码: jack )


2. books.html页面效果

3. axios发送异步请求访问controller

运行结果

六.项目功能开发

6.1 列表功能

代码编写

实现效果

6.2 添加人员功能实现

  1. 请求方式使用Post调用后台对应操作
  2. 添加操作结束后动态刷新页面加载数据
  3. 根据操作结果的不同,显示对应的提示信息
  4. 弹出div时清除表单数据
  1. 开启弹层

    结果演示

点击新建出现弹窗

  1. 发送axios异步请求

查看数据库数据是否添加成功

6.3 删除人员功能实现

  1. 请求方式用Delete来调用后台对应的操作
  2. 删除操作需要传递当前行数据对应的id值到后台
  3. 删除操作结束后动态刷新页面加载数据
  4. 根据操作结果的不同,显示对应的提示信息
  5. 删除操作前弹出提示框避免误操作

删除结果展示

6.4 修改人员功能实现

  1. 修改弹出窗口
  1. 加载要修改数据通过传递当前行数据对应的id值到后台查询数据
  2. 利用前端数据双向绑定将查询到的数据进行回显

弹出窗口效果

2. 实现修改操作

  1. 请求方式使用Put调用后台对应的操作
  2. 修改操作结束后动态刷新页面加载数据
  3. 根据操作结果的不同,显示对应的提示信息

修改结果

6.5 异常消息处理

  1. 在控制器中模拟手动抛出异常

    postman测试

所以业务在处理时可能因为后台代码的BUG导致数据的格式不统一,所以重点是前端如何处理这些后台抛出的异常进行处理

  1. 编写异常处理类

    Postman解决异常拦截效果
  2. 前端展示错误信息
    修改前端代码

前端展示错误信息结果

6.7 分页操作

  1. 使用el分页
  2. 定义分页组件绑定的数据模型
  3. 异步调用获取分页数据
  4. 分页数据页面回显
  1. 重写getAll方法实现分页

效果展示

2. 实现响应换页

换页效果

3. 分页bug解决(当某一页只有一条数据,删除这条数据后,页面数量不减少)

修改控制器代码即可

6.8 条件查询

  1. 给条件查询定义数据


2. 输入框绑定数据模型

  1. 修改getAll方法


4. 修改controller代码

5. 修改Service代码


6. 修改Service实现类代码

7. 查询效果

项目地址

SpringBoot整合SSM项目实战相关推荐

  1. 二、springBoot 整合 mybatis 项目实战

    文章目录 前言 引入mybatis依赖 Entry层 Dao 层 Service 层 service 接口 serviceImpl 具体实现类. controller 层 测试 配置多环境文件 配置日 ...

  2. springboot整合ssm(mybatis)

    SpringBoot整合ssm 1.创建工程 使用idea可以快速创建SpringBoot的工程 这里选择常用的类库,SpringBoot将各种框架类库都进行了封装,可以减少pom文件中的引用配置: ...

  3. Springboot 整合 SSM 入门

    Springboot 整合 SSM 入门 首先是创建一个springboot项目 然后下面是pom.xml <project xmlns="http://maven.apache.or ...

  4. 2023新版图文详解SpringBoot整合SSM框架(附源码)

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 教程概述 本教程以图文形式详细讲解SpringBoot整合SSM框架的流程以及具体步骤及其注意 ...

  5. 实践丨SpringBoot整合Mybatis-Plus项目存在Mapper时报错

    本文分享自华为云社区<SpringBoot整合MybatisPlus项目存在Mapper时运行报错的问题分析与修复>,作者:攻城狮Chova . 异常信息 在SpringBoot运行测试M ...

  6. SpringBoot+MyBatis+MYSQL项目实战六(新增收货地址)

    SpringBoot+MyBatis+MYSQL项目实战六(新增收货地址) 项目源码地址:电脑商城实战 点击新增收货地址 一:新增收货地址--数据表的创建 CREATE TABLE t_address ...

  7. 重磅回归-SSM整合进阶项目实战之个人博客系统

    历经一个多月的重新设计,需求分析以及前后端开发,终于有了一定的输出:我自己实现的spring4+springmvc+mybatis3整合的进阶项目实战-个人博客系统 已然完成了,系统采用mvc三层模式 ...

  8. app商城源码_海量的SpringBoot和SSM项目【附带源码+视频教程】快速成为全栈

    为了帮助更多的小伙伴进行项目的锻炼,孟哥整理较多的实战项目,包括SSM.Springboot.Springcloud.小程序等. 各种项目还在不断的更新中--仅限制学习使用,若有侵权,请联系删除. 点 ...

  9. SpringBoot 整合WebSocket 简单实战案例

    前言 这个简单实战案例主要目的是让大家了解websocket的一些简单使用. 另外使用stomp方式的: <Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 ...

最新文章

  1. nginx或httpd实现负载均衡tomcat(三)
  2. 从 2017 OpenStack Days China 看国内云计算的发展现状
  3. 动态矩阵控制 MATLAB代码
  4. Gson转换 — json数据转换为Object实体公共方法
  5. CSS实现垂直居中的5种方法
  6. mongodb atlas_如何使用MongoDB Atlas将MERN应用程序部署到Heroku
  7. 计算机编程是考研什么专业,程序员考研该不该继续选择计算机专业
  8. (71)FPGA面试题-使用不同的代码实现2-4译码器?使用case语句
  9. 为什么买入不了创业版_趋势波段买卖创业板ETF指数基金能轻松保险盈利
  10. 有关Silverlight3.0在浏览器外运行的问题
  11. Python之路(第二十七篇) 面向对象进阶:内置方法、描述符
  12. 基于springboot+vue的医院预约系统(前后端分离)
  13. 震惊世界的中国秘方————里面的方子都是一个老中医几十年的心血!!!...
  14. Maven依赖冲突避坑指北
  15. 今日头条内推码URQVEYM社招,校招,实习应有尽有
  16. LaTex 之 数学运算符号
  17. os.path.abspath和os.path.realpath区别
  18. 我的500行代码 VS 资深大佬的50行代码
  19. 300道SpringCloud面试题及答案(最新整理)
  20. 编码电机测速(stm32f1/HAL库/CubeMX/编码器模式/平衡小车/直流减速电机/超详细)

热门文章

  1. RF基础(相位和波长、回波损耗和驻波比、电缆阻抗、极化、天线波束宽度)
  2. hive配置参数的说明:
  3. Delphi----心得03
  4. 土人健身之初学者的增肌完全攻略
  5. 代理加盟共享充电宝的理由
  6. 手动搭建 DNS Server 使用 FQDN 安装 VMware VCSA 7.0 详细过程
  7. ajax调用ashx的方法,jquery.ajax请求aspx和ashx的异同 Jquery Ajax调用aspx页面方法
  8. 翻译Deep Learning and the Game of Go(14)第十二章 采用actor-critic方法的强化学习
  9. 紫星文件通(班委学委收集作业查人神器)
  10. 余弦窗(汉宁窗)的作用——图像预处理