美文网首页用户管理
综合案例-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