基于Servlet的JavaWeb的SMBMS超市管理系统


githb链接:
代码直接下载SSM.zip,其中smbms.zip为所有的代码!

超市管理系统

主要是三个大模块的操作,分别是用户管理页面、供应商管理页面和订单管理,主要是进行数据的增删改查(CRUD),所以这里主要以 用户管理页面进行数据的增删改,主要是理解三层架构Servlet、Service和Dao层的操作关系,方便上手后面的框架SSM、Springboot这些的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OkDFeLxP-1611993881123)(/Users/maczhen/Library/Application Support/typora-user-images/image-20210130112355032.png)]
整体的流程与代码编写思路:

建议是从后往前写,便于调试与debug,先编写Dao层,主要负责与数据库交互,编写sql语句等。Servicce主要负责调用Dao层,而Servlet也是主要调用Service和前端的一些数据交互,比如resquet和response等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GTn5eCAm-1611993881125)(/Users/maczhen/Library/Application Support/typora-user-images/image-20210130111754605.png)]

一、增加用户数据

1、编写UserDao层的接口

//增加用户
public int add(Connection connection,User user);

2、编写UserDao层的接口实现类

@Override
public int add(Connection connection,User user) {
    PreparedStatement pstm = null;
    int updateRows = 0;
    if(connection!=null){
      	//SQL语句,插入数据的操作 ?表示占位符
        String sql = "insert into smbms_user (userCode,userName,userPassword," +
                "userRole,gender,birthday,phone,address,creationDate,createdBy) " +
                "values(?,?,?,?,?,?,?,?,?,?)";
      	//参数
        Object[] params = {user.getUserCode(), user.getUserName(), user.getUserPassword(),
                user.getUserRole(), user.getGender(), user.getBirthday(),
                user.getPhone(), user.getAddress(), user.getCreationDate(), user.getCreatedBy()};
        updateRows = BaseDao.execute(connection, pstm, sql, params);
      	//关闭数据资源
        BaseDao.closeResource(null,pstm,null);
    }
    return updateRows;
}
//增加用户

3、编写UserService层的借口

//增加用户信息
public boolean add(User user);

4、编写UserService层的接口实现类

@Override
public boolean add(User user) {
    boolean flag = false;
    Connection connection = null;
    try{
        connection = BaseDao.getConnection();//获得链接
        connection.setAutoCommit(false);//开启jdbc事物管理
        int updateRows = userDao.add(connection,user);
        connection.commit();//如果成功直接提交即可
        if(updateRows>0){
            flag = true;
            System.out.printf("add success!");
        }else {
            System.out.printf("add failed!");
        }
    }catch (Exception e){
      	//添加失败就回滚
        e.printStackTrace();
        try{
            connection.rollback();//如果出错就回滚
        }catch (SQLException e1){
            e1.printStackTrace();
        }
    }finally {
      	//关闭资源
        BaseDao.closeResource(connection,null,null);
    }
    return flag;
}

5、编写Servlet

//增加新用户
private void add(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
    //debug用的
  	System.out.printf("+++++++开始添加了哦----");
  	//从前端页面获取增加的数据字段
    String userCode = req.getParameter("userCode");
    String userName = req.getParameter("userName");
    String userPassword = req.getParameter("userPassword");
    String gender = req.getParameter("gender");
    String birthday = req.getParameter("birthday");
    String phone = req.getParameter("phone");
    String address = req.getParameter("address");
    String userRole = req.getParameter("userRole");
		
  	//数据存到user中
    User user = new User();
    user.setUserCode(userCode);
    user.setUserName(userName);
    user.setUserPassword(userPassword);
    user.setAddress(address);
    try {
        user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(birthday));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    user.setGender(Integer.valueOf(gender));
    user.setPhone(phone);
    user.setUserRole(Integer.valueOf(userRole));
    user.setCreationDate(new Date());
    user.setCreatedBy(((User) req.getSession().getAttribute(Constants.USER_SESSION)).getId());

    UserService userService = new UserServiceImpl();
    if (userService.add(user)) {//添加成功
        resp.sendRedirect(req.getContextPath() + "/jsp/user.do?method=query");
    } else {//添加失败
        req.getRequestDispatcher("useradd.jsp").forward(req, resp);
    }
}

二、增加数据存在的问题

这里存在一个问题,就是对于增加的用户是否已经存在,如果已经存在的话,就会报错,所以还需要对输入的用户进行查找操作。

