• 超市管理系统总结篇一


    项目流程图:

    项目原理流程图

    提示:由于时间关系,系统只写了用户这一条线,其他角色基本类似

    项目架构设计

    image-20210222115336592

    1.DAO包下Basedao,封装了数据库底层连接,查询,修改操作,并向外提供调用接口

    package com.xia.dao;
    
    import com.mysql.jdbc.Driver;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.*;
    import java.util.Properties;
    
    public class Basedao {
        private static String driver;
        private static String url;
        private static String username;
        private static String password;
    
        static{
            InputStream resourceAsStream = Basedao.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties = new Properties();
            try {
                properties.load(resourceAsStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
            driver=properties.getProperty("driver");
            url=properties.getProperty("url");
            username=properties.getProperty("username");
            password=properties.getProperty("password");
    
        }
        //连接数据库
        public static Connection getConnect(){
            Connection con=null;
            try {
                Class.forName(driver);
                 con = DriverManager.getConnection(url, username, password);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            return  con;
        }
        //编写查询公共类
        public static ResultSet execute(Connection connection,String sql,Object[] param) throws SQLException {
            //预编译sql
              PreparedStatement preparedStatement = connection.prepareStatement(sql);
            for (int i = 0; i < param.length; i++) {
                preparedStatement.setObject(i+1,param[i]);
            }
           ResultSet resultSet = preparedStatement.executeQuery();
            return  resultSet;
        }
        //编写增删改
        public static int update(Connection connection,String sql,Object[] param) throws SQLException {
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            for (int i = 0; i < param.length; i++) {
                preparedStatement.setObject(i+1,param[i]);
            }
           int resultSet = preparedStatement.executeUpdate();
            return  resultSet;
        }
        //释放资源
        public static boolean closeResources(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet){
            boolean flag = true;
            try {
                if(resultSet!=null){
                    resultSet.close();
                    //垃圾回收
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
                flag=false;
            }
            try {
                if(preparedStatement!=null){
                    preparedStatement.close();
                    //垃圾回收
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
                flag=false;
            }
            try {
                if(connection!=null){
                    connection.close();
                    //垃圾回收
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
                flag=false;
            }
            return  flag;
        }
    
    }
    
    

    2.DAO包下的UserDao接口,UserDaoImpl实现类,用来实现编写具体sql语句操作,向外提供接口

    package com.xia.dao.user;
    
    import com.xia.pojo.Role;
    import com.xia.pojo.User;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.List;
    
    public interface UserDao {
        //得到要登录的用户
        public User getloginUser(Connection connection,String userCode);
        //修改密码
        public  int updatePwd(Connection connection,int id,String pwd);
        //查询用户总数
        public  int getUserCount(Connection connection,String username,int userRole);
       //获取用户列表
        public List<User> getUserList(Connection connection, String userName, int userRole, int currentPageNo, int pageSize)throws Exception;
       //添加用户
        public  int add(Connection connection,User user)throws Exception;
    }
    
    

    package com.xia.dao.user;
    
    import com.mysql.cj.util.StringUtils;
    import com.xia.dao.Basedao;
    import com.xia.pojo.Role;
    import com.xia.pojo.User;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    public class UserDaoImpl implements UserDao{
        @Override
        public User getloginUser(Connection connection, String userCode) {
            PreparedStatement pstm=null;
            User user=null;
            ResultSet resultSet=null;
            if (connection!=null) {
                String sql = "select * from smbms_user where userCode=?";
                Object[] param = {userCode};
                try {
                    ResultSet rs = Basedao.execute(connection,sql,param);
                   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.closeResources(connection,null,rs);
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
    
            return  user;
        }
    
        @Override
        public int updatePwd(Connection connection, int id, String pwd) {
            String sql = "update smbms_user set userPassword=? where id=? ";
            PreparedStatement pstm = null;
            int rs=0;
            if (connection != null) {
                Object[] param = {pwd,id};
                try {
                    rs = Basedao.update(connection, sql, param);
                    Basedao.closeResources(connection, null, null);
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            return rs;
        }
    
        @Override
        public int getUserCount(Connection connection, String username, int userRole) {
            ResultSet resultSet=null;
            int count=0;
            if (connection != null) {
                StringBuffer sql = new StringBuffer();
                sql.append("select count(1) as count from smbms_user u,smbms_role r where  u.userRole=r.id");
                ArrayList<Object> objects = new ArrayList<>();  //存在参数
                if(!StringUtils.isNullOrEmpty(username)){
                   sql.append(" and u.userName like ?");
                   objects.add("%"+username+"%");  //index=0
               }
               if(userRole>0){
                   sql.append(" and u.userRole = ?");
                   objects.add(userRole);
               }
                Object[] objects1=objects.toArray();
                System.out.println("UserdaoImpl->getUserCount:"+sql.toString());
    
                try {
                    resultSet= Basedao.execute(connection, sql.toString(), objects1);
                    if(resultSet.next()){
                    count=resultSet.getInt("count"); //获取总数
    
                    }
                    Basedao.closeResources(null,null ,resultSet);
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            return count;
        }
    
        @Override
        public List<User> getUserList(Connection connection, String userName, int userRole, int currentPageNo, int pageSize)
                throws Exception {
            // TODO Auto-generated method stub
            ResultSet rs = null;
            List<User> userList = new ArrayList<User>();
            if(connection != null){
                StringBuffer sql = new StringBuffer();
                sql.append("select u.*,r.roleName as userRoleName from smbms_user u,smbms_role r where u.userRole = r.id");
                List<Object> list = new ArrayList<Object>();
                if(!StringUtils.isNullOrEmpty(userName)){
                    sql.append(" and u.userName like ?");
                    list.add("%"+userName+"%");
                }
                if(userRole > 0){
                    sql.append(" and u.userRole = ?");
                    list.add(userRole);
                }
                //
                sql.append(" order by creationDate DESC limit ?,?");
                currentPageNo = (currentPageNo-1)*pageSize;
                list.add(currentPageNo);
                list.add(pageSize);
    
                Object[] params = list.toArray();
                System.out.println("sql ----> " + sql.toString());
                rs = Basedao.execute(connection, sql.toString(), params);
                while(rs.next()){
                    User _user = new User();
                    _user.setId(rs.getInt("id"));
                    _user.setUserCode(rs.getString("userCode"));
                    _user.setUserName(rs.getString("userName"));
                    _user.setGender(rs.getInt("gender"));
                    _user.setBirthday(rs.getDate("birthday"));
                    _user.setPhone(rs.getString("phone"));
                    _user.setUserRole(rs.getInt("userRole"));
                    _user.setUserRoleName(rs.getString("userRoleName"));
                    userList.add(_user);
                }
                Basedao.closeResources(null, null, rs);
            }
            return userList;
        }
    
        @Override
        public int add(Connection connection, User user) {
            int updateRows = 0;
            if(null != connection){
                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()};
                try {
                    updateRows = Basedao.update(connection, sql, params);
                    Basedao.closeResources(null, null,null);
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
    
            }
            return updateRows;
        }
    
    
    }
    
    

    3,Service包下的UserService,UserServiceImpL属于业务层代码,承上启下,是servlet和数据库调用的桥梁,专注于业务

    package com.xia.service.user;
    
    import com.xia.pojo.User;
    
    import java.util.List;
    
    public interface UserService {
        //用户登录
        public User login(String userCode,String password);
        //修改密码
        public int modifypwd(int id,String password);
        //获取用户总数
        public  int getCount(String username,int userRole);
        //获取用户列表
        public List<User> getUserList(String queryUserName, int queryUserRole, int currentPageNo, int pageSize);
       //增加用户
        public boolean add(User user)throws Exception;
    }
    
    
    package com.xia.service.user;
    
    import com.xia.dao.Basedao;
    import com.xia.dao.user.UserDao;
    import com.xia.dao.user.UserDaoImpl;
    import com.xia.pojo.User;
    import org.junit.jupiter.api.Test;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.List;
    
    public class UserServiceImpL implements UserService{
        //业务层会调用dao层,引入dao
        private UserDao userDao;
    
        public UserServiceImpL() {
            userDao =new UserDaoImpl();
        }
    
    
        @Override
        public User login(String userCode, String password) {
            Connection connection=null;
            User user=null;
            try {
                connection= Basedao.getConnect();
                user=userDao.getloginUser(connection,userCode);
                if (!(user.getUserPassword().equals(password)))
                {
                    user=null;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                Basedao.closeResources(connection,null,null);
            }
            return  user;
        }
        @Override
        public int modifypwd(int id, String password) {
            Connection connection=null;
            int user=0;
            try {
                connection= Basedao.getConnect();
                user=userDao.updatePwd(connection,id,password);
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                Basedao.closeResources(connection,null,null);
            }
            return  user;
        }
    
        @Override
        public int getCount(String username, int userRole) {
            Connection connection=null;
            int user=0;
            try {
                connection= Basedao.getConnect();
                user=userDao.getUserCount(connection,username,userRole);
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                Basedao.closeResources(connection,null,null);
            }
            return  user;
        }
    
        @Override
        public List<User> getUserList(String queryUserName, int queryUserRole, int currentPageNo, int pageSize) {
            // TODO Auto-generated method stub
            Connection connection = null;
            List<User> userList = null;
            System.out.println("queryUserName ---- > " + queryUserName);
            System.out.println("queryUserRole ---- > " + queryUserRole);
            System.out.println("currentPageNo ---- > " + currentPageNo);
            System.out.println("pageSize ---- > " + pageSize);
            try {
                connection = Basedao.getConnect();
                userList = userDao.getUserList(connection, queryUserName,queryUserRole,currentPageNo,pageSize);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                Basedao.closeResources(connection, null, null);
            }
            return userList;
        }
    
    
        //增删改都属于事务,ACID,要考虑失败回滚
        @Override
        public boolean add(User user) {
            boolean flag = false;
            Connection connection = null;
            try {
                connection = Basedao.getConnect();
                connection.setAutoCommit(false);//开启JDBC事务管理
                int updateRows = userDao.add(connection,user);
                connection.commit();
                if(updateRows > 0){
                    flag = true;
                    System.out.println("add success!");
                }else{
                    System.out.println("add failed!");
                }
    
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                try {
                    System.out.println("rollback==================");
                    connection.rollback();
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }finally{
                //在service层进行connection连接的关闭
                Basedao.closeResources(connection, null, null);
            }
            return flag;
        }
    
    
        @Test
        public  void test(){
            UserServiceImpL userServiceImpL = new UserServiceImpL();
            System.out.println("总数"+userServiceImpL.getCount("", 0));
        }
    }
    

    4.控制层借助Servlet来实现,对视图层的不同请求做出响应,实现页面的跳转,前端要展示数据的传递等

    在这里插入图片描述

    UserServlet 用户登陆

    package com.xia.servlet;
    
    import com.xia.pojo.User;
    import com.xia.service.user.UserServiceImpL;
    import com.xia.util.Constants;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class UserServlet  extends HttpServlet {
        //servlet控制层:调用业务层service
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("login");
            //获取用户名和密码
            String username = req.getParameter("userCode");
            String password=req.getParameter("userPassword");
            //验证,调用业务层
            UserServiceImpL userServiceImpL = new UserServiceImpL();
            User login = userServiceImpL.login(username, password);
            if(login!=null){  //验证通过,可以登录
                req.getSession().setAttribute(Constants.USER_SESSION,login);
                resp.sendRedirect(req.getContextPath()+"/jsp/frame.jsp");
            }
            else{  //查无此人,提示错误
                req.setAttribute("error","用户名或密码不正确");
                req.getRequestDispatcher("login.jsp").forward(req,resp);
            }
    
        }
    }
    
    

    Loginout 用户注销

    package com.xia.servlet;
    
    import com.xia.util.Constants;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class Loginout extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //移除用户的session
            req.getSession().removeAttribute(Constants.USER_SESSION);
            resp.sendRedirect(req.getContextPath()+"/login.jsp");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doPost(req, resp);
        }
    }
    
    
  • 相关阅读:
    Vsphere日记01.ESXi5.5.install
    Linux快速计算MD5和Sha1命令
    在linux虚机中装vmtools
    BT下载原理分析
    虚拟防火墙实验
    简单介绍一下vue2.0
    小白编程系列(一):编程语言选择
    html几种美丽的分割线
    利用:header匹配所有标题做目录
    markdown编辑器的小建议
  • 原文地址:https://www.cnblogs.com/xiaxiaopi/p/14429440.html
Copyright © 2020-2023  润新知