在線學習平臺-課程分頁、用戶管理、教師查詢

在線學習平臺------手把手教程👈

用戶管理

添加功能增強

新增屬性

若依里的用戶模塊(SysUser)是沒有課程這一屬性的,要實現我們自己的課程分頁查詢功能

62c4785bd3774f9598c1ce7303c26803.png

這個位置傳入的實體類SysUser要加上classId,記得加上get、set方法

更改sql語句

ctrl + 鼠標左鍵不斷點進去,查看調用位置

29af41951f754e299b3e318e26879914.png

78995be3ab30413ea8c5634607b43749.png

b8ca60eab5b34619a35f4360427298d2.png

c2b9ee74a8e64b7582b04ccb5a213f23.png

aeb25cb532554606874218b3315bcb8f.png

加入swagger文檔:

package com.ruoyi.web.controller.system.SysUserController加上Api(tags = "用戶管理")

在add方法上加ApiOperation("用戶添加")

4ccd3270a4ec45d5942827f175a08f16.png

33068b52cc384e8a99a5e4b1add81993.png

?

user_name是賬號,nick_name才是昵稱

所需參數

e639f3190cc74a098c12462716875e1e.png

563b0f87d0b54c39acce8d505a393b73.png

修改功能增強

ee3255c26a4c46629846eb25b342ba87.png

和添加操作一樣,需要在sql語句那邊加上classId屬性

查詢功能

修改之前要寫上先寫查詢功能

a9539e4944d84279a3030e5a65c055cb.png

也和添加操作一樣,一直點到sql語句的位置

161eff33e08e41c2bfd3858a2a0ac538.png

26762e3f1408441e9577d130f93f3ad9.png

e2d3da1431144f8a99f0efdd6329b183.png

課程模塊:

1b6abd78185046aca88f5ee8febe5439.png

班級名稱和教師名稱是采用關聯的方式得到

7f009c9ccaf54696853a60bb59fd9f4f.png

48b3a7b3a7ec48509d34afe69649e6ca.png

?前期準備:

?

先在domain自動生成實體類MsCourse

用lombok代替get、set方法,數據類型都改成包裝類

d9285031208848ff95dc26531751c093.png

設置實體類的自動遞增、主鍵、自動填充

package com.mashang.elearing.domain;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;import java.util.Date;@Data
public class MsCourse {@TableId(type = IdType.AUTO)private Long courseId;private String courseName;private String courseCover;private Long classId;private Long teacherId;private String delFlag;@TableField(fill = FieldFill.INSERT)private String createBy;@TableField(fill = FieldFill.INSERT)private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE)private String updateBy;@TableField(fill = FieldFill.INSERT_UPDATE)//設置返回格式@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date updateTime;private String remark;}

分頁查詢課程

 先在package com.mashang.elearing.domain.vo;生成對應的Vo
package com.mashang.elearing.domain.vo;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@ApiModel("查詢課程分頁")
@Data
public class MsCoursePageVo {@ApiModelProperty("課程id")private Long courseId;@ApiModelProperty("課程名稱")private String courseName;@ApiModelProperty("課程封面")private String courseCover;@ApiModelProperty("班級id")private Long classId;@ApiModelProperty("班級名稱")private String className;@ApiModelProperty("教師名稱")private String teacherName;@ApiModelProperty("教師id")private Long teacherId;@ApiModelProperty("備注")private String remark;}

因為是關聯查詢,不能用MyBatis-Plus,只能老實用MyBatis

package com.mashang.elearing.mapper;在這個位置建一個接口MsCourseMapper

在resources下面建一個文件夾(directory)mapper,在mapper下建一個xml-MsCourseMapper,這一個xml里面要綁定上面的MsCourseMapper

c5f1a5637940413ab2f969f58b70082f.png

第一步:

? ? ? ? 在package com.mashang.elearing.mapper里繼承BaseMapper<MsCourse>,再寫一個方法

//分頁需要傳入page對象和條件構造器對象,兩個參數要用@Param區別,// 導入的都是mybatis-plus里的對象//@Param是導自于ibatis里的Page<MsCoursePageVo> page(@Param("page")Page<MsCoursePageVo> page,@Param(Constants.WRAPPER)Wrapper wrapper);

?第二步:

? ? ? ? 去對應的xml實現這個方法

?

a8de24d40c784d2fbb38801ff755eb9d.png4f8f570bccca4b2aac57cceecd1f6b8b.png

第三步

? ? ? ? 在service層建一個 IMsCourseService 繼承 IService<MsCourse>

? ? ? ? 在serivce層下的impl包下建一個MsCourseServiceImpl 繼承(extends) ServiceImpl<MsCouseMapper,MsCourse> 再 實現自己的 IMsCourseService接口

第四步

? ? ? ? 在IMsCourseSerive寫上對應的方法

    //Pager里面放了 pageNum,和pageSize,支持通過教師id和名稱來搜索//教師id是用下拉框來實現的//班級名稱是用模糊查詢來實現的Page<MsCoursePageVo> page(Pager pager,Long teacherId,String courseName);

第五步

? ? ? ? 去MsCourseServiceImpl去實現這個方法

? ? ? ? 記得要注入Mapper層的對象

 @Autowiredprivate MsCourseMapper msCourseMapper;@Overridepublic Page<MsCoursePageVo> page(Pager pager, Long teacherId, String courseName) {//拿到page對象Page<MsCoursePageVo> p = new Page<>(pager.getPageNum(),pager.getPageSize());//拿到構造器對象,這里只能用普通的QueryWrapper//關聯查詢不能使用lamdaQueryWrapperQueryWrapper<MsCoursePageVo> qw = new QueryWrapper<>();qw.ne("t1.del_flag",2);qw.eq(teacherId != null,"t1.teacher_id",teacherId);qw.like(StringUtils.isNotEmpty(courseName),"t1.course_name",courseName);qw.orderByDesc("t1.create_time");//page方法需要一個page對象和條件構造器對象return msCourseMapper.page(p,qw);}

????????按降序排列,把新增二點放在最前面

第六步:

? ? ? ? 創建控制層MsCourseController,控制層上記得寫上@Api和@ApiOperation

? ? ? ? 固定寫法@RestController和@RequestMapping("/course")記得寫上

? ? ? ? 然后注入的是IMsCourseService

 //這里注入的是Service層的那個接口@Autowiredprivate IMSCourseService msCourseService;@ApiOperation("分頁查詢")@GetMapping("/list")//TableData是用來返回分頁數據的//@Validated參數驗證,分頁頁碼和條數必填public TableData<MsCoursePageVo> page(@Validated Pager pager, Long teacherId, String courseName){//msCourseService.page返回的是一個分頁的Page對象Page<MsCoursePageVo> page = msCourseService.page(pager, teacherId, courseName);//注意這里返回的是集合List<MsCoursePageVo> records = page.getRecords();long total = page.getTotal();return TableData.success(records,total);}

9db414da834644dfb061d0b77d425ef3.png002ac0340c894f9885f36dd33bb190e1.png

?添加接口

5efccbc7286f4e53a2348c9b571c7d84.png

課程需要courseCover、courseName、classId、teacherId(下拉框)

設置要添加的的參數實體類

在params包下創建添加的實體類

com.mashang.elearing.domain.params.course;
package com.mashang.elearing.domain.params.course;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;@ApiModel("課程添加參數")
@Data
public class MsCourseCreate {//課程Id可以在設置自動遞增,courseId不用填@ApiModelProperty(value = "課程名稱",required = true)   //這里的required只是建議@NotBlank(message = "課程名稱不能為空")     //這里的NotBlank是必須的private String courseName;//NotBlank一般用于字符串//NotNull一般用于 Long@ApiModelProperty(value = "課程封面",required = true)@NotBlank(message = "封面不能為空")private String courseCover;@ApiModelProperty(value = "班級id",required = true)@NotNull(message = "班級id不能為空")private Long classId;@ApiModelProperty(value = "教師id",required = true)@NotNull(message = "教師id不能為null")private Long teacherId;@ApiModelProperty("備注")private String remark;}

添加調用的是save方法,傳入的是MsCourse,需要將MsCourseCreate轉成MsCourse

傳參轉化

在com.mashang.elearing.mapping包下建一個接口MsCourseMapping
MsCourseMapping INSTANCE = Mappers.getMapper(MsCourseMapping.class);List<MsClassPageVo> to(List<MsClass> msClasses);

代碼

@ApiOperation("課程添加")@PostMappingpublic Result create(@RequestBody @Validated MsCourseCreate courseCreate){MsCourse msCourse = MsCourseMapping.INSTANCE.to(courseCreate);return Result.to(msCourseService.save(msCourse));}

修改接口

e45bd0c4f4ab4b638594de0ce3262cf0.png

修改相較于添加,要多傳入一個課程Id,courseId為主鍵

????????設置要修改的參數實體類

? ? ? ? 賦值添加接口的傳參,在com.mashang.elearing.domain.params.course這個這個位置創建一個

MsCourseUpdate實體類,加上課程Id,其他和添加接口一致

? ? ? ? 傳參轉化

????????MsCourse to(MsCourseUpdate update);

? ? ? ? 代碼

@ApiOperation("課程修改")@PutMapping//Json的形式傳、并且需要參數驗證public Result update(@RequestBody @Validated MsCourseUpdate update){MsCourse msCourse = MsCourseMapping.INSTANCE.to(update);return Result.to(msCourseService.updateById(msCourse));}

刪除接口?

刪除采用的是假山,調用的是UpdateById

@ApiOperation("課程刪除")@DeleteMapping("/{courseId}")//    @PathVariable參數放在路徑上public Result delete(@PathVariable Long courseId){MsCourse msCourse = new MsCourse();msCourse.setCourseId(courseId);msCourse.setDelFlag("2");return Result.to(msCourseService.updateById(msCourse));}

查詢詳情接口

創建Vo

在com.mashang.elearing.domain.vo創建對應的Vo

package com.mashang.elearing.domain.vo;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@ApiModel("查詢課程詳情")
@Data
public class MsCourseDtlVo {//這里不能只返回班級id和教師id,對應的名稱也要用關聯查詢查出來@ApiModelProperty("課程id")private Long courseId;@ApiModelProperty("課程名稱")private String courseName;@ApiModelProperty("課程封面")private String courseCover;@ApiModelProperty("班級id")private Long classId;@ApiModelProperty("班級名稱")private String className;@ApiModelProperty("教師名稱")private String teacherName;@ApiModelProperty("教師id")private Long teacherId;@ApiModelProperty("備注")private String remark;}

寫sql語句

教師名稱和班級名稱要用關聯查詢把他們查出來?

之前在courseMapper的xml寫過一樣的查詢語句,可以將之前的語句抽取出來公用

ea3f6a05f04d4a908716be93ccc030b8.png

mapper層

在MsCourseMapper里加上方法

8f0823b4552b4d8eb3cfdd23544d3631.png

寫上對應的sql語句,查詢課程詳情和查詢課程列表的返回值一樣,但最好要單獨分開

返回的時候不需要轉,sql語句的resultmap已經是我們需要的內容了

xml實現

<resultMap id="getDtlByIdMap" type="msCourseDtlVo"><id property="courseId" column="course_id"></id><result property="courseName" column="course_name"></result><result property="courseCover" column="course_cover"></result><result property="classId" column="class_id"></result><result property="teacherId" column="teacher_id"></result><result property="className" column="class_name"></result><result property="teacherName" column="nick_name"></result><result property="remark" column="remark"></result></resultMap><select id="getDtlById" resultMap="getDtlByIdMap"><include refid="listVo"></include>where t1.course_id = #{courseId}</select>
<sql id ="listVo">SELECTt1.course_id,t1.course_name,t1.course_cover,t1.class_id,t1.teacher_id,t2.class_name,t3.nick_name,t1.remarkFROMms_course AS t1LEFT JOIN ms_class AS t2 ON t1.class_id = t2.class_id
--             AND t2.class_id = t1.course_idLEFT JOIN sys_user AS t3 ON t3.user_id = t1.teacher_id</sql>

service層

同時在IMsCourseService加上對應的方法,然后實現它

7f2ad38a15b94e0e98ef664ebc68afdb.png

fa0cc27639ae4b04a4ba33cb0d2c6610.png

最終代碼代碼

  @ApiOperation("查詢詳情")@GetMapping("/{courseId}")//    @PathVariable參數放在路徑上public Result<MsCourseDtlVo> getById(@PathVariable Long courseId){//這個位置不需要轉,直接返回就行return Result.success(msCourseService.getDtlById(courseId));}

查詢教師列表

sql1

得到每個教師對應的信息

6444943ecf424caa95d6410ffc31c9c3.pngwhere后面這樣寫健壯性低,(如果刪除了一個教師,又填了一個,role_id就變成了4)可以用一個專門的標識teacher來過濾

sql2

9dcf2f92c8de4057a710c267a8dfacce.png

t1和t2關聯得到每個用戶的身份id,再用這個身份id去關聯角色表,找出對應標識為teacher的數據

如果刪除了一個教師,再新增,那么新的role_id雖然為4,但角色的唯一標識依然是teacher

c949c1ddf91f4271bb66097e5e670552.png

5c902c03ab66405ea9e9622c3477b37b.png

這兩張表可以得到role_id

faab58318ac74bbd982c48b38a70547d.png

再用這個role_id,就可以得到role_key

上面的sql語句只需要user_id和nick_name就可以了

093a1bf30dbf4facb22576ffd2a8efb1.png

根據唯一標識(role_key獲取對應用戶信息)

實體類

在對應位置com.ruoyi.system.domain.vo創建實體類

(這個功能是系統模塊的)

1bfede90a9994339bd15f9e1f18f5ab2.png

在mapper層寫上對應方法去實現

55d4c11423144d01bb089936361acce7.png

<resultMap id="selectUsersByRoleKeyMap" type="roleUserVo"><id property="userId" column="user_id"></id><result property="nickName" column="nick_name"></result></resultMap><select id="selectUsersByRoleKey" resultMap="selectUsersByRoleKeyMap">SELECTt1.user_id,t1.nick_namefrom sys_user t1left join sys_user_role t2on t1.user_id = t2.user_idLEFT JOIN sys_role t3on t3.role_id = t2.role_idWHERE t3.role_key = #{RoleKey}And t1.del_flag != '2'</select>

service層

696c994971a540719605f6ba6f4203c4.png

26532fd892924754bc14935ef43ac3f3.png

controller

控制層的調用在ruoyi-admin的SysUserController里

1de8bf82debf487ebb0ad49dcca3618b.png

@ApiOperation(value = "根據roleKey獲取用戶",notes = "teacher代表教師")@GetMapping("/users/{roleKey}")public AjaxResult getUsersByRoleKey(@PathVariable String roleKey){return success(userService.selectUsersByRoleKey(roleKey));}

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215283.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215283.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215283.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DS二叉排序樹之刪除

Description 給出一個數據序列&#xff0c;建立二叉排序樹&#xff0c;并實現刪除功能 對二叉排序樹進行中序遍歷&#xff0c;可以得到有序的數據序列 Input 第一行輸入t&#xff0c;表示有t個數據序列 第二行輸入n&#xff0c;表示首個序列包含n個數據 第三行輸入n個數據…

藍橋杯周賽 第 1 場 強者挑戰賽 6. 小球碰撞【算法賽】(思維題/最長上升子序列LIS)

題目 https://www.lanqiao.cn/problems/9494/learning/?contest_id153 思路來源 Aging代碼 題解 二分時間t&#xff0c;第i個小球對應一個起點pi、終點pit*vi的區間&#xff0c;問題轉化為&#xff0c; 選最多的區間&#xff0c;使得不存在區間包含&#xff08;即li<l…

微信小程序過濾器之計算當前時間差

微信小程序過濾器之計算當前時間差 前言一、wxs簡介二、使用步驟1.定義2.使用 前言 最近遇到了一個需求&#xff0c;將小程序里面的具體時間2023-12-11 09:41:06轉為當前時間差10小時前&#xff0c;這塊可以使用js邏輯函數對數據進行處理&#xff0c;但這里我們采用微信小程序…

Error: Failed to resolve vue/compiler-sfc——vite項目啟動報錯——npm run serve

運行項目時&#xff0c;報錯如下&#xff1a; Error: Failed to resolve vue/compiler-sfc 根據報錯信息的提示&#xff1a;vue的版本必須大于3.2.25&#xff0c;經過查看package.json文件&#xff0c;可以看到vue的版本為3.2.36&#xff0c;是滿足條件的。 因此考慮緩存問題&…

【OPNEGIS】Geoserver原地升級jetty,解決Apache HTTP/2拒絕服務漏洞 (CVE-2023-44487)

Geoserver是我們常用的地圖服務器&#xff0c;在開源系統中的應用比較廣泛。在實際環境中&#xff0c;我們可能會選用官方的二進制安裝包進行部署&#xff0c;這樣只要服務器上有java環境就可以運行&#xff0c;方便在現場進行部署。 1.問題來源 這次由于甲方一月一次的漏洞掃…

Mysql表的數據類型

數據類型 https://www.sjkjc.com/mysql/varchar/ MySQL 中的數據類型包括以下幾個大類&#xff1a; 字符串類型 數字類型 日期和時間類型 二進制類型 地理位置數據類型 JSON 數據類型 MySQL 字符串數據類型 VARCHAR&#xff1a;純文本字符串&#xff0c;字符串長度是可變的…

智能優化算法應用:基于陰陽對算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于陰陽對算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于陰陽對算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.陰陽對算法4.實驗參數設定5.算法結果6.參考文…

云計算、邊緣計算、霧計算

目錄 云計算邊緣計算霧計算 云計算 云計算是基于互聯網的計算模式&#xff0c;允許用戶通過網絡獲取計算資源、存儲資源、數據庫等服務&#xff0c;無需了解和管理底層 云計算是分布式計算的一種&#xff0c;指的是通過網絡“云”將巨大的數據計算處理程序分解成無數個小程序…

Java - Mybatis的緩存機制、集成SpringBoot后緩存相關問題

mybaits提供一級緩存&#xff0c;和二級緩存 一級緩存&#xff08;默認開啟&#xff09; 一級緩存是SqlSession級別的緩存。在操作數據庫時需要構造 sqlSession對象&#xff0c;在對象中有一個(內存區域)數據結構&#xff08;HashMap&#xff09;用于存儲緩存數據。不同的sqlSe…

STM32F407-14.3.1-01 時基單元

時基單元 可編程高級控制定時器的主要模塊是一個 16 位計數器及其相關的自動重載寄存器。計數器可遞增計數、遞減計數或交替進行遞增和遞減計數。計數器的時鐘可通過預分頻器進行分頻。 計數器、自動重載寄存器和預分頻器寄存器可通過軟件進行讀寫。即使在計數器運行時也可執行…

Linux ln命令教程:如何創建符號鏈接(附案例詳解和注意事項)

Linux ln命令介紹 Linux ln命令&#xff08;全稱&#xff1a;link files&#xff09;是一個非常重要的命令&#xff0c;它的功能是為某一個文件在另外一個位置建立一個同步的鏈接。當我們需要在不同的目錄&#xff0c;用到相同的文件時&#xff0c;我們不需要在每一個需要的目…

Python:核心知識點整理大全14-筆記

目錄 ?編輯 7.2.2 讓用戶選擇何時退出 parrot.py 7.2.3 使用標志 7.2.4 使用 break 退出循環 cities.py 7.2.5 在循環中使用 continue counting.py 7.2.6 避免無限循環 counting.py 7.3 使用 while 循環來處理列表和字典 7.3.1 在列表之間移動元素 confirmed_user…

數字圖像處理(實踐篇)二十二 使用opencv進行人臉、眼睛、嘴的檢測

目錄 1 xml文件 2 涉及的函數 3 實踐 使用opencv進行人臉、眼睛、嘴的檢測。 1 xml文件 方法① 下載 地址&#xff1a;https://github.com/opencv/opencv/tree/master/data/haarcascades 點擊haarcascade_frontalface_default.xml文件 對著Raw右鍵&#xff0c;選擇“鏈接…

【JVM從入門到實戰】(二)字節碼文件的組成

一、Java虛擬機的組成 二、字節碼文件的組成 字節碼文件的組成 – 應用場景 字節碼文件的組成部分-Magic魔數 什么是魔數&#xff1f; Java字節碼文件中的魔數 文件是無法通過文件擴展名來確定文件類型的&#xff0c;文件擴展名可以隨意修改&#xff0c;不影響文件的內容。…

機器學習筆記 - 隨機樣本共識(RANSAC) 算法

一、什么是 RANSAC? RANSAC(隨機樣本共識)是一種用于機器學習和計算機視覺的算法,隨機樣本共識(RANSAC)是一種迭代方法,用于根據包含異常值的數據集估計數學模型。RANSAC 算法的工作原理是識別數據集中的異常值,并使用不包含異常值的數據來估計所需的模型。 …

在Go中定義結構體

引言 圍繞具體細節構建抽象是編程語言可以提供給開發人員的最好工具。結構體允許Go開發人員描述Go程序運行的世界。結構體允許我們討論Address,而不是描述Street、 City或PostalCode的字符串。它們是我們努力告訴未來開發人員(包括我們自己)哪些數據對我們的Go程序是重要的,…

UE引擎 LandscapeGrass 實現機制分析(UE5.2)

前言 隨著電腦和手機硬件性能越來越高&#xff0c;游戲越來越追求大世界&#xff0c;而大世界非常核心的一環是植被&#xff0c;目前UE5引擎提供給植被生成的主流兩種方式為 手刷植被和LandscapeGrass(WeightMap程序化植被)。當然UE5.3推出新一代PCGFramework 節點程序化生成框…

MyBatis:緩存

MyBatis 緩存一級緩存二級緩存注 緩存 緩存&#xff0c;是數據交換的緩沖區&#xff08;臨時保存數據的地方&#xff09;。即將數據&#xff08;數據一般為頻繁查詢且不易改變&#xff09;保存在計算機內存中&#xff0c;下次讀取數據時直接從內存中獲取&#xff0c;以避免頻繁…

OpenAI接口調用示例

最近為公司做了一個ChatGPT工具&#xff0c;這里展示一下OpenAI接口的調用 前提條件 訪問OpenAI官網&#xff08;國內需要翻墻&#xff09;的賬號&#xff0c;需要sk 地址&#xff1a;https://platform.openai.com 依賴 使用開源工具調用OpenAI接口&#xff0c;依賴如下&am…

js中箭頭函數簡單介紹

1.箭頭函數是 ES6 中新增的一種函數定義方式&#xff0c; 簡單舉例為 var nameA function(a){return a} 可以用箭頭函數簡化為 var nameA a >a; 返回的是你輸入的值 比如 nameA(5) 返回的就是5 nameA(2) 返回的就是2 以上兩個表達的含義是一樣的。nameA為名字 2.…