1、userDao层接口判断

//查找用户是否已经存在
public User getUsercode(Connection connection,String userCode);

2、userDao层接口的实现类

@Override
public User getUsercode(Connection connection, String userCode) {
    PreparedStatement pstm = null;
    ResultSet rs = null;
    User user = null;
    try {
        if (null != connection) {
            String sql = "select * from smbms_user where userCode=?";//sql的查询语句
            Object[] params = {userCode};
            rs = BaseDao.execute(connection, pstm, rs, sql, params);
            //反复调用ResultSet的next()方法并读取每一行结果。
            System.out.println("我想看看rs是什么" + rs + "你好吗?");
            if (rs.next()) {
                user = new User();
                user.setId(rs.getInt("id"));
                user.setUserCode(rs.getString("userCode"));
                user.setUserName(rs.getString("userName"));
                user.setUserPassword(rs.getString("userPassword"));
                user.setGender(rs.getInt("gender"));
                user.setBirthday(rs.getDate("birthday"));
                user.setPhone(rs.getString("phone"));
                user.setAddress(rs.getString("address"));
                user.setUserRole(rs.getInt("userRole"));
                user.setCreatedBy(rs.getInt("createdBy"));
                user.setCreationDate(rs.getTimestamp("creationDate"));
                user.setModifyBy(rs.getInt("modifyBy"));
                user.setModifyDate(rs.getTimestamp("modifyDate"));
            }
        }
        BaseDao.closeResource(null, pstm, rs);//关闭资源
    } catch (SQLException throwables) {
        throwables.printStackTrace();
    }
    return  user;//返回结果
}

3、Service层接口判断

//判断用户是否已经存在
public  User getUsercode(String userCode);

4、Service层接口的实现类

//判断用户是否存在
@Override
public User getUsercode(String userCode) {
    Connection connection = null;
    User user = null;
    try {
        connection = BaseDao.getConnection();
        //通过业务层调用对应的具体数据库操作
        user = userDao.getUsercode(connection, userCode);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        BaseDao.closeResource(connection, null, null);
    }
    return user;
}

5、Servlet实现

//判断usrcode是否可用
private void userCodeExist(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    //判断用户账号是否可用
    String userCode = req.getParameter("userCode");
    String userPassword = req.getParameter("userPassword");
    HashMap<String, String> resultMap = new HashMap<String, String>();
    //System.out.printf("==测试+++"+userCode);
    if (userCode == null || userCode.equals("")) {
        //userCode == null || userCode.equals("")
        resultMap.put("userCode", "exist");
    } else {
        UserService userService = new UserServiceImpl();
        User user = userService.getUsercode(userCode);
        System.out.println("==测试++"+user);
        if (null != user) {
            resultMap.put("userCode", "exist");
        } else {
            resultMap.put("userCode", "notexist");
        }
    }
    //把resultMap转为json字符串以json的形式输出
    //配置上下文的输出类型
    resp.setContentType("application/json");
    //从response对象中获取往外输出的writer对象
    PrintWriter outPrintWriter = resp.getWriter();
    //把resultMap转为json字符串 输出
    outPrintWriter.write(JSONArray.toJSONString(resultMap));
    outPrintWriter.flush();//刷新
    outPrintWriter.close();//关闭流
}

三、 删除用户数据

1、userDao层的接口

//删除用户
public int deleteUserById(Connection connection,Integer usrid);

2、userDao层的接口实现类

//根据用户的id删除用户的信息
@Override
public int deleteUserById(Connection connection, Integer usrid) {
    //return 0;
    //写sql语句,根据usrid删除用户
    PreparedStatement pstm = null;
    int flag = 0;
    if(connection!=null){
        String sql = "delete from smbms_user where id=?";
        Object []params = {usrid};
        flag = BaseDao.execute(connection,pstm,sql,params);
        BaseDao.closeResource(null,pstm,null);
    }
    return  flag;
}

3、Service层的接口

//根据用户的id删除用户的信息
public boolean delusrbyid(Integer usrid);

4、Service层的接口实现类

//删除用户
@Override
public boolean delusrbyid(Integer usrid) {
    Connection connection = null;
    boolean flag = false;
    try{
        connection = BaseDao.getConnection();//获取链接
        //判断需要删除的用户是否合法
        if (userDao.deleteUserById(connection, usrid) > 0) {
            flag = true;
        }

    }catch (Exception e){
        e.printStackTrace();
    }finally {
        BaseDao.closeResource(connection,null,null);
    }
    return flag;
}

