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 @   忘了鱼尾纱的猫  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
  1. 1 刘哈哈与大先生 刘心&大鹏
  2. 2 我们打着光脚在风车下跑,手上的狗尾巴草摇啊摇 等一下就回家 / -艾兜
  3. 3 哎呦 毛不易
  4. 4 夜、萤火虫和你 AniFace
我们打着光脚在风车下跑,手上的狗尾巴草摇啊摇 - 等一下就回家 / -艾兜
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词:等一下就回家/艾兜

作曲:等一下就回家/艾兜

混音:裴济逸

编曲:HYPER MUSIC

风是从哪儿来手上的狗尾巴草摇的更剧烈

稻穗也晃起来我紧握着你的手把它拍成照片

我们俩转 就像大风车

早该逃离这我转转 把云卷散了

下个地方 风筝睡醒了

乘着它走吧 飘飘 等着大风车

像在画一幅油画

陶醉你的笑容

就沿着风车走吧

不用 猜忌 下个地点

让我忘记时间to the midnight

the sun came out 把所有染成金色的

风风风让它吹过来

至少年轻我还记得

oh 找一个地方落下

躺在谷仓里

和你讲着小话

什么风都吹不倒它

它就像是活的

知道哪是它的家

风是从哪儿来手上的狗尾巴草摇的更剧烈

稻穗也晃起来我紧握着你的手把它拍成照片

我们俩转 就像大风车

早该逃离这我转转 把云卷散了

下个地方 风筝睡醒了

乘着它走吧 飘飘 等着大风车

像在画一幅油画

陶醉你的笑容

就沿着风车走吧

不用 猜忌 下个地点

我们打着光脚在那风车下跑

等一下就回家怎么才到半山腰

就让那些烦恼都随风去吧

随着稻香飘过的地方耶哎呦喂

喜欢那时候风言风语

总是习惯悲中带着笑

喜欢被无视的童言无忌

被风车带走不在

风是从哪儿来手上的狗尾巴草摇的更剧烈

稻穗也晃起来我紧握着你的手把它拍成照片

我们俩转 就像大风车

早该逃离这我转转 把云卷散了

下个地方 风筝睡醒了

乘着它走吧 飘飘 等着大风车

像在画一幅油画

陶醉你的笑容

就沿着风车走吧

不用 猜忌 下个地点

点击右上角即可分享
微信分享提示