随堂笔记
约 1416 字大约 5 分钟
随堂笔记
1.修改用户代码实现
1.前端
//TODO: 查询角色表
getRoleList() {
//TODO:这里向后端服务器发送请求,从t_role角色表中查询所有角色信息赋值给roleList: [], // 角色列表数据
let url="/role/findAllRoses"
axios.post(url)
.then(resp=>{
//定义变量接收响应数据
let obj =resp.data;
//判断
if(obj.flag){
//查询成功
//提示信息
this.$message({
message: obj.message,
type: 'success'
});
//将响应的角色数据的容器赋值给数据模型中的roleList: []
this.roleList=obj.result;
}else{
//查询失败
this.$message.error(obj.message);
}
});
}
//TODO 修改用户确定
handleUpdateConfirm() {
this.$refs['uptForm'].validate((valid) => {
if (valid) {
//TODO:向后台发送请求修改用户和角色,向后台提交的是数据模型中的:
/**
* updateUser: { //用户的修改数据
id: "",
username: '',
email: '',
password: '',
roleIds: []
},
*/
//1.定义变量保存地址
let url="/user/update";
//2.直接发送请求,携带的请求参数this.updateUser本身就是json格式的数据,直接传递
axios.post(url,this.updateUser)
.then(resp=>{
//3.定义变量接收后端的响应数据
let obj = resp.data;
//4.判断
if(obj.flag){
//更新成功
//提示信息
this.$message({
message: obj.message,
type: 'success'
});
//隐藏修改弹框
this.dialogUptFormVisible=false;
//再次查询
this.getUserList();
}else{
//更新失败
//提示信息
this.$message.error(obj.message);
}
});
}
});
}
2.web层
查询所有角色
package com.itheima.case2.web;
import com.itheima.case2.pojo.po.Role;
import com.itheima.case2.pojo.vo.Result;
import com.itheima.case2.service.RoleService;
import com.itheima.case2.utils.BaseController;
import com.itheima.case2.utils.BeansFactory;
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 findAllRoses(HttpServletRequest request, HttpServletResponse response){
try {
//1.获取业务层对象
//参数:roleService是配置文件beans.properties中的等号左边的key
//roleService=com.itheima.case2.service.impl.RoleServiceImpl
RoleService roleService = BeansFactory.getInstance("roleService");
//2.使用对象调用业务层方法查询角色
List<Role> list = roleService.findAllRoses();
//3.将list封装到Result对象中
Result result = new Result(true, "查询角色成功", list);
//4.使用工具类响应给前端
BaseController.printResult(response,result);
} catch (Exception e) {
//显示错误信息到idea控制台给程序员看的
e.printStackTrace();
try {
//5.将list封装到Result对象中
Result result = new Result(false, "查询角色失败");
//6.使用工具类响应给前端
BaseController.printResult(response,result);
} catch (Exception ioException) {
ioException.printStackTrace();
}
}
}
}
更新用户
/*
修改用户
*/
public void update(HttpServletRequest request, HttpServletResponse response) {
try {
//1.获取请求参数封装到实体类
UpdateUser updateUser = BaseController.parseJSON2Object(request, UpdateUser.class);
//2.获取业务层对象
UserService userService = BeansFactory.getInstance("userService");
//3.调用业务层更新方法
userService.update(updateUser);
//4.创建结果对象
Result result = new Result(true, "更新用户成功");
//5.响应给前端
BaseController.printResult(response,result);
} catch (Exception e) {
e.printStackTrace();
try {
//6.创建结果对象
Result result = new Result(false, "更新用户失败");
//7.响应给前端
BaseController.printResult(response,result);
} catch (Exception ioException) {
ioException.printStackTrace();
}
}
}
3.业务层
查询角色
package com.itheima.case2.service.impl;
import com.itheima.case2.dao.RoleMapper;
import com.itheima.case2.pojo.po.Role;
import com.itheima.case2.service.RoleService;
import com.itheima.case2.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class RoleServiceImpl implements RoleService {
//TODO:用户下拉框中查询角色信息的方法
@Override
public List<Role> findAllRoses() {
//1.获取myabtis会话对象
SqlSession session = SqlSessionUtil.getSession();
//2.获取接口代理对象
RoleMapper mapper = session.getMapper(RoleMapper.class);
//3.调用查询所有角色方法
List<Role> list = mapper.findAllRoses();
//4.释放资源
session.close();
//5.将list返回给web层
return list;
}
}
更新用户
//更新用户
@Override
public void update(UpdateUser updateUser) {
//1.获取myabtis会话对象
SqlSession session = SqlSessionUtil.getSession();
//2.获取接口代理对象
UserMapper mapper = session.getMapper(UserMapper.class);
//3.使用接口代理对象调用接口中更新用户表t_user的数据
mapper.update(updateUser);
//4.使用接口代理对象调用接口中根据用户id到中间表t_user_role中删除用户数据
mapper.deleteFromUserAndRoleTableByUID(updateUser.getId());
//5.使用接口代理对象调用接口中向中间表t_user_role中插入数据的方法
//updateUser.getId() 表示用户的id
//updateUser.getRoleIds() 表示当前用户对应的新的角色id
// List<String> list = updateUser.getRoleIds();//{1,2,3}
mapper.addUIDAndRIDToUserAndRoleTable(updateUser.getId(),updateUser.getRoleIds());
//6.释放资源
session.close();
}
4.dao层
查询角色
package com.itheima.case2.dao;
import com.itheima.case2.pojo.po.Role;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface RoleMapper {
//TODO:用户下拉框中查询角色信息的方法
@Select("select * from t_role")
List<Role> findAllRoses();
}
更新用户
//更新用户表t_user的数据
@Update("update t_user set username=#{username},email=#{email},password=#{password} where id=#{id}")
void update(UpdateUser updateUser);
//根据用户id到中间表t_user_role中删除用户数据
@Delete("delete from t_user_role where user_id=#{uid}")
void deleteFromUserAndRoleTableByUID(@Param("uid") Integer id);
//向中间表t_user_role中插入数据的方法
//TODO:添加数据,第二个参数存放的是多个角色id,需要使用动态sql遍历集合
void addUIDAndRIDToUserAndRoleTable(@Param("uid") Integer id, @Param("roleIds") List<String> roleIds);
映射文件
<!--
//TODO:添加数据,第二个参数存放的是多个角色id,需要使用动态sql遍历集合
void addUIDAndRIDToUserAndRoleTable(@Param("uid") Integer id, @Param("roleIds") List<String> roleIds);
假设当前用户id是3,角色id是1 2 3
insert into t_user_role(user_id,role_id) values(3,1),(3,2),(3,3)
遍历容器的标签:
<foreach collection="遍历容器的名字" item="容器中每个元素的变量名" close="以什么结束"
open="以什么开始" separator="foreach标签的文本中的数据的分隔符号">
</foreach>
TODO:
注意啦:在myabtis中如果接口方法有多个参数,要求我们必须使用@Param注解修饰形参,然后在#{}中的属性@Param注解
的属性值来取值
void addUIDAndRIDToUserAndRoleTable(@Param("uid") Integer id, @Param("roleIds") List<String> roleIds);
<foreach collection="roleIds" item="rid" separator=",">
(#{uid},#{rid})
</foreach>
1. collection="roleIds" :属性值roleIds是接口方法形参@Param("roleIds")的属性值
2. item="rid"rid表示存储roleIds集合中的每个元素 rid=1 2 3===>要求在foreach 标签文本中取值的时候#{rid}大括号中的
rid必须是item的属性值
3.#{uid}:大括号中的uid是接口方法形参@Param("uid") Integer id注解Param的属性值
insert into t_user_role(user_id,role_id) values(3,1),(3,2),(3,3)
-->
<insert id="addUIDAndRIDToUserAndRoleTable">
insert into t_user_role(user_id,role_id) values
<foreach collection="roleIds" item="rid" separator=",">
(#{uid},#{rid})
</foreach>
</insert>
今日作业:
1.建议看SpringIOC工厂的案例代码