基于SpringBoot的SSMP整合案例
- SSMP案例效果演示
- SSMP案例制作流程解析
- 先开发基础CRUD功能,做一层测一层
- 调通页面,确认异步提交成功后,制作所有功能
- 添加分页功能与查询功能
模块创建
- 勾选SpringMVC与Mysql坐标
- 修改配置文件为yml格式
- 设置端口为80方便访问
实体类开发
Lombok
· Lombok,一个Java类库,提供一组注解,简化POJO实体类开发
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<!--lombok版本由SpringBoot提供,无需指定版本-->
</dependency>
· 常用注解:@Data
· 为当前实体类在编译器设置对应的get/set方法,toString方法,hashCode方法equals方法等
@Data
public class Book {
private Integer id;
private String type;
private String name;
private String description;
数据层开发
- 导入MybatisPlus与Druid对应的starter
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
- 配置数据源与MyBatisPlus对应的基础配置(id生成策略使用数据库自增策略)
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
username: root
password: root
mybatis-plus:
global-config:
db-config:
table-prefix: tbl_
id-type: auto
- 继承BaseMapper并指定泛型(开发Dao接口)
@Mapper
public interface BookDao extends BaseMapper<Book> {
}
- 制作测试类
开启MP运行日志
· 为方便调试可以开启MybatisPlus的日志(标准输出)
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
分页功能
- 使用Ipage封装分页数据
- 分页操作依赖MybaitisPlus分页拦截器实现功能
- 借助MyBatisPlus日志查阅执行SQL语句
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ldS2Bi7L-1646744588955)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20220308163742750.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JhgrItm0-1646744588956)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20220308163754519.png)]
条件查询
- 使用QueryWrapper对象封装查询
- 推荐使用LambdaQueryWrapper对象
- 所有查询操作封装成方法调用
- 查询条件支持动态条件拼装
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lUJyCFjI-1646744588956)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20220308164508039.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YFoP16un-1646744588957)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20220308164521582.png)]
业务层开发
· Service层接口定义与数据层接口定义具有较大区别,不要混用
· selectByUserAndPassword(String username, String password);
· login(String username, String password)
- 接口定义
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9e0kfFOX-1646744588958)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20220308165618711.png)]
- 实现类定义
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y3vxooKs-1646744588959)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20220308165711584.png)]
- 测试类定义
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lieq0pkS-1646744588959)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20220308165735331.png)]
· Service接口名称定义成业务名称,并于Dao接口名称进行区分
· 制作测试类测试Service功能是否有效
快速开发
· 使用MybatisPlus提供有业务层通用接口(ISerivce)与业务层通用实现类(ServiceImpl<M,T>)
· 在通用类基础上做功能重载或功能追加
· 注意重载时不要覆盖原始操作,避免原始提供的功能丢失
- 使用通用接口(ISerivce)快速开发Service
public interface IBookService extends IService<Book>{
}
//追加的操作与原始操作通过名称区分,功能类似
Boolean delete(Integer id);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AEeWh1QV-1646744588960)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20220308171612132.png)]
- 使用通用实现类 (ServiceImpl<M,T>),快速开发ServiceImpl
@Service
public class BookServiceImpl extends ServiceImpl<BookDao,Book> implements IBookService{
}
表现层开发
- 基于Restful制作表现层接口
- 新增:POST
- 删除:DELETE
- 修改:PUT
- 查询:GET
- 接受参数
- 实体数据:@RequestBodu
- 路径变量:@PathVariable
@RestControlller
@RequestMapping("/books")
public class BookController{
@Autowired
private IBookService bookService;
@GetMapping("/{id}")
public Book getById(@PathVariable Integer id){
return bookdService.getById(id);
}
}
表现层信息一致处理
- 设计统一的返回值结果类型便于前端开发读取数据
- 返回值结果类型可以根据需求自行设定,没有固定格式
- 返回值结果模型类用于后端与前端进行数据格式统一,也称为前后端数据协议
· 设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也称为前后端数据协议
@Data
public class R{
private Boolean flag;
private Object data;
public R()