SpringBoot电脑商城项目--个人资料

发布于:2025-06-17 ⋅ 阅读:(11) ⋅ 点赞:(0)

1. 个人资料-持久层

1.1 编写sql语句

  • 根据用户id查询数据库中的数据(已完成)
  • 修改用户个人信息

1.2 mapper接口抽象方法

    /**
     * 根据用户id修改用户信息
     * @param user 用户数据
     * @return
     */
    Integer updateInfoByUid(User user);

1.3 mapper对应映射文件

<!--    修改用户信息-->
    <update id="updateInfoByUid" >
        update t_user set
                          <if test="phone!=null">phone = #{phone},</if>
                          <if test="email!=null">email = #{email},</if>
                          <if test="gender!=null">gender = #{gender},</if>
                          modified_user = #{modifiedUser},
                          modified_time = #{modifiedTime}
        where uid = #{uid}
    </update>

        在mapper测试类中进行测试,检查业务逻辑性

2.个人资料-业务层

2.1 异常规划

        涉及两个功能:

  • 当页面打开时获取用户的信息并且填充到对应的文本框中
  • 检测用户是否点击修改按钮,如果检测到则执行修改用户信息的操作

        打开页面的时候可能找不到用户的数据,点击删除按钮之前需要再次去检测用户的数据是否存在。

2.2 UserService接口抽象方法开发

    /**
     * 根据用户id查询用户数据
     * @param uid 用户id
     * @return 匹配的 用户数据,如果没有匹配的数据,则返回null
     */
    User getByUid(Integer uid);
    /**
     * 修改用户数据
     * @param uid 用户id
     * @param username 用户名
     * @param user 用户数据
     */
    void changeInfo(Integer uid,String username,User user);

2.3 实现类

    /**
     * 根据用户id查询用户数据
     * @param uid 用户id
     * @return 用户数据
     */
    @Override
    public User getByUid(Integer uid) {
//        判断用户是否存在
        User user = userMapper.findByUid(uid);
        if (user==null || user.getIsDelete()==1){
            throw new UsernameNotFoundException("用户数据不存在");
        }
//        若存在,对User进行封装传递到前端展示
        User newUser = new User();
        newUser.setUsername(user.getUsername());
        newUser.setPhone(user.getPhone());
        newUser.setEmail(user.getEmail());
        newUser.setGender(user.getGender());
        return newUser;
    }

    /**
     * 修改用户资料
     * @param uid 用户id
     * @param username 用户名
     * @param user 用户数据
     */
    @Override
    public void changeInfo(Integer uid, String username, User user) {
        User result = userMapper.findByUid(uid);
        if (result==null || result.getIsDelete()==1){
            throw new UsernameNotFoundException("用户数据不存在");
        }
//        将user对象中的数据补全
        user.setUid(uid);
        user.setModifiedUser(username);
        user.setModifiedTime(new Date());
        Integer i = userMapper.updateInfoByUid(user);
//        判断是否封信成功
        if (i!=1){
            throw new InsertException("更新数据产生未知的异常");
        }
    }

        UserServiceTest 测试类进行测试,检查业务逻辑是否正确

package com.cy.store.service;

import com.cy.store.entity.User;
import com.cy.store.service.ex.ServiceException;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
class UserServiceTest {
    @Autowired
    private UserService userService;

    @Test
    void reg() {
        try {
            // 创建用户对象并设置测试数据
            User user = new User();
            user.setUsername("lingorm"); // 设置用户名为"李四"
            user.setPassword("123456"); // 设置密码为"123456"

            // 调用UserService的注册方法
            userService.reg(user);

            // 如果注册成功,输出成功提示
            System.out.println("新增成功");
        } catch (ServiceException e) {
            // 捕获业务异常,输出错误信息和异常类型名称
            System.out.println(e.getMessage()); // 打印异常消息
            System.out.println(e.getClass().getSimpleName()); // 打印异常类名
        }
    }

    @Test
    void login() {
        User user = userService.login("ling", "1234");
        System.out.println(user);
    }
    @Test
    void changePassword() {
        userService.changePassword(5, "lingorm", "123456", "1234");
    }
    @Test
    void getByUid() {
        User user = userService.getByUid(5);
        System.out.println(user);
    }
    @Test
    void changeInfo() {
        User user = new User();
        user.setPhone("12345678901");
        user.setEmail("123456@qq.com");
        user.setGender(1);
        userService.changeInfo(5, "lingorm", user);
    }

}

3. 个人资料-控制层

3.1 处理异常

        暂时没有需要处理的异常

3.2 设计请求

  • 设置一打开页面就发送查询用户数据的请求

/users/getByUid

GET

HttpSession session

JsonResult<User>

  • 点击修改按钮发送用户的数据修改操作请求的设计

