1. 程式人生 > >使用者列表基本頁面搭建(框架流程、分頁)

使用者列表基本頁面搭建(框架流程、分頁)

使用者管理(查詢使用者)


1、以user_phone作為賬號,所以要在表中將user_phone設為唯一性unique


設計表 --> 索引 --> 索引型別unique 


2、先寫UserInfoService和UserInfoDAO,先進行單元測試


   1>在UserInfoDAO中增加一個查詢使用者資訊的方法返回使用者列表


	/**
	 * 根據條件查詢使用者資訊
	 * @param user 查詢條件
	 * @return
	 */
	public List<UserInfo> getUserList(UserInfo user);




   2>在對應的對映檔案UserInfoDAO.xml中新增對映(註冊sql)
       注意:不要用*,要把屬性羅列出來
  
     定義查詢返回的結果型別resultMap:(這些程式碼可自動生成)
    <resultMap type="UserInfo" id="usermap">
    <id column="user_id" property="userId"/> 
    <result column="user_name" property="userName"/>
    <result column="user_sex" property="userSex"/>
    <result column="user_phone" property="userPhone"/>
    <result column="user_pw" property="userPw"/>
    <result column="user_type" property="userType"/>
    </resultMap>




    註冊查詢的sql:(注意,要把配置好的結果型別通過resultMap引入)
    <select id="getUserList" parameterType="UserInfo"             


                           resultMap="usermap">
	    select * from user_info
	    <where>
                <!--當userType不為空時才加上if內的條件-->
	        <if test="userType != null">
	            and user_type = #{userType}
	        </if>
	        <if test="userName != null">
                and user_name like #{userName}	        
	        </if>
	    </where>
     </select>




    3>編寫IUserInfoService




     	/**
	 * 根據條件查詢使用者資訊
	 * @param user 查詢條件
	 * @return
	 */
	public List<UserInfo> getList(UserInfo user);


 


    4>修改實現類UserInfoServiceImpl,新增剛才的查詢方法

   	public List<UserInfo> getList(UserInfo user) {
       //user不為空
       if (user != null) {
	//使用者名稱不為空
	if (user.getUserName() != null && !user.getUserName


().equals("")) {
	user.setUserName("%" + user.getUserName() + "%");//模糊查


詢
			}
		}
		return userdao.getUserList(user);
	}



   
    5>進行測試(每寫一個模組的dao,要進行單元測試,通過再和前端整合


)


    UserTest:

       	     @Test			
	     public void testlist(){
	    	 UserInfo user = new UserInfo();
	    	 user.setUserName("華");
	    	 //呼叫介面中的方法進行查詢
	    	 List<UserInfo> list = service.getList(user);
	    	 
	    	 for(UserInfo u : list){
	    		 System.out.println(u);
	    	 }
	  }



     但是當:


                 user.setUserType("");


執行成功,但無記錄查詢出來
   
        修改:(and userType != '')
               <where>
       <if test="userType != null and userType != ''">
           and user_type = #{userType}
       </if>




3、當編寫好UserInfoService和UserInfoDAO,並進行單元測試成功後,
   編寫UserInfoController控制頁面跳轉並把IUserInfoService介面中的 


  資料提取到顯示頁面

        @Autowired
	private IUserInfoService userservice;


	public String list(UserInfo user,Model model){
		List<UserInfo> list = userservice.getList(user);
		
		//把介面中獲得的資料進行model中攜帶到前端頁面
		model.addAttribute("list", list);
		
		return "userinfo/userinfo_list";
	}





4、在前端頁面userinfo_list.jsp中:


        1>${list}即可取值


        2>引用標籤庫:
        <%@ taglib prefix="c"                              


uri="http://java.sun.com/jsp/jstl/core"%>    


 
        3>進行迴圈遍歷輸出list中的值:
</pre><pre name="code" class="html">	<c:forEach items="${list }" var="user">
	<tr>
        <td>${user.userId }</td>
        <td>${user.userName }</td>
	<td>${user.userSex }</td>
	<td>${user.userPhone }</td>
	<td>${user.userPw }</td>
	<td>${user.userType }</td>
	<td><a href="user/loadupdate.do?userId=${user.userId }">




修改</a> 
	<a href="javascript:void(0)" onclick="del


('${user.userId}')">刪除</a>
						
	</td>
	</tr>
	</c:forEach>