5、Servlet实现

//删除用户的信息
private void delusrbyid(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    String usrid = req.getParameter("uid");
    Integer delId = 0;
    try {
        delId = Integer.parseInt(usrid);
    } catch (Exception e) {
        // TODO: handle exception
        delId = 0;
    }
    HashMap<String, String> resultMap = new HashMap<String, String>();
    if (delId <= 0) {
        resultMap.put("delResult", "notexist");
    } else {
        UserService userService = new UserServiceImpl();
        if (userService.delusrbyid(delId)) {
            resultMap.put("delResult", "true");
        } else {
            resultMap.put("delResult", "false");
        }
    }

    //把resultMap转换成json对象输出
    resp.setContentType("application/json");
    PrintWriter outPrintWriter = resp.getWriter();
    outPrintWriter.write(JSONArray.toJSONString(resultMap));
    outPrintWriter.flush();
    outPrintWriter.close();
}

四、修改用户数据

1、userDao层的接口

/**
 * 修改用户信息
 */
int modify(Connection connection, User user) throws Exception;

2、userDao层的接口实现类

@Override
public int modify(Connection connection, User user) throws Exception {
    int flag = 0;
    PreparedStatement pstm = null;
    if (null != connection) {
        String sql = "update smbms_user set userName=?," +
                "gender=?,birthday=?,phone=?,address=?,userRole=?,modifyBy=?,modifyDate=? where id = ? ";
        Object[] params = {user.getUserName(), user.getGender(), user.getBirthday(),
                user.getPhone(), user.getAddress(), user.getUserRole(), user.getModifyBy(),
                user.getModifyDate(), user.getId()};
        flag = BaseDao.execute(connection, pstm, sql, params);
        BaseDao.closeResource(null, pstm, null);
    }
    return flag;
}

3、Service层的接口

/**
 * 修改用户信息
 */
public boolean modify(User user);

4、Service层接口的实现类

// 根据userCode查询出User
@Override
public User selectUserCodeExist(String userCode,String userPassword) {
    Connection connection = null;
    User user = null;
    try {
        connection = BaseDao.getConnection();
        user = userDao.getLoginUser(connection, userCode,userPassword);
        System.out.printf("你好啊"+user+"wohao");
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        BaseDao.closeResource(connection, null, null);
    }
    return user;
}

5、Servlet实现

    //修改用户数据并保存
    private void modify(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        String id = req.getParameter("uid");
        String userName = req.getParameter("userName");
        String gender = req.getParameter("gender");
        String birthday = req.getParameter("birthday");
        String phone = req.getParameter("phone");
        String address = req.getParameter("address");
        String userRole = req.getParameter("userRole");

        User user = new User();
        user.setId(Integer.valueOf(id));
        user.setUserName(userName);
        user.setGender(Integer.valueOf(gender));
        try {
            user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(birthday));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        user.setPhone(phone);
        user.setAddress(address);
        user.setUserRole(Integer.valueOf(userRole));
        user.setModifyBy(((User) req.getSession().getAttribute(Constants.USER_SESSION)).getId());
        user.setModifyDate(new Date());

        UserService userService = new UserServiceImpl();
        if (userService.modify(user)) {
            resp.sendRedirect(req.getContextPath() + "/jsp/user.do?method=query");
        } else {
            req.getRequestDispatcher("usermodify.jsp").forward(req, resp);
        }
}

五、查找用户数据

查找的操作相对复杂,具体可以直接看代码,都有比较详细的注释,这里查找用到了两张表,所以操作的时候需要注意一下。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h27Ldwkm-1611993881126)(/Users/maczhen/Library/Application Support/typora-user-images/image-20210130152926181.png)]
有三种查询的方式,可以直接根据用户名查询,或者是根据用户角色查询数据,再或者是根据用户名和用户角色一起查找!

1、根据用户查找

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GrVU7klf-1611993881127)(/Users/maczhen/Library/Application Support/typora-user-images/image-20210130153620809.png)]
2、根据角色查找

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zUJOQSTb-1611993881128)(/Users/maczhen/Library/Application Support/typora-user-images/image-20210130154308078.png)]
3、根据用户名和用户角色共同查找
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8WJL5SAm-1611993881129)(/Users/maczhen/Library/Application Support/typora-user-images/image-20210130154446062.png)]

记录时间:2021年1月30日

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值