• 仿抖音短视频用户业务模块----完成用户信息增删改查并通过接口文档联调(模拟工作环境)


    仿抖音项目持续更新中:
    仿抖音短视频APP专栏

    练习:

    目录

    1.根据nickname或者mobile来查询用户信息

     2.根据用户id删除用户信息

    3.根据用户id修改用户信息


    1.根据nickname或者mobile来查询用户信息

    首先在controller层中,写一个路由地址,这里我们的用户信息用列表返回。

     注:我们这里传参是DTO,这里我在model层重写了一个类来存放nickname和mobile,

     接着在我们的service接口中写方法:

    在实现类中调用mapper层的接口:

     在mapper接口中:

    最后就需要在我们的xml文件里来操作数据库查询用户信息:

    1. <select id="getUserListByQuery" resultType="com.imooc.vo.UsersVO">
    2. SELECT
    3. id,mobile,nickname,imooc_num,face,sex,birthday,
    4. country,province,city,district,description,
    5. bg_img,can_imooc_num_be_updated
    6. FROM users
    7. WHERE 1=1
    8. <if test="nickname != null">
    9. AND nickname= #{nickname}
    10. </if>
    11. <if test="mobile != null">
    12. And mobile = #{mobile}
    13. </if>
    14. </select>

    这里为什么会使用1=1,因为我们sql语句中没有 where和AND连用的语法,if是标签.

    随后我们在接口文档中测试:

     打开navicat检查:

    成功。

     2.根据用户id删除用户信息

    在我们的controller层来随便写一个路由名字,我们这里用HashMap来接受返回的用户信息,键是成功,值是service层返回的结果。

     在service写接口:

     注:这里返回的是布尔类型,传入的参数是String类型。

    实现Service接口:

    1. @Transactional
    2. @Override
    3. public boolean deleteUser(String userId) {
    4. if (StringUtils.isNotBlank(userId)) {
    5. try {
    6. int effectedNum = usersMapper.deleteUser(userId);
    7. if (effectedNum > 0) {
    8. return true;
    9. } else {
    10. throw new RuntimeException("删除用户信息失败!");
    11. }
    12. } catch (Exception e) {
    13. throw new RuntimeException("删除用户信息失败:" + e.toString());
    14. }
    15. }else{
    16. throw new RuntimeException("Id不能为空!");
    17. }
    18. }

     这里我们要清除一点,我们的数据库完成增加或删除后返回的是影响行数,我们这里需要用int来接受。如果影响行数大于1,则说明删除成功。

    在mapper层写接口:

     最后在xml文件中,完成用户信息删除:

    这里其实我后来发现我犯了一个错误,这里如果传入的UserId为空,就会导致所有表被删除,这是个很严重的错误,我们不应该使用1=1 和 if标签,应该直接:

    1. <delete id="deleteUser" >
    2. DELETE FROM
    3. users
    4. WHERE
    5. id =#{userId}
    6. </delete>

     重启,打开我们的接口文档:

    打开navicat检查:

     删除成功。

    3.根据用户id修改用户信息

    首先在controller层中,用Map接受返回的键和值 

    这里Uptate我写了一个类来传入我们需要修改的信息:

     

    接着在service接口:

     在service实现类中:

    1. @Transactional
    2. @Override
    3. public boolean modifyUserInfo(UpdateDTO updateDTO) {
    4. if (StringUtils.isNotBlank(updateDTO.getUserId())) {
    5. try {
    6. int effectedNum = usersMapper.modifyUserInfo(updateDTO);
    7. if (effectedNum > 0) {
    8. return true;
    9. } else {
    10. throw new RuntimeException("用户信息修改失败!");
    11. }
    12. } catch (Exception e) {
    13. throw new RuntimeException("修改用户信息失败:" + e.toString());
    14. }
    15. }else{
    16. throw new RuntimeException("Id不能为空!");
    17. }
    18. }

    注:我们这里调用了updateDTO中的get方法获取UserId,虽然我们DTO中没有写方法,但我们的注解会帮助我们自动生成。

    接着我们要在mapper层写接口:

     最后就是在xml文件中来操作我们的数据库完成修改:

     

    1. "modifyUserInfo" parameterType="com.imooc.vo.UsersVO">
    2. update users
    3. <if test="nickname != null">nickname= #{nickname},if>
    4. <if test="mobile != null">mobile = #{mobile},if>
    5. where id=#{userId}

    接着重启类:

    然后在接口文档中修改:

     

     在navicat中查看:

     修改成功。

     

  • 相关阅读:
    canvas画布绘制线条样式:粗细,圆角,拐角等
    java常见微服务架构
    Redis系列之常见数据类型应用场景
    编译可执行程序的Makefile模块
    南卡护眼灯和好视力护眼灯哪个好?深度测试对比两款护眼台灯
    Golang【Web 入门】 08 集成 Gorilla Mux
    指针和数组笔试题解析
    【鸿蒙软件开发】ArkTS常用组件之Button
    动态SQL之sql标签(片段)
    【千锋Python2205班10.20笔记-day04-接口和常见反爬(一阶段)】
  • 原文地址:https://blog.csdn.net/m0_64005381/article/details/127449392