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 }