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)" οnclick="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));