(五)搭建springboot商城--个人信息

1.个人资料-持久层

1.1需要规划SQL语句

1.更新用户信息的SQL语句

update t_user set phone=?,email=?,gender=?,modified_user=?,modifier_time=? where uid=?

2.根据用户名来查询用户的数据。

select * from t_user where uid=?

查询用户的数据不需要再重复开发。  

 1.2 接口和抽象方法

更新用户的信息方法的定义。

    /**
     * 更新用户的数据信息
     * @param user 用户的数据
     * @return 返回值为受影响的行数
     */
    Integer updateInfoByUid(User user);

 1.3 抽象方法的映射

在UserMapper.xml文件中进行映射编写。

 <update id="updateInfoByUid">
        update t_user
        set
            <!-- if表示条件判断标签,test接收的是一个返回值为布尔类型的条件
            如果test条件为真,则执行if标签内部的语句,反之则不执行-->
        <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>

 在测试类中完成功能的测试。

@Test
    public void updateInfoByUid(){
        User user = new User();
        user.setUid(9);
        user.setPhone("18844556444");
        user.setEmail("1418401993@qq.com");
        user.setGender(1);
        userMapper.updateInfoByUid(user);
    }

2.个人资料-业务层

2.1异常规划

1.设计了两个功能:

        ·当打开页面时获取用户的信息并且填充到对应的文本框中。

        ·检测用户是否点击了修改按钮,如果检测到则执行修改用户信息的操作。

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

2.2 接口和抽象方法

主要有两个功能的模块,对应的是两个抽象方法的设计。

 /**
     * 根据用户的id查询用户的数据
     * @param uid 用户id
     * @return 用户的数据
     */
    User getByUid(Integer uid);

    /**
     * 更新用户的数据操作
     * @param uid 用户的id
     * @param username 用户的名称
     * @param user 用户对象的数据
     */
     void changeInfo(Integer uid,String username,User user);

2.3 实现抽象方法

在UserServiceImpl类中添加两个抽象方法的具体实现。

@Override
    public User getByUid(Integer uid) {
        User result = userMapper.findByUid(uid);
        if(result==null||result.getIsDelete()==1){
            throw new UsernameNotFoundException("用户没有被找到");
        }
        User user=new User();
        user.setUsername(result.getUsername());
        user.setPhone(result.getPhone());
        user.setEmail(result.getEmail());
        user.setGender(result.getGender());
        return user;
    }
    /**
     * User对象中的数据phone/email/gender,手动再将uid,username封装在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.setUid(uid);
        //user.setUsername(username);
        user.setModifiedUser(username);
        user.setModifiedTime(new Date());
        Integer rows = userMapper.updateInfoByUid(user);
        if(rows !=1){
            throw new UpdateException("更新数据异常");
        }

    }

在测试类进行功能单元测试。 

    public void getByUid(){
        System.out.println(userService.getByUid(9));
    }

    @Test
    public void changeInfo(){
        User user=new User();
        user.setPhone("123123123123");
        user.setEmail("123123123@qq.com");
        user.setGender(0);
        userService.changeInfo(9,"test03",user);

3.个人资料-控制层

3.1处理异常

暂无

3.2 设计请求

1.设置一打开页面就发送当前用户数据的查询。

/users/get_by_uid

GET

HttpSession session

JsonResult<User>

2.点击修改按钮发送用户的数据修改操作。

/users/change_info

POST

User user,HttpSession session

JsonResult<Void> 

3.3 处理请求 

 @RequestMapping("get_by_uid")
    public JsonResult<User> getByUid(HttpSession session){
        User data = userService.getByUid(getUidFromSession(session));
        return new JsonResult<>(OK,data);
    }
    @RequestMapping("change_info")
    public JsonResult<Void> changeInfo(User user,HttpSession session){
        //user对象中有四部分的数据:username,phone,Email,gender
        //uid数据需要再次封装到user对象中
        Integer uid = getUidFromSession(session);
        String username=getUsernameFromSession(session);
        userService.changeInfo(uid,username,user);
        return new JsonResult<>(OK);

    }

4.个人资料-前端页面

1.在打开userdata.html页面自动发送ajax页面(get_by_id),查询到的数据填充到这个页面上

2.在检测到用户点击了修改按钮之后发送了一个ajax请求(change_info)。

<script type="text/javascript">
		$("#btn-change-info").click(function () {
			$.ajax({
				url:"/users/change_info",
				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)

				}
			})
		})
		/**
		 * 一旦检测到当前页面被加载就会触发ready方法
		 *$(document).ready(function(){
		 *
		 *});
		 */
		$(document).ready(function () {
			$.ajax({
				url: "/users/get_by_uid",
				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>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值