超市订单管理系统(7)-用户管理+分页功能


1.做用户查询的时候就不是单单的一条线了,因为我们要根据用户名查询用户,还要根据用户角色查询用户,还有就是一个分页的功能,只有当这三条线全部写完这个功能才能起来。

2.步骤:

  (1)先将userlist.jsp、rollpage.jsp以及分页的工具类PageSupport.java导入到项目相应的位置。

  (2)我们还是自底向上开发,先写根据用户名和用户角色查询用户这条线吧,还是熟悉的Dao-》service-》servlet

  (3)Dao层接口和实现类的编写

    ①接口设计:因为要根据用户名和用户角色查询用户,所以接口中的参数肯定要有username和userRole两个参数,因为要进行数据库操作,所以还要有connection参数

1     //根据用户名或者角色查询用户总数
2     public int getUserCount(Connection connection,String username,int userRole)throws Exception;
3 
4     //获取用户列表
5     public List<User> getUserList(Connection connection,String username,int userRole,int currentPageNo,int pageSize) throws Exception;
6 
7     //获取角色列表
8     public List<Role> getRoleList(Connection connection) throws Exception;

    ②实现类编写:在Dao层实现类userDao中编写的时候,如果真的不知道从哪里开始,就先把执行sql的工具类所需的几个参数写出来,因为Dao是直接操作数据库的,所以肯定要执行sql,而工具类中已经写好了执行sql的两个方法,因为这个是要进行查询,所以我们先把connection,preparedstatement,resultset,sql,params这几个参数看看哪个没有就往里卡卡一顿干。代码的具体细节上的东西可以看注释

//查询用户
    @Override
    public int getUserCount(Connection connection, String username, int userRole)
            throws Exception {
        PreparedStatement pstm=null;
        ResultSet rs=null;
        int count=0;

        if (connection != null) {
            //因为这里我们不仅仅是单单的去查一个表,要进行多表查询,就是当我们要根据用户输入的用户名或者用户角色去查询
            //所以肯定要进行一个sql的拼接,所以用StringBuffer,因为StringBuffer里边有append方法可以实现字符串的追加
            StringBuffer sql=new StringBuffer();
            ArrayList<Object> list = new ArrayList<>();
            //首先先把不需要追加条件时候的sql写出来
            sql.append("select count(1) as count from smbms_user u,smbms_role r where u.userRole=r.id");
            //因为功能既可以通过用户名查出来用户,也可以通过用户角色查出来用户,他们是一个或的关系,所以要进行判断
            //当用户名不为空的时候,将用户名条件往sql里拼接
            if (!StringUtils.isNullOrEmpty(username)) {
                //like是进行模糊查询的
                sql.append(" and u.userName like ?");
                //这里like后面需要传递参数,肯定不能向以前那样,可以考虑使用ArrayList
                list.add("%"+username+"%");
            }
            if (userRole>0) {
                sql.append(" and u.userRole like ?");
                list.add(userRole);
            }

            //因为我们需要的params是object类型,这里是arraylist类型,所以要将其转为object数组
            Object[] params=list.toArray();
            System.out.println("第二次的练习:"+sql.toString());

            //既然sql和传参都搞定了,那就是执行sql,处理查询结果集,关闭资源了
            rs=BaseDao.execute(connection,pstm,rs,sql.toString(),params);
            if (rs.next()) {
                //从结果集中获取用户数量,这个参数count就是sql语句中的取的那个别名count
                count=rs.getInt("count");
            }
            BaseDao.closeResource(null,pstm,rs);
        }
        return count;
    }

    //获取用户列表
    @Override
    public List<User> getUserList(Connection connection, String username, int userRole, int currentPageNo, int pageSize)
            throws Exception {
        PreparedStatement pstm=null;
        ResultSet rs=null;
        List<User> userList =new ArrayList<User>();

        if (connection != null) {
            StringBuffer sql=new StringBuffer();
            List<Object> list=new ArrayList<Object>();
            sql.append("select u.*,r.roleName as userRoleName from smbms_user u,smbms_role r where u.userRole = r.id");
            if (!StringUtils.isNullOrEmpty(username)) {
                sql.append(" and u.userName like ?");
                list.add("%"+username+"%");
            }
            if(userRole>0){
                sql.append(" and u.userRole like ?");
                list.add(userRole);
            }

            //在数据库中,分页使用 limit startIndex pageSize
            //当前页  (当前页-1)*页面大小
            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, pstm, rs, 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"));
                userList.add(user);
            }
            BaseDao.closeResource(null,pstm,rs);
        }
        return userList;
    }

    //获取角色列表
    @Override
    public List<Role> getRoleList(Connection connection) throws Exception {
        PreparedStatement pstm=null;
        ResultSet rs=null;
        List<Role> userRoleList=new ArrayList<Role>();
        if (connection != null) {
            String sql="select * from smbms_role";
            Object[] params={};
            rs= BaseDao.execute(connection,pstm,rs,sql,params);
            while (rs.next()){
                Role role=new Role();
                role.setID(rs.getInt("id"));
                role.setRoleCode(rs.getString("roleCode"));
                role.setRoleName(rs.getString("roleName"));
                userRoleList.add(role);
            }
            BaseDao.closeResource(null,pstm,rs);
        }
        return userRoleList;
    }

