使用者列表基本頁面搭建(框架流程、分頁)
阿新 • • 發佈:2019-01-25
使用者管理(查詢使用者)
1、以user_phone作為賬號,所以要在表中將user_phone設為唯一性unique
設計表 --> 索引 --> 索引型別unique
2、先寫UserInfoService和UserInfoDAO,先進行單元測試
1>在UserInfoDAO中增加一個查詢使用者資訊的方法返回使用者列表
2>在對應的對映檔案UserInfoDAO.xml中新增對映(註冊sql)
注意:不要用*,要把屬性羅列出來
定義查詢返回的結果型別resultMap:(這些程式碼可自動生成)
註冊查詢的sql:(注意,要把配置好的結果型別通過resultMap引入)
3>編寫IUserInfoService
4>修改實現類UserInfoServiceImpl,新增剛才的查詢方法
5>進行測試(每寫一個模組的dao,要進行單元測試,通過再和前端整合
)
UserTest:
但是當:
user.setUserType("");
執行成功,但無記錄查詢出來
修改:(and userType != '')
<where>
<if test="userType != null and userType != ''">
and user_type = #{userType}
</if>
3、當編寫好UserInfoService和UserInfoDAO,並進行單元測試成功後,
編寫UserInfoController控制頁面跳轉並把IUserInfoService介面中的
資料提取到顯示頁面
4、在前端頁面userinfo_list.jsp中:
1>${list}即可取值
2>引用標籤庫:
3>進行迴圈遍歷輸出list中的值:
5、根據名字查詢,則利用到了配置檔案中的
當用戶輸入名字進行查詢時,名字不為空則按名字進行查詢;當用戶不輸
入名字時,則名字為空,就不加上名字這個查詢條件,所以就查詢出全
部
6、對查詢結果進行分頁:
select * from user_info limit 0,10
由於每個實體類都需要對結果進行分頁顯示,進行提取做utils,進行繼
承
1>utils --> BaseBean.java
然後每個實體類對BaseBean進行繼承
2>對UserInfoDAO.xml進行配置修改:
新增:
3>utils --> BaseController.java
處理分頁,對各個頁面進行初始化分頁資訊
4>如果要分頁,則繼承BaseController
UserInfoController繼承BaseController
5>UserInfoController.java:
新增引數HttpServletRequest request
還差總記錄數,才能初始化分頁
所以dao層還需要新增一個查詢總記錄數的方法
6>UserInfoDAO.java:(需要新增引數user,因為按條件分頁要用到)
7>對應的,在UserInfoDAO.xml中配置相關sql
<!--這裡返回型別為long -->
注意這裡返回型別為long,用resultType宣告
8>對應的,在service層IUserInfoService新增查詢總記錄數的方法
9>對應的,在service的實現層UserInfoServiceImpl中新增方法
10>在UserInfoController中
this.setTotal(userservice.getcount(user));//獲取總記錄數
11>前端的分頁設定res/jsp/pager_tag.jsp
在對應頁面呼叫分頁:
1、引入分頁標籤(pom.xml中引入了開源分頁標籤)
2、在應用處新增如下程式碼
"../../../res/jsp/pager_tag.jsp"意思為,往上返回三層目錄
結構到res再取得模板jsp
12>單元測試testcount()
13>注意UserInfoController要用model向頁面返回值!!
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));