/users/changeInfo

POST

User user, HttpSession session

JsonResult<Void>

3.3 编写请求业务

        /**
         * 获取当前登录用户的信息
         * @param session
         * @return
         */
        @GetMapping("/getByUid")
        public JsonResult<User> getByUid(HttpSession session) {
            Integer uid = getUidFromSession(session);
            User data = userService.getByUid(uid);
            return new JsonResult<>(OK, data);
        }

        /**
         * 修改用户信息
         * @param user
         * @param session
         * @return
         */
        @RequestMapping("/changeInfo")
        public JsonResult<Void> changeInfo(User user, HttpSession session) {
            Integer uid = getUidFromSession(session);
            String username = getUsernameFromSession(session);
            userService.changeInfo(uid, username, user);
            return new JsonResult<>(OK);
        }

3.4 测试类进行测试

 

4. 个人资料-前端页面

  • 在打开userdata.html页面时自动发送ajax请求,查询到数据填充到这个页面

        $(document).ready(function () {}) jQuery 中的一个常用方法,用于在文档(DOM)加载完成后执行指定的代码。它确保在执行代码之前,页面的 HTML 结构已经完全加载并准备好。

  • $(document):获取当前文档对象。
  • .ready():这是 jQuery 的一个方法,用于监听文档是否已经加载完成
  • function () {}:这是一个回调函数,当文档加载完成后会执行这个函数中的代码。

等价简写形式:

$(function () {
  // 这里的代码会在 DOM 加载完成后执行
});

        这段代码会在文档加载完成后绑定一个点击事件到 ID 为 `myButton` 的元素上。

// 页面	一加载就触发的方法
		$(document).ready(function () {
			//	ajax发送请求
			$.ajax({
				url: "/users/getByUid",
				type: "GET",
				data: $("#form-change-info").serialize(),
				dataType: "json",
				success: function (json) {
					if (json.state == 200) {
					//	将查询到的数据封装到  前端控件 中
						$("#username").val(json.data.username);
						$("#phone").val(json.data.phone);
						$("#email").val(json.data.email);
						let  radio = json.data.gender == 0? $("#gender-female"):$("#gender-male");
					//	prop  表示给某个属性 添加属性和属性值
						radio.prop("checked","checked");
					} else {
						alert("数据不存在")
					}
				},
				error: function (xhr) {
					alert("查询用户信息时产生未知异常"+xhr.message)
				}
			})
		})
  • 在检测到用户点击了修改按钮之后发送一个ajax请求进行修改操作
<!--		监听按钮是否被点击如果被点击触发函数	-->
		$("#btn-change-info").click(function () {
			//	ajax发送请求
			$.ajax({
				url: "/users/changeInfo",
				type: "POST",
				data: $("#form-change-info").serialize(),
				dataType: "json",
				success: function (json) {
					if (json.state == 200) {
						alert("用户信息修改成功")
					//	修改成功后重新加载页面
						location.href = "userdata.html"
					} else {
						alert("用户信息修改失败")
					}
				},
				error: function (xhr) {
					alert("用户信息修改时产生未知异常"+xhr.message)
				}
			})
		})

        userdata.html完整代码

	<script type="text/javascript">
<!--		监听按钮是否被点击如果被点击触发函数	-->
		$("#btn-change-info").click(function () {
			//	ajax发送请求
			$.ajax({
				url: "/users/changeInfo",
				type: "POST",
				data: $("#form-change-info").serialize(),
				dataType: "json",
				success: function (json) {
					if (json.state == 200) {
						alert("用户信息修改成功")
					//	修改成功后重新加载页面
						location.href = "userdata.html"
					} else {
						alert("用户信息修改失败")
					}
				},
				error: function (xhr) {
					alert("用户信息修改时产生未知异常"+xhr.message)
				}
			})
		})
		// 页面	一加载就触发的方法
		$(document).ready(function () {
			//	ajax发送请求
			$.ajax({
				url: "/users/getByUid",
				type: "GET",
				data: $("#form-change-info").serialize(),
				dataType: "json",
				success: function (json) {
					if (json.state == 200) {
					//	将查询到的数据封装到  前端控件 中
						$("#username").val(json.data.username);
						$("#phone").val(json.data.phone);
						$("#email").val(json.data.email);
						let  radio = json.data.gender == 0? $("#gender-female"):$("#gender-male");
					//	prop  表示给某个属性 添加属性和属性值
						radio.prop("checked","checked");
					} else {
						alert("数据不存在")
					}
				},
				error: function (xhr) {
					alert("查询用户信息时产生未知异常"+xhr.message)
				}
			})
		})
	</script>


网站公告

今日签到

点亮在社区的每一天
去签到