到这里dao层的三条线写完了===================================================================

  (3)Service层接口和实现类的编写

    ①接口的设计

//查询用户数量
    public int getUserCount(String username,int userRole);

    /**
     * 根据条件查询用户列表
     *
     * @param username
     * @param userRole
     * @return
     */
    public List<User> getUserList(String username, int userRole, int currentPageNo, int pageSize);

    //获取角色列表
    public List<Role> getRoleList();

    ②实现类的编写

 1 @Override
 2     public int getUserCount(String username, int userRole) {
 3         Connection connection=null;
 4         int count=0;
 5 
 6         try {
 7             connection=BaseDao.getConnection();
 8             count=userDao.getUserCount(connection,username,userRole);
 9         } catch (Exception e) {
10             e.printStackTrace();
11         }finally {
12             BaseDao.closeResource(connection,null,null);
13         }
14         return count;
15     }
16 
17     @Override
18     public List<User> getUserList(String username, int userRole, int currentPageNo, int pageSize) {
19         Connection connection = null;
20         List<User> userList = null;
21         System.out.println("queryUserName ---- > " + username);
22         System.out.println("queryUserRole ---- > " + userRole);
23         System.out.println("currentPageNo ---- > " + currentPageNo);
24         System.out.println("pageSize ---- > " + pageSize);
25         try {
26             connection = BaseDao.getConnection();
27             userList = userDao.getUserList(connection, username,userRole,currentPageNo,pageSize);
28         } catch (Exception e) {
29             e.printStackTrace();
30         }finally{
31             BaseDao.closeResource(connection, null, null);
32         }
33         return userList;
34     }
35 
36     @Test
37     public void test(){
38         UserService userService=new UserServiceImpl();
39         int count = userService.getUserCount(null, 0);
40         System.out.println(count);
41     }
42 
43 @Override
44     public List<Role> getRoleList() {
45         Connection connection=null;
46         List<Role> roleList=null;
47 
48         try {
49             connection= BaseDao.getConnection();
50             roleList=roleDao.getRoleList(connection);
51         } catch (Exception e) {
52             e.printStackTrace();
53         }finally {
54             BaseDao.closeResource(connection,null,null);
55         }
56         return roleList;
57     }
58 
59     @Test
60     public void test(){
61         RoleService roleService=new RoleServiceImpl();
62         List<Role> roleList = roleService.getRoleList();
63         for (Role role:roleList) {
64             System.out.println(role.getRoleName());
65         }
66     }

service层完毕==============================================================================

  (4)编写servlet

 1 //用户管理
 2     public void getUserList(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 3         String queryUsername = req.getParameter("queryname");
 4         String temp = req.getParameter("queryUserRole");
 5         String pageIndex = req.getParameter("pageIndex");
 6         int queryUserRole=0;
 7         //第一次请求一定是第一页,所以页面大小和页码是固定的
 8         int pageSize=5;
 9         int currentPageNo=1;
10 
11         //获取用户列表
12         UserServiceImpl userService = new UserServiceImpl();
13 
14         //判断前端传递的相关参数
15         if (queryUsername == null) {
16             queryUsername="";
17         }
18         if (temp != null && !temp.equals("")) {
19             //给查询赋值0,1,2,3
20             queryUserRole=Integer.parseInt(temp);
21         }
22         if (pageIndex != null) {
23             currentPageNo=Integer.parseInt(pageIndex);
24         }
25 
26         //获取用户总数量(分页:上一页 下一页的情况)
27         int totalCount = userService.getUserCount(queryUsername, queryUserRole);
28         //总页数支持
29         PageSupport pages = new PageSupport();
30         //设置当前页码
31         pages.setCurrentPageNo(currentPageNo);
32         //设置页总大小
33         pages.setPageSize(pageSize);
34         //设置页总数量
35         pages.setTotalCount(totalCount);
36 
37         //控制首页和尾页
38         int totalPageCount = pages.getTotalPageCount();
39 
40         if (currentPageNo < 1) {  //显示第一页的东西
41             currentPageNo = 1;
42         } else if (currentPageNo > totalPageCount) {//当前页面大于最后一页,让它为最后一页就行
43             currentPageNo = totalPageCount;
44         }
45 
46         List<User> userList = null;
47         userList = userService.getUserList(queryUsername, queryUserRole, currentPageNo, pageSize);
48         req.setAttribute("userList", userList);
49 
50         List<Role> roleList = null;
51         RoleService roleService = new RoleServiceImpl();
52         roleList = roleService.getRoleList();
53         req.setAttribute("roleList", roleList);
54 
55         req.setAttribute("queryUserName", queryUsername);
56         req.setAttribute("queryUserRole", queryUserRole);
57         req.setAttribute("totalPageCount", totalPageCount);
58         req.setAttribute("totalCount", totalCount);
59         req.setAttribute("currentPageNo", currentPageNo);
60         req.getRequestDispatcher("userlist.jsp").forward(req, resp);
61     }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM