美文网首页用户管理
综合案例-JavaEE三层-用户管理系统

综合案例-JavaEE三层-用户管理系统

作者: 北冥有鱼_很好吃 | 来源:发表于2018-07-11 12:46 被阅读10次

1. 面向接口编程

1531206406700.png

特点: 功能易于扩展。

2. 用户管理-添加用户功能实现

2.1 数据库环境搭建

use heima40;
drop table if exists tab_user;
create table if not exists tab_user(
   id   int(11) primary key auto_increment,
   name varchar(50) not null,
   sex  varchar(50) not null,
   age  int(11) not null,
   address varchar(50) not null,
   qq varchar(50) not null,
   email varchar(50) not null
);

insert into tab_user values(null,'张三','男',21,'广东','766335435','zs@qq.com');
insert into tab_user values(null,'李四','男',22,'广东','243424242','ls@qq.com');
insert into tab_user values(null,'王五','女',23,'广东','474574574','ww@qq.com');
insert into tab_user values(null,'赵六','女',28,'广东','77777777', 'zl@qq.com');
insert into tab_user values(null,'钱七','女',25,'湖南','412132145','qq@qq.com');

select * from tab_user;

2.2 项目环境搭建

开发包


1531206876464.png

连接池配置文件

<c3p0-config>
<!-- 使用默认的配置读取连接池对象 -->
<default-config>
  <!--  1. 数据库的连接参数 -->
  <property name="driverClass">com.mysql.jdbc.Driver</property>
  <property name="jdbcUrl">jdbc:mysql:///heima40</property>
  <property name="user">heima40</property>
  <property name="password">123</property>

</default-config>
</c3p0-config>

实体类:

package cn.itheima.usermanager.domain;

/**
 * Created by tps on 2018/7/4.
 */

public class User {
    private int id;
    private String name;
    private String sex;
    private String address;
    private String email;
    private String qq;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getQq() {
        return qq;
    }

    public void setQq(String qq) {
        this.qq = qq;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

2.3 导入页面原型


1531207229038.png

2.4 业务代码开发

2.4.1 添加用户流程分析图


1531208200862.png

2.4.2 业务代码实现

  1. add.jsp form表单添加action="addUserServlet"

  2. AddUserServlet.java接受表单用户信息

    package cn.itheima.usermanager.web;
    
    import cn.itheima.usermanager.domain.User;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/addUserServlet")
    public class AddUserServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
            //  apache  BeanUtils.populate(user,request.getParameterMap()) 工具类
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            // 1  请求参数的封装  TO对象中
            String name = request.getParameter("name");
            String sex = request.getParameter("sex");
            String address = request.getParameter("address");
            String email = request.getParameter("email");
            String qq = request.getParameter("qq");
            String age = request.getParameter("age");
            User user = new User();
            user.setAddress(address);
            user.setAge(Integer.parseInt(age));
            user.setEmail(email);
            user.setName(name);
            user.setQq(qq);
            user.setSex(sex);
    
            //  2. 调用业务层
            UserService userService = new UserServiceImpl();
    
            User existUser = userService.addUser(user);
    
            // 3 根据existUser ==null  ? 跳转到添加用户成功页面 : 添加页面 +错误信息
            if (existUser==null){
                response.sendRedirect("add_ok.jsp");
            }else{
                //  email 冲突
                request.setAttribute("addUserError","邮箱已存在");
                request.getRequestDispatcher("/add.jsp").forward(request,response);
            }
    
        }
    }

service接口和service实现类编写

public class UserServiceImpl implements UserService {
    private UserDao userDao = new UserDaoImpl();
    @Override
    public User addUser(User user) {
        //  业务逻辑 先根据邮箱查询 结果 再去做Insert 操作
        User existUser = null;
        try {
           existUser = userDao.findUserByEmail(user.getEmail());
        } catch (Exception e) {
            System.out.println("可以注册。。。dao实现添加用户操作");
            userDao.addUser(user);
        }

        return existUser;
    }
}

dao接口和dao实现类的编写

