好好编程-物流项目10【用户管理-查询和添加】
在实现登录功能之前我们来实现下用户管理。
初学者应该对这张图片铭记于心~
用户管理
1.查询用户信息
将用户表中的数据展示在页面中
1.1 用户业务逻辑层
接口定义
package com.bobo.service;
import java.util.List;
import com.bobo.pojo.User;
/**
* 用户信息
* @author 波波烤鸭
*
* [email protected]
*/
public interface IUserService {
/**
* 根据条件查询用户信息
* @param user
* @return
*/
public List<User> query(User user);
/**
* 添加用户
* @param user
* @throws Exception
*/
public void addUser(User user) throws Exception;
/**
* 修改用户
* @param user
* @throws Exception
*/
public void updateUser(User user)throws Exception;
/**
* 删除用户
* @param id
* @throws Exception
*/
public void deleteUser(int id)throws Exception;
}
接口实现
package com.bobo.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.bobo.mapper.UserMapper;
import com.bobo.pojo.User;
import com.bobo.pojo.UserExample;
import com.bobo.service.IUserService;
@Service
public class UserServiceImpl implements IUserService {
@Resource
private UserMapper userMapper;
@Override
public List<User> query(User user) {
UserExample example = new UserExample();
// ---
return userMapper.selectByExample(example);
}
@Override
public void addUser(User user) throws Exception {
userMapper.insertSelective(user);
}
@Override
public void updateUser(User user) throws Exception {
// TODO Auto-generated method stub
userMapper.updateByPrimaryKey(user);
}
@Override
public void deleteUser(int id) throws Exception {
// TODO Auto-generated method stub
userMapper.deleteByPrimaryKey(id);
}
}
1.2 用户控制层
/**
* 角色 控制层
* @author 波波烤鸭
*
* [email protected]
*/
@Controller
@RequestMapping("/user")
public class UserController {
@Resource
private IUserService userService;
@RequestMapping("/query")
public String query(User user,Model model){
List<User> list = userService.query(user);
model.addAttribute("list", list);
return "user/user";
}
}
1.3 用户管理界面
修改left.jsp中的代码
因为jsp文件下文件越来越多,所以分下目录
RoleController跳转页调整下
1.4 展示数据
准备一条测试数据
因为logistics-manager-service的代码修改了所以需要install下,别忘了,如果提示报错就在来一次,如果还报错请检查。
启动访问
访问成功!
2.添加用户信息
2.1控制层添加跳转的方法
更新和修改我们放在一个jsp页面进行,添加和修改都需要分配角色。
service层
/**
* 获取添加或者修改用户需要的数据
* 添加
* 获取所有的角色信息
* 修改
* 获取所有的角色信息及根据id查询的用户信息
* @param id
* @return
*/
public void getUpdateUserInfo(Integer id,Model model);
@Resource
private RoleMapper roleMapper;
@Override
public void getUpdateUserInfo(Integer id,Model model) {
RoleExample roleExample = new RoleExample();
List<Role> roles = roleMapper.selectByExample(roleExample );
model.addAttribute("roles", roles);
}
控制层
/**
* 进入添加或者修改页面
* @param id
* @return
*/
@RequestMapping("/userUpdate")
public String userUpdatePage(Integer id,Model model){
// 查询添加或者更新需要的数据
userService.getUpdateUserInfo(id,model);
return "/user/userUpdate";
}
2.2点击添加完成跳转
userUpdate.jsp使用form.html的代码
访问后样式失效:
2.3修改添加页面
效果
代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link href="/css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="place">
<span>位置:</span>
<ul class="placeul">
<li><a href="/">首页</a></li>
<li><a href="/user/query">用户管理</a></li>
</ul>
</div>
<div class="formbody">
<div class="formtitle">
<span>基本信息</span>
</div>
<ul class="forminfo">
<li><label>账号</label>
<input name="userName" type="text"
class="dfinput" />
<i>账号不能超过30个字符</i>
</li>
<li><label>姓名</label>
<input name="realName" type="text"
class="dfinput" />
</li>
<li><label>密码</label>
<input name="password" type="password"
class="dfinput" />
</li>
<li><label>确认密码</label>
<input name="confirmPassword"
type="password" class="dfinput" />
</li>
<li><label>电话</label>
<input name="phone" type="text"
class="dfinput" /><i></i>
</li>
<li><label>邮箱</label>
<input name="email" type="text"
class="dfinput" /><i></i>
</li>
<li><label>分配角色</label>
<div style="height: 32px;line-height: 32px;">
<c:forEach items="${roles }" var="role">
<input type="checkbox" value="${role.roleId }" name="roleIds"> ${role.roleName }
</c:forEach>
</div>
</li>
<li><label> </label>
<input name="" type="submit"
class="btn" value="确认保存" /></li>
</ul>
</div>
<div style="display: none">
<script src='http://v7.cnzz.com/stat.php?id=155540&web_id=155540'
language='JavaScript' charset='gb2312'></script>
</div>
</body>
</html>
验证此处没有加,可自行加上~
2.4提交数据
因为表单提交的数据有分配的角色信息,单独一个User对象并不能接收所有的数据。所以我们需要创建一个Dto对象,来保存数据。
数据传输对象,即Data Transfer Object,简称DTO。
一个为了减少方法调用次数而在进程间传输数据的对象
表单域name值设置,及提交地址:
<form action="/user/saveOrUpdate">
<ul class="forminfo">
<li><label>账号</label>
<input name="user.userName" type="text"
class="dfinput" />
<i>账号不能超过30个字符</i>
</li>
<li><label>姓名</label>
<input name="user.realName" type="text"
class="dfinput" />
</li>
<li><label>密码</label>
<input name="user.password" type="password"
class="dfinput" />
</li>
<li><label>确认密码</label>
<input name="confirmPassword"
type="password" class="dfinput" />
</li>
<li><label>电话</label>
<input name="user.phone" type="text"
class="dfinput" /><i></i>
</li>
<li><label>邮箱</label>
<input name="user.email" type="text"
class="dfinput" /><i></i>
</li>
<li><label>分配角色</label>
<div style="height: 32px;line-height: 32px;">
<c:forEach items="${roles }" var="role">
<input type="checkbox" value="${role.roleId }" name="roleIds"> ${role.roleName }
</c:forEach>
</div>
</li>
<li><label> </label>
<input name="" type="submit"
class="btn" value="确认保存" /></li>
</ul>
</form>
控制层接收数据:
/**
* 进入添加或者修改页面
* @param id
* @return
* @throws Exception
*/
@RequestMapping("/saveOrUpdate")
public String saveOrUpdate(UserDto userDto) throws Exception{
userService.saveOrUpdate(userDto);
return "redirect:/user/query";
}
service接口
/**
* 保存或修改用户数据
* @param userDto
*/
public void saveOrUpdate(UserDto userDto)throws Exception;
接口实现
@Override
public void saveOrUpdate(UserDto userDto) throws Exception {
// 获取User对象
User user = userDto.getUser();
// 获取关联的角色信息
List<Integer> roles = userDto.getRoles();
// 判断是添加还是修改数据
if(user.getUserId()!=null && user.getUserId() > 0){
// 表示userId存在,说明是更新
}else{
// 不存在id说明是添加数据
// 先添加用户数据 获取生成的userId
userMapper.insert(user);
// 再保存用户和角色的对应关系,在一个事务中处理
if(roles!=null && roles.size() > 0){
for (Integer roleId : roles) {
userMapper.inserUserIdAndRoleId(user.getUserId(),roleId);
}
}
}
}
自动生成key
设置insert对应的插入语句。
添加inserUserIdAndRoleId实现
接口定义
void inserUserIdAndRoleId(Integer userId, Integer roleId);
添加该sql语句在UserMapper.xml文件中
<insert id="inserUserIdAndRoleId">
insert into t_user_role(user_id,role_id)values(#{param1},#{param2})
</insert>
测试
用户和角色的关联关系也添加成功
篇幅原因修改和删除下篇文章介绍~