超市訂單管理系統(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