




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务四
实现用户管理模块HTTPAPI04
任务描述本任务将完成用户管理模块,包含用户的添加、删除、修改、查询功能;管理员通过账号密码生成具有管理员权限的token后,能够根据用户信息中的用户ID对用户信息进行新增、删除和修改,并通过接口分页获取用户信息。在本任务中,将学习如何设计API接口。
知识准备1.MyBatis框架:见项目22.Mybatis常用注解(1)@Mapper注解添加了@Mapper注解之后,这个接口在编译时会生成相应的实现类。需要注意的是:这个接口中不可以定义同名的方法,因为会生成相同的id;也就是说这个接口是不支持重载的。(2)@Insert注解插入sql,和xml<insert>sql语法完全一样。每个注解分别代表将会被执行的SQL语句。它们用字符串数组(或单个字符串)作为参数。如果传递的是字符串数组,字符串数组会被连接成单个完整的字符串,每个字符串之间加入一个空格。这有效地避免了用Java代码构建SQL语句时产生的“丢失空格”问题。当然,你也可以提前手动连接好字符串。属性:value,指定用来组成单个SQL语句的字符串数组。
知识准备(3)@Delete注解删除sql,和xml<delete>sql语法完全一样(4)@Update注解更新sql,和xml<update>sql语法完全一样(5)@Select注解查询sql,和xml<select>sql语法完全一样
知识准备(6)@Param注解如果你的映射器的方法需要多个参数,这个注解可以被应用于映射器的方法参数来给每个参数一个名字。否则,多参数将会以它们的顺序位置来被命名(不包括任何RowBounds参数)比如。#{param1},#{param2}等,这是默认的。使用@Param(“person”),参数应该被命名为#{person}。(7)@Options注解这个注解提供访问交换和配置选项的宽广范围,它们通常在映射语句上作为属性出现。而不是将每条语句注解变复杂,Options注解提供连贯清晰的方式来访问它们。
知识准备
任务实施步骤1:新建用户Mapper接口t在项目目录mapper包下,新建UserInfoMapper类,结果如图3-30所示:
任务实施步骤1:新建用户Mapper接口t1.在UserInfoMapper类中添加下面的代码:@MapperpublicinterfaceUserInfoMapper{
@Select("selectuserId,userAccount,userPass,locked,roleId,roleName,faceimgfromuserinfo,roleinfowhereuserinfo.role=roleinfo.roleIdorderbyuserId") publicList<UserInfo>getAllUser();
@Insert("insertintouserinfo(userAccount,userPass,role,faceImg)values(#{info.userAccount},#{info.userPass},#{info.roleId},#{info.faceimg})") @Options(useGeneratedKeys=true,keyProperty="info.userId") publicIntegeraddUser(@Param("info")UserInfouser);
@Select("selectuserId,userAccount,userPass,locked,roleId,roleName,faceimgfromuserinfo,roleinfowhereuserinfo.role=roleinfo.roleIdorderbyuserIdlimit#{first},#{max}") publicList<UserInfo>getUserByPage(@Param("first")intfirst,@Param("max")intmax); @Select("selectcount(*)fromuserinfo") publicLonggetMaxPage();
@Delete("deletefromuserinfowhereuserId=#{userId}") publicvoiddeleteUser(@Param("userId")IntegeruserId);
任务实施步骤1:新建用户Mapper接口t@Update("updateuserinfosetuserPass=#{info.userPass},faceimg=#{info.faceimg}whereuserId=#{info.userId}") publicvoidmodify(@Param("info")UserInfoinfo); @Update("updateuserinfosetuserPass=#{info.userPass},faceimg=#{info.faceimg},role=#{info.roleId}whereuserId=#{info.userId}") publicvoidadminModify(@Param("info")UserInfoinfo); @Select("selectuserId,userAccount,userPass,locked,roleId,roleName,faceimgfromuserinfo,roleinfowhereuserinfo.role=roleinfo.roleIdanduserId=#{userId}") publicUserInfogetUserById(@Param("userId")IntegeruserId); @Select("selectuserId,userAccount,userPass,locked,roleId,roleNamefromuserinfo,roleinfowhereuserinfo.role=roleinfo.roleIdanduserinfo.userId=#{info.userId}") publicList<UserInfo>checkPass(@Param("info")UserInfoinfo);
@Select("selectuserId,userAccount,userPass,locked,roleId,roleName,faceimgfromuserinfo,roleinfowhereuserinfo.role=roleinfo.roleIdanduserinfo.userAccount=#{userAccount}") publicList<UserInfo>findUsersByName(@Param("userAccount")StringuserAccount);}
任务实施步骤2:新建用户Service类t1.在项目目录service包下,新建admin包,结果如图3-31所示:
任务实施步骤2:新建用户Service类t2.在项目目录service.admin包下,新建UserService类,结果如图3-32所示:
任务实施步骤2:新建用户Service类t3.在UserService类中添加下面的代码@ServicepublicclassUserService{ @AutowiredUserInfoMappermapper; publicUserInfoMappergetMapper(){ returnmapper; } publicvoidsetMapper(UserInfoMappermapper){ this.mapper=mapper; }
}
任务实施步骤2:新建用户Service类t4.在UserService类中添加用于增删改的方法(1)添加用户的方法/** *添加用户的方法 *@paraminfo需要添加的用户信息 **/ publicvoidaddUser(UserInfoinfo){ //创建加密工具 info.setUserPass(newBCryptPasswordEncoder().encode(info.getUserPass())); //执行用户信息插入操作 mapper.addUser(info); }
任务实施步骤2:新建用户Service类t(2)删除用户的方法 /** *删除用户的方法 *@paramuserId待删除用户的Id **/ publicvoiddeleteUser(IntegeruserId){ //获取带有连接池的数据库模版操作工具对象 mapper.deleteUser(userId); }
任务实施步骤2:新建用户Service类t(3)修改用户的方法 /** *修改用户自身信息的方法 *@paraminfo需要修改的用户信息,其中userId属性指明需要修改的用户ID,其他信息为目标值,本人修改信息只能修改密码和头像 **/ publicvoidmodify(UserInfoinfo){ //获取带有连接池的数据库模版操作工具对象 info.setUserPass(newBCryptPasswordEncoder().encode(info.getUserPass())); //修改本人信息 mapper.modify(info); } /** *管理员修改用户信息的方法 *@paraminfo需要修改的用户信息,其中userId属性指明需要修改的用户ID,其他信息为目标值 **/ publicvoidadminModify(UserInfoinfo){ info.setUserPass(newBCryptPasswordEncoder().encode(info.getUserPass())); //修改本人信息 mapper.adminModify(info); }
任务实施步骤2:新建用户Service类t5.在UserService类中添加用于查询的方法(1)分页获取用户数据的方法/** *分页获取用户数据的方法 *@parampage要获取数据的页号 *@parampageSize每页显示的条目数 *@return当前页的用户数据列表 **/ publicList<UserInfo>getByPage(intpage,intpageSize){ //获取带有连接池的数据库模版操作工具对象 intfirst=(1)*pageSize; //返回结果 returnmapper.getUserByPage(first,pageSize); } /** *获取用户信息的最大页数 *@parampageSize每页显示的条目数 *@return当前数据库中数据的最大页数 **/ publicintgetMaxPage(intpageSize){ //获取最大页数信息 Longrows=mapper.getMaxPage(); //返回最大页数 return(int)((rows.longValue()-1)/pageSize+1); }
任务实施步骤2:新建用户Service类t(2)根据ID获取用户详细信息的方法 /** *根据ID获取用户详细信息的方法 *@paramuserId需要获取详细信息的用户ID *@return返回查询到的用户详细信息 **/ publicUserInfogetUserById(IntegeruserId){ returnmapper.getUserById(userId); } publicList<UserInfo>findUserByName(StringuserAccount){ returnmapper.findUsersByName(userAccount); }
任务实施步骤2:新建用户Service类t6.在UserService类中添加用于检查用户名是否可用的方法/**
*验证用户用户名密码是否正确的方法 *@paraminfo用于判定用户名、密码的用户对象
*@return用户名、密码是否验证通过,true表示用户名密码正确、false表示用户名或密码错误 **/ publicbooleancheckPass(UserInfoinfo){
//根据给定的用户名查询用户信息 List<UserInfo>userList=mapper.checkPass(info);
//判定查询结果集合 switch(userList.size()){
//如果没有查询到任何数据 case0:
//返回验证失败 returnfalse;
//如果查询到一条记录则判定密码是否一致 case1:
//构建加密对象 BCryptPasswordEncoderencoder=newBCryptPasswordEncoder();
//判定用户给定的密码和数据库中的密码是否一致 if(encoder.matches(info.getUserPass(),userList.get(0).getUserPass())){
//如果一致,则返回true returntrue;
//如果不一致 }else{
//返回用户名、密码不匹配 returnfalse; } }
//其他情况下返回验证失败 returnfalse; }
任务实施步骤3:新建用户Controller类t1.在项目目录api包下,新建admin包,结果如图3-33所示
任务实施步骤3:新建用户Controller类t2.在项目目录api.admin包下,新建AdminUserController类,结果如图3-34所示:
任务实施步骤3:新建用户Controller类t3.在AdminUserController类中添加下面的代码@PreAuthorize("hasRole('1')")@RestController@RequestMapping("/admin/user")publicclassAdminUserController{ @AutowiredUserServiceservice; publicUserServicegetService(){ returnservice; } publicvoidsetService(UserServiceservice){ this.service=service; } @RequestMapping("/adminmodifyuser") publicResultsadminModify(UserInfoinfo){if(info.getUserPass().isEmpty()){ info.setUserPass("1"); }
//执行修改操作 service.adminModify(info); returnResults.success(info); }
任务实施步骤3:新建用户Controller类t@RequestMapping("/deleteuser") publicResultsdeleteUser(IntegeruserId){ service.deleteUser(userId); returnResults.ok(); } @GetMapping("/get") publicResults<UserInfo>getUser(IntegeruserId){ UserInfouser=service.getUserById(userId); user.setUserPass(""); returnResults.success(user); } @RequestMapping("/getuserbypage") publicPageResultsgetUserByPage(intpage){
//获取最大页码数 intmaxPage=service.getMaxPage(10);
//对当前的页码数进行纠错,如果小于1,则直接显示第一页的内容 page=page<1?1:page;
//对当前的页码数进行纠错,如果大于最大页码,则直接显示最后一页的内容 page=page>maxPage?maxPage:page;
//进行分页数据查询 List<UserInfo>list=service.getByPage(page,10);
//过滤掉密码信息 list=list.stream().map(item->{item.setUserPass("");returnitem;}).collect(Collectors.toList());
//尝试将结果结构化 returnPageResults.success(list,page,maxPage); }
任务实施步骤3:新建用户Controller类t@RequestMapping("/modifyuser") publicResultsmodifyMyInfo(UserInfoinfo){ service.modify(info); //修改信息后需要自动注销 returnResults.success(info); } @RequestMapping("/adduser")
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 芋头粗加工管理制度
- 英语社团机管理制度
- 财务会计管理制度范本
- 财务管理项目化教材习题参考答案
- 财务部月度工作计划格式
- 财务会计应用补充练习
- 视觉感知行业面临的挑战分析
- 计算机网络技术基础 教案
- 山东省济宁市邹城市第一中学2024-2025学年高一下学期5月月考生物试卷(有答案)
- 江苏省南通市期末模拟试卷(含答案)2024-2025学年统编版语文八年级下册
- 凉山州木里县选聘社区工作者笔试真题2024
- 2025年安徽省高考物理试卷真题(含答案解析)
- 配电线路高级工练习试题附答案
- (2025)干部任前廉政知识考试题库及答案
- 护士N2理论考试试题及答案
- GB/T 45439-2025燃气气瓶和燃气瓶阀溯源二维码应用技术规范
- YC/T 620-2024烟草零售客户满意度调查规范
- 《公路桥梁挂篮设计与施工技术指南》
- 16J914-1 公用建筑卫生间
- 2024年南昌市产业投资集团有限公司招聘笔试参考题库附带答案详解
- 试验检测单位安全培训课件
评论
0/150
提交评论