学习视频
【黑马程序员Java最新AI+若依框架项目开发新方案视频教程,基于RuoYi-Vue3前后端分离版本,从前端到后端再到AI智能化应用全通关】 https://www.bilibili.com/video/BV1pf421B71v/?p=6&share_source=copy_web&vd_source=3949d51b57b2891ea14d6e51c792bef6
后端代码分析
Controller,接收前端的请求,调用service处理业务逻辑,并返回我们的结果
/**
* 查询课程管理列表
*/
@PreAuthorize("@ss.hasPermi('course:course:list')")
@GetMapping("/list")
public TableDataInfo list(Course course)
{
//1. 开启分页
startPage();
//2. 查询课程列表
List<Course> list = courseService.selectCourseList(course);
//3. 返回表格分页数据对象
return getDataTable(list);
}
开启分页和返回表格分页数据对象这两个方法在CourseController在并不存在,而且service只是接收了条件,进行查询,并返回一个list集合,那如何做到最终返回的是一个分页数据对象呢?
首先,找到startPage的所属类在BaseController中,他手机web层通用的数据处理类,我们所有的业务Controller类默认都继承了这个BaseController,那么BaseController中所有公开的属性的方法都可以去使用了。
分页相关的
底层通过拦截器去拦截第二部的SQL语句,实现分页的功能。
那么第三步,他是怎么返回分页数据对象的呢?我们点进去看一下
当前方法也是放在了BaseController中,返回的是一个TableDateInfo对象,
第二个方法是exce的文件下载导出,放到原理篇后面讲
第三个方法是获取课程管理详细信息,返回的是一个非分页的操作结果AjaxResult,那他是怎么实现的呢?
/**
* 获取课程管理详细信息
*/
@PreAuthorize("@ss.hasPermi('course:course:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(courseService.selectCourseById(id));
}
该方法调用了AjaxResult的静态success方法,将对象传过去,而这个对象穿的格式是什么呢?
我们继续点进去,对于非分页的查询,这里面涉及到我们刚才提到的sucess,里面包含三个参数,比如说我们在做课程修改时,是需要会写这部分数据的,我们就可以把data查询出来,在页面进行显示。
那对于一些不需要返回数据对象的业务操作,比如说我们的增删改,又是怎么实现的呢?
这边同样返回的是AjaxResult,但返回的方法不再是success,而是toAjax(),这个方法干了什么事呢?我们点进去看一下。
里面接受的是sevice返回的影响行数,那刚才我们提到了对于数据库的操作,如果影响行数大于0,表示成功了,否则就是操作失败了。
现在我们知道了,将来想做分页查询,返回对象就叫TableDataInfo。将来我们做非分页的操作,咱们返回的结果就是AjaxResult。
最后我们来看一下BaseEntity