public class UserDaoImpl implements UserDao {
    @Override
    public User findUserByEmail(String email) {
        JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource());
        String sql ="select * from tab_user where email = ?";
        User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class),email);
        return user;

    }
   
    @Override
    public void addUser(User user) {
        JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource());
        String sql ="insert into tab_user values(null,?,?,?,?,?,?)";
        template.update(sql,user.getName(),user.getSex(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail());
    }
}

add_ok.jsp页面完善

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- HTML5文档-->
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!-- 使用Edge最新的浏览器的渲染方式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

</head>
<body>
    <center><h3>恭喜你,添加成员成功!</h3></center>
    <a href="queryAllUserServlet">查询员工列表</a>&nbsp;
    <a href="add.jsp">继续添加</a>
</body>
</html>

2.5 效果图:

邮箱相同:


1531210627321.png

3. 用户管理-查询所有用户

3.1 查询用户流程图分析


1531211151831.png

3.2 代码实现

web层

package cn.itheima.usermanager.web;

import cn.itheima.usermanager.domain.User;
import cn.itheima.usermanager.service.UserService;
import cn.itheima.usermanager.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/queryAllUserServlet")
public class QueryAllUserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        UserService userService = new UserServiceImpl();
        List<User> users = userService.findAll();
        request.setAttribute("users",users);
        request.getRequestDispatcher("/list.jsp").forward(request,response);
    }
}

service层

  @Override
    public List<User> findAll() {
        return userDao.findAll();
    }
}

dao层

   @Override
    public List<User> findAll() {
        JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource());
        String sql ="select * from tab_user";
        List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
        // template.queryForObject("select count(*) from tab_user",Integer.class);
        return users;
    }

list.jsp显示数据列表

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!-- 使用Edge最新的浏览器的渲染方式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
    width: 默认宽度与设备的宽度相同
    initial-scale: 初始的缩放比,为1:1 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>用户信息管理系统</title>

    <!-- 1. 导入CSS的全局样式 -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="js/jquery-2.1.0.min.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="js/bootstrap.min.js"></script>
    <style type="text/css">
        td, th {
            text-align: center;
        }
    </style>
</head>
<body>
<div class="container">
    <c:if test="${empty users}">没有用户信息</c:if>
    <c:if test="${not empty users}">
    <h3 style="text-align: center">用户信息列表</h3>
    <table border="1" class="table table-bordered table-hover">
        <tr class="success">
            <th>编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>籍贯</th>
            <th>QQ</th>
            <th>邮箱</th>
            <th>操作</th>
        </tr>
       <c:forEach var="u" items="${users}">
        <tr>
            <td>${u.id}</td>
            <td>${u.name}</td>
            <td>${u.sex}</td>
            <td>${u.age}</td>
            <td>${u.address}</td>
            <td>${u.qq}</td>
            <td>${u.email}</td>
            <td><a class="btn btn-default btn-sm" href="update.jsp">修改</a>&nbsp;<a class="btn btn-default btn-sm" href="">删除</a></td>
        </tr>
       </c:forEach>
        <tr>
            <td colspan="8" align="center"><a class="btn btn-primary" href="add.jsp">添加联系人</a></td>
        </tr>
    </table>
    </c:if>
</div>
</body>
</html>

3.3 效果图

1531212377171.png

4. 用户管理-删除用户实现

逻辑删除和物理删除

逻辑删除: 并非数据库级别删除,删除操作,更新表某一个标识字段

isdelete 标识标识数据有效性 0 有效 1 无效!

删除操作 : 底层sql update tab_user set isdelete = 1 where id = ?;

恢复用户 : 底层sql update tab_user set isdelete = 0 where id = ?;

查询有效用户: select * from tab_user where isdelete = 0;

查询已经删除用户信息: select * from tab_user where isdelete = 1;

物理删除: 数据库级别删除,彻底删除,acid 四大特性 - 持久性,风险性的!

逻辑删除准备:

  1. tab_user 添加字段 isdelete
    CREATE TABLE `tab_user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
      `sex` varchar(50) NOT NULL,
      `age` int(11) NOT NULL,
      `address` varchar(50) NOT NULL,
      `qq` varchar(50) NOT NULL,
      `email` varchar(50) NOT NULL,
      `isdelete` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
  1. User实体类添加一个字段
       private int isdelete=0;//  0 表示用户有效   1  删除用户
    
        public int getIsdelete() {
            return isdelete;
        }
    
        public void setIsdelete(int isdelete) {
            this.isdelete = isdelete;
        }
  1. 添加用户 dao实现类

    @Override
     public void addUser(User user) {
         JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource());
         String sql ="insert into tab_user values(null,?,?,?,?,?,?,?)";
         template.update(sql,user.getName(),user.getSex(),user.getAge(),user.getAddress(),
                 user.getQq(),user.getEmail(),user.getIsdelete());
     }
    

4.1 业务流程图分析


1531213911200.png

删除操作,一般需要用户确认操作!

js实现弹窗确认操作!只有用户确认,才可以发送删除请求!

4.2 业务代码实现:

  1. list.jsp 页面添加删除确认框实现: 点击删除 添加confirm函数
     <a class="btn btn-default btn-sm" href="javascript:void(0);" onclick="deleteUser(${u.id});">删除</a>
  1. js 实现

    <script>
    
         function deleteUser(id){
            var flag = window.confirm("请三思,员工表现很好");
            if(flag){
                // 发送删除请求
                location.href="deleteUserServlet?id="+id;
            }
         }
    
     </script>
    

web层完成删除请求接受

package cn.itheima.usermanager.web;

import cn.itheima.usermanager.service.UserService;
import cn.itheima.usermanager.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/deleteUserServlet")
public class DeleteUserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String id = request.getParameter("id");
        UserService userService = new UserServiceImpl();
        userService.deleteUserById(id);
        response.sendRedirect("delete_ok.jsp");
    }
}

service+dao

  @Override
    public void deleteUserById(String id) {
        userDao.deleteUserById(Integer.parseInt(id));
   }

   @Override
    public void deleteUserById(int id) {
        JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource());
        String sql ="update tab_user set isdelete = 1 where id = ?";
        template.update(sql,id);
    }

delete_ok.jsp页面完善

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- HTML5文档-->
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!-- 使用Edge最新的浏览器的渲染方式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

</head>
<body>
    <center><h3>删除员工成功!</h3></center>
    <a href="queryAllUserServlet">查询员工列表</a>&nbsp;
    <a href="add.jsp">继续添加。。。</a>
</body>
</html>

删除业务完成!

4.3 效果展示


1531214745126.png

5. 用户管理-修改用户信息

修改用户信息流程说明


1531216672187.png

5.1 代码实现

  1. list.jsp 点击修改获取id
    <a class="btn btn-default btn-sm" href="queryUserByIdServlet?id=${u.id}">修改</a>&nbsp;
  1. 查询原始user信息
    package cn.itheima.usermanager.web;
    
    import cn.itheima.usermanager.domain.User;
    import cn.itheima.usermanager.service.UserService;
    import cn.itheima.usermanager.service.impl.UserServiceImpl;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.List;
    
    @WebServlet("/queryUserByIdServlet")
    public class QueryUserByIdServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String id = request.getParameter("id");
            UserService userService = new UserServiceImpl();
            User user = userService.findUserById(Integer.parseInt(id));
            request.setAttribute("user",user);
            request.getRequestDispatcher("/update.jsp").forward(request,response);
        }
    }
  1. service+dao
     @Override
        public User findUserById(int id) {
            return userDao.findUserById(id);
        }
    
       @Override
        public User findUserById(int id) {
            JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource());
            String sql ="select * from tab_user where id = ?";
            User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class),id);
            // template.queryForObject("select count(*) from tab_user",Integer.class);
            return user;
        }

  1. update.jsp回显数据
    form表单数据
     <form action="updateUserServlet" method="post">
                <!-- 隐藏域 保存修改用户主键id -->
                <input type="hidden" name="id" value="${user.id}">
    
              <div class="form-group">
                <label for="name">姓名:</label>
                <input type="text" class="form-control" id="name" name="name" value="${user.name}" placeholder="请输入姓名" />
              </div>
    
              <div class="form-group">
                <label>性别:</label>
                    <input type="radio" name="sex" value="男"
                            <c:if test="${user.sex=='男'}">checked="checked"</c:if>
                    />男
                    <input type="radio" name="sex" value="女"
                           <c:if test="${user.sex=='女'}">checked="checked"</c:if>
                    />女
              </div>
    
              <div class="form-group">
                <label for="age">年龄:</label>
                <input type="text" class="form-control" id="age"  value="${user.age}" name="age" placeholder="请输入年龄" />
              </div>
    
              <div class="form-group">
                <label for="address">籍贯:</label>
                 <select name="address" class="form-control" >
                    <option value="广东"
                            <c:if test="${user.address=='广东'}">selected="selected"</c:if>
                    >广东</option>
                    <option value="广西"
                            <c:if test="${user.address=='广西'}">selected="selected"</c:if>
                    >广西</option>
                    <option value="湖南"
                            <c:if test="${user.address=='湖南'}">selected="selected"</c:if>
                    >湖南</option>
                </select>
              </div>
    
              <div class="form-group">
                <label for="qq">QQ:</label>
                <input type="text" class="form-control" name="qq" value="${user.qq}" readonly="readonly" placeholder="请输入QQ号码"/>
              </div>
    
              <div class="form-group">
                <label for="email">Email:</label>
                <input type="text" class="form-control" name="email" value="${user.email}" readonly="readonly"  placeholder="请输入邮箱地址"/>
              </div>
    
                 <div class="form-group" style="text-align: center">
                    <input class="btn btn-primary" type="submit" value="提交" />
                    <input class="btn btn-default" type="reset" value="重置" />
                    <input class="btn btn-default" type="button" value="返回"/>
                 </div>
            </form>
  1. 修改用户代码实现

编写updateUserServlet获取表单数据 ,进行数据库表记录的修改实现

web层代码

package cn.itheima.usermanager.web;

import cn.itheima.usermanager.domain.User;
import cn.itheima.usermanager.service.UserService;
import cn.itheima.usermanager.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/updateUserServlet")
public class UpdateUserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        // 1  请求参数的封装  TO对象中
        String id = request.getParameter("id");
        String name = request.getParameter("name");
        String sex = request.getParameter("sex");
        String address = request.getParameter("address");
        String email = request.getParameter("email");
        String qq = request.getParameter("qq");
        String age = request.getParameter("age");
        int isdelete = Integer.parseInt(request.getParameter("isdelete"));
        User user = new User();
        user.setId(Integer.parseInt(id));
        user.setAddress(address);
        user.setAge(Integer.parseInt(age));
        user.setEmail(email);
        user.setName(name);
        user.setQq(qq);
        user.setSex(sex);
        user.setIsdelete(isdelete);

        //  2. 调用业务层
        UserService userService = new UserServiceImpl();

        userService.updateUser(user);

        response.sendRedirect("update_ok.jsp");

    }
}

service层代码

 @Override
    public void updateUser(User user) {
        userDao.updateUser(user);
    }

dao层代码

    @Override
    public void updateUser(User user) {
        JdbcTemplate template = new JdbcTemplate(C3p0Utils.getDataSource());
        String sql ="update tab_user set name = ?,sex = ? ,age = ? ,address = ? ,qq = ?,email  = ?, isdelete = ? where id = ?";
        template.update(sql,user.getName(),user.getSex(),user.getAge(),user.getAddress(),
                user.getQq(),user.getEmail(),user.getIsdelete(),user.getId());
    }

update_ok.jsp编写

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- HTML5文档-->
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!-- 使用Edge最新的浏览器的渲染方式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

</head>
<body>
    <center><h3>修改员工成功!</h3></center>
    <a href="queryAllUserServlet">查询员工列表</a>&nbsp;
    <a href="add.jsp">继续添加。。。</a>
</body>
</html>

修改业务代码完成!

相关文章

网友评论

    本文标题:综合案例-JavaEE三层-用户管理系统

    本文链接:https://www.haomeiwen.com/subject/xmchpftx.html