Day-11更新用户实现

3.更改用户

1.修改数据的页面回显显示角色信息到下拉框选项中

1.1前端页面

image-20201010140914552

image-20201010141138325

我们在userList.html页面的视图准备好之前先准备数据,将角色信息数据准备好。

所以将向后台发送请求角色信息的数据放到生命周期created函数中:

image-20201010142859667

1.2RoleServlet

package com.itheima.case2.web;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.case2.pojo.Role;
import com.itheima.case2.service.RoleService;
import com.itheima.case2.utils.BeanFactory;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

@WebServlet("/role")
public class RoleServlet extends BaseServlet {
    //查询所有的角色信息
    public void findAllRoles(HttpServletRequest request, HttpServletResponse response){
        try {
            //1.创建业务层对象
            RoleService roleService = (RoleService) BeanFactory.getSingleInstance("roleService");
            //2.使用业务层对象调用业务层方法
            List<Role> list = roleService.findAllRoles();
            //3.将list集合转换为json格式
            String jsonList = new ObjectMapper().writeValueAsString(list);
            //4.响应给前端
            response.getWriter().print(jsonList);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

1.3业务层

接口:

package com.itheima.case2.service;

import com.itheima.case2.pojo.Role;

import java.util.List;

public interface RoleService {
    //查询所有角色
    List<Role> findAllRoles();
}

实现类:

package com.itheima.case2.service.impl;

import com.itheima.case2.dao.RoleMapper;
import com.itheima.case2.pojo.Role;
import com.itheima.case2.service.RoleService;
import com.itheima.case2.utils.SqlSessionUtil;

import java.util.List;

public class RoleServiceImpl implements RoleService {
    //查询所有角色
    @Override
    public List<Role> findAllRoles() {
        //1.获取RoleMapper接口代理对象
        RoleMapper mapper = SqlSessionUtil.getProxyMapper(RoleMapper.class);
        //2.使用mapper调用RoleMapper中查询方法
        List<Role> list = mapper.findAllRoles();
        //3.返回list
        return list;
    }
}

1.4dao层

package com.itheima.case2.dao;

import com.itheima.case2.pojo.Role;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface RoleMapper {
    //查询所有角色
    @Select("select * from t_role")
    List<Role> findAllRoles();
}

2.修改数据的页面回显将当前用户的角色信息显示到页面上

image-20201010143307987

image-20201010144140305

代码实现:

我们发现前端页面通过roleIds回显角色信息,所以后台只需要查询出角色id即可,在查询用户的时候查询:

修改UserMapper.xml映射文件即可:

image-20201010145344065

3.修改用户

image-20201010150648231

代码实现:

1.前端:

image-20210127212712711

2.servlet:

 //更新
    public void updateUserById(HttpServletRequest request, HttpServletResponse response) {
        try {
            //获取页面的数据
//            String param = request.getParameter("param");
            //使用工具类
            User user = BaseController.parseJSON2Object(request, User.class);

            //1.接收请求数据
//            Map<String, String[]> map = request.getParameterMap();
            //2.创建User对象
//            User user = new User();
            //3.将map集合的数据封装到user中
//            BeanUtils.populate(user,map);
            //4.创建业务层对象
            UserService userService = (UserService) BeanFactory.getSingleInstance("userService");
            //5.调用更新方法
            userService.updateUserById(user);
            //6.再次查询
             response.sendRedirect("/user?methodName=queryAllUsersAndRolesByPage&curPage=1&pageSize=5");
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
package com.itheima.case2.utils;

import com.alibaba.fastjson.JSON;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/*
*   FastJson
* */
public class BaseController {

    public static void printResult(HttpServletResponse response, Object obj) throws IOException {
        response.setContentType("application/json;charset=utf-8");
        JSON.writeJSONString(response.getWriter(),obj);
    }

    public static  <T> T parseJSON2Object(HttpServletRequest request, Class<T> tClass) throws IOException{
        // 把json格式的表单数据直接转成T类型的对象
        return JSON.parseObject(request.getInputStream(),tClass);
    }
}

3.service:

public interface UserService {
    //分页查询所有用户信息
    /*public abstract*/ PageBean<User> findAllUsersByPage(int curPage, int pageSize);
    //更新用户
    void updateUserById(User user);
}
//更新用户
    /*
        更新用户sql语句思路:
        1.将新的用户数据更新到t_user表中
        2.根据用户id到中间表t_user_role删除数据
        3.向中间表t_user_role中插入用户id和角色id
     */
    @Override
    public void updateUserById(User user) {
        //1.将新的用户数据更新到t_user表中
        //1.1获取用户的mapper对象
        UserMapper proxyUserMapper = SqlSessionUtil.getProxyMapper(UserMapper.class);
        //1.2使用proxyUserMapper对象调用UserMapper中的更新方法
        proxyUserMapper.updateUserById(user);

        // 2.根据用户id到中间表t_user_role删除数据
        //2.1获取用户角色的Mapper对象
        UserRoleMapper proxyUserRoleMapper = SqlSessionUtil.getProxyMapper(UserRoleMapper.class);
        //2.2使用proxyUserRoleMapper调用UserRoleMapper中的根据用户id删除方法
        proxyUserRoleMapper.deleteByUid(user.getId());

        //3.向中间表t_user_role中插入用户id和角色id
        //3.1取出User实体类中的roleIds集合中的每个角色id
        List<String> roleIds = user.getRoleIds();
        //3.2遍历集合
        for (String roleId : roleIds) {
            //3.3使用proxyUserRoleMapper对象调用方法向中间表插入数据
            proxyUserRoleMapper.addUserRoleId(user.getId(),Integer.parseInt(roleId));
        }
    }

4.dao

public interface UserMapper {
    
    //根据id更新用户
    @Update("update t_user set username=#{username},email=#{email},password=#{password} where id=#{id}")
    void updateUserById(User user);
}
package com.itheima.case2.dao;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;

public interface UserRoleMapper {
    //根据用户id删除中间表的信息
    @Delete("delete from t_user_role where user_id=#{id}")
    void deleteByUid(@Param("id") Integer id);
    //添加用户和角色id
    @Insert("insert into t_user_role values(#{uid},#{rid})")
    void addUserRoleId(@Param("uid") Integer uid, @Param("rid")Integer rid);
}

说明:

更新用户先更新用户表的数据,然后删除该用户在中间表的数据,重新插入中间表中的更新后的用户id和角色id

posted @ 2023-06-01 15:40  忘了鱼尾纱的猫  阅读(24)  评论(0)    收藏  举报