5、根據名字查詢,則利用到了配置檔案中的
     <select id="getUserList" parameterType="UserInfo"            


                            resultMap="usermap">
	    select * from user_info
	    <where>
                <!--當userType不為空時才加上if內的條件-->
	        <if test="userType != null">
	            and user_type = #{userType}
	        </if>


   當用戶輸入名字進行查詢時,名字不為空則按名字進行查詢;當用戶不輸 


   入名字時,則名字為空,就不加上名字這個查詢條件,所以就查詢出全 


   部
  


6、對查詢結果進行分頁:
   select * from user_info limit 0,10


   由於每個實體類都需要對結果進行分頁顯示,進行提取做utils,進行繼  


 承
   
   1>utils --> BaseBean.java
     然後每個實體類對BaseBean進行繼承


   package cn.zy.utils;


        public class BaseBean {


	//起始記錄數
	private int start;
	
	//每次查詢條數
	private int length;


	public int getStart() {
		return start;
	}


	public void setStart(int start) {
		this.start = start;
	}


	public int getLength() {
		return length;
	}


	public void setLength(int length) {
		this.length = length;
	}
	
}






   2>對UserInfoDAO.xml進行配置修改:
     新增:
             order by user_id desc
	    limit #{start},#{length}










    3>utils --> BaseController.java
      處理分頁,對各個頁面進行初始化分頁資訊


 
  package cn.zy.utils;


import javax.servlet.http.HttpServletRequest;


public class BaseController {
	/**
	 * 起始記錄數
	 */
	private int pageNo = 0;
	
	/**
	 * 總記錄數
	 */
	private long total;
	
	/**
	 * 每頁顯示記錄數
	 */
	public final static  int PAGE_NUM_BIG = 10;
	


	/**
	 * 初始化分頁資訊
	 */
	public void initPage(HttpServletRequest request){
		String page_str = request.getParameter


("pager.offset");
		if(page_str!=null && !page_str.equals("")){
			pageNo = Integer.parseInt(page_str);
		}
	}




	public int getPageNo() {
		return pageNo;
	}




	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}




	public long getTotal() {
		return total;
	}




	public void setTotal(long total) {
		this.total = total;
	}




	public static int getPageNumBig() {
		return PAGE_NUM_BIG;
	}
}
 




   4>如果要分頁,則繼承BaseController
     UserInfoController繼承BaseController


   5>UserInfoController.java:
     新增引數HttpServletRequest request
   if(user!=null){
	this.initPage(request);
	user.setStart(this.getPageNo());//起始記錄數
	user.setLength(PAGE_NUM_BIG);//每頁顯示記錄數
		}




   還差總記錄數,才能初始化分頁
   所以dao層還需要新增一個查詢總記錄數的方法


   6>UserInfoDAO.java:(需要新增引數user,因為按條件分頁要用到)
   	/**
	 * 獲取總記錄數
	 * @param user
	 * @return
	 */
	public long gercount(UserInfo user);




   7>對應的,在UserInfoDAO.xml中配置相關sql


         <!--這裡返回型別為long  -->
    <select id="getcount" parameterType="UserInfo"                


      resultType="long">
      select conut(1) as total from user_info
	    <where>
	        <if test="userName != null and userName != ''">
                user_name like #{userName}	        
	        </if>
	    </where>
    </select>


    注意這裡返回型別為long,用resultType宣告   


    8>對應的,在service層IUserInfoService新增查詢總記錄數的方法


    9>對應的,在service的實現層UserInfoServiceImpl中新增方法


    10>在UserInfoController中
      this.setTotal(userservice.getcount(user));//獲取總記錄數
 
    11>前端的分頁設定res/jsp/pager_tag.jsp
       在對應頁面呼叫分頁:
       1、引入分頁標籤(pom.xml中引入了開源分頁標籤)
          <%@ taglib prefix="pg"             


uri="http://jsptags.com/tags/navigation/pager"%>


      
       2、在應用處新增如下程式碼
        <div align="right" style="padding: 10px;">
	<pg:pager items="${total }" url="user/list.do"            


                     maxIndexPages="3"
					         


export="currentPageNumber=pageNumber" scope="request">
        <!-- 分頁條件 -->
	<pg:param name="userName" value="${userName }" />
        <!-- 將分頁模板jsp頁面包含進來-->
	<jsp:include page="../../../res/jsp/pager_tag.jsp"        


                                  flush="true" />
				</pg:pager>
			</div> 




        "../../../res/jsp/pager_tag.jsp"意思為,往上返回三層目錄  


      結構到res再取得模板jsp


     12>單元測試testcount()


     13>注意UserInfoController要用model向頁面返回值!!
     
     model.addAttribute("total", userservice.getcount(user));