SSM的增刪改功能實(shí)現(xiàn)
controller層
@RequestMapping("/updUserById.do")
public String updUserById(UserInfo userInfo){
userInfoService.updUserById(userInfo);
return "redirect:findAll.do";
}
@RequestMapping("/addUser.do")
public String addUser(UserInfo userInfo){
userInfoService.addUser(userInfo);
return "redirect:findAll.do";
}
@RequestMapping("/delUser")
public String delUser(int id) {
userInfoService.delUser(id);
return "redirect:findAll.do";
}
DAO層
//更新前的查詢
UserInfo findUserById(int id);
//update
void updUserById(UserInfo userInfo);
//add;id,username,password
void addUser(UserInfo userInfo);
//delete
void delUser(int id);
List<UserInfo> findUserByName(String username);
//login
UserInfo doLogin(String username);
Servie接口層
//更新前的查詢
UserInfo findUserById(int id);
//update
void updUserById(UserInfo userInfo);
//add;id,username,password
void addUser(UserInfo userInfo);
void delUser(int id);
//模糊查詢
List<UserInfo> findUserByName(String username,int page,int size);
Service實(shí)現(xiàn)層
@Override
public UserInfo findUserById(int id) {
return userDao.findUserById(id);
}
@Override
public void updUserById(UserInfo userInfo) {
userDao.updUserById(userInfo);
}
@Override
public void addUser(UserInfo userInfo) {
userDao.addUser(userInfo);
}
@Override
public void delUser(int id) {
userDao.delUser(id);
}
@Override
public List<UserInfo> findUserByName(String username,int page,int size) {
return userDao.findUserByName(username);
}
SQL語句的實(shí)現(xiàn)
<select id="findUserById" parameterType="java.lang.Integer" resultType="com.zhongruan.bean.UserInfo">
select * from tb_user where id=#{id}
</select>
<update id="updUserById" parameterType="com.zhongruan.bean.UserInfo">
update tb_user set username={#username},password={#password} where id=#{id}
</update>
<insert id="addUser" parameterType="com.zhongruan.bean.UserInfo">
insert into tb_user(id,username,password) values (#{id},#{username},#{password})
</insert>
<delete id="delUser" parameterType="java.lang.Integer">
delete from tb_user where id=#{id}
</delete>
<select id="findUserByName" parameterType="java.lang.String" resultType="com.zhongruan.bean.UserInfo">
select * from tb_user where username like '%' #{username} '%'
</select>
登錄功能的實(shí)現(xiàn)
Controller層
//login
@RequestMapping("/doLogin.do")
public String doLogin(String username, String password, HttpSession session){
UserInfo userInfo=userInfoService.doLogin(username);
if (userInfo !=null){
if (userInfo.getPassword().equals(password)){
System.out.println("登錄成功");
session.setAttribute("userInfo",userInfo);
return "main";
}else{
System.out.println("密碼錯誤纱昧,請重新登錄!");
session.setAttribute("message","密碼錯誤缀去,請重新輸入侣灶!");
return "../login";
}
}else {
System.out.println("用戶不存在,請重新輸入缕碎!");
session.setAttribute("message","用戶不存在褥影,請重新輸入!");
return "../login";
}
}
}
DAO層
//login
UserInfo doLogin(String username);
Service接口層
UserInfo doLogin(String username);咏雌、
Service實(shí)現(xiàn)層
@Override
public UserInfo doLogin(String username) {
return userDao.doLogin(username);
}
}
SQL語句
<select id="doLogin" resultType="com.zhongruan.bean.UserInfo" parameterType="java.lang.String">
select * from tb_user where username=#{username}
</select>
分頁管理的實(shí)現(xiàn)
Controller層
@RequestMapping("/user")
public class UserInfoController {
@Autowired
private UserInfoService userInfoService;
@RequestMapping("/findAll.do")
public ModelAndView findAll(@RequestParam(defaultValue="1") int page, @RequestParam(defaultValue = "5") int size){
List<UserInfo> userInfoList=userInfoService.findAll(page,size);
//把得到的結(jié)果集 給到pagehelper中得到內(nèi)置對象PageInfo中
PageInfo pageInfo=new PageInfo(userInfoList);
ModelAndView mv = new ModelAndView();
mv.addObject("pageInfo",pageInfo);
mv.setViewName("user-list");
return mv;
}
DAO層
//全部查詢
List<UserInfo> findAll();
Service接口層
//全部查詢
List<UserInfo> findAll(int page,int size);
Service實(shí)現(xiàn)層
@Override
public List<UserInfo> findAll(int page, int size) {
//開啟分頁信息
PageHelper.startPage(page,size);
return userDao.findAll();
}
課后問題
請求轉(zhuǎn)發(fā)forward 和 重定向redirect的區(qū)別
轉(zhuǎn)發(fā)是服務(wù)器行為凡怎,重定向是客戶端行為。
轉(zhuǎn)發(fā)過程:客戶瀏覽器發(fā)送http請求——》web服務(wù)器接受此請求——》調(diào)用內(nèi)部的一個方法在容器內(nèi)部完成請求處理和轉(zhuǎn)發(fā)動作——》將目標(biāo)資源發(fā)送給客戶赊抖;在這里统倒,轉(zhuǎn)發(fā)的路徑必須是同一個web容器下的url,其不能轉(zhuǎn)向到其他的web路徑上去氛雪,中間傳遞的是自己的容器內(nèi)的request房匆。在客戶瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑,也就是說客戶是感覺不到服務(wù)器做了轉(zhuǎn)發(fā)的报亩。轉(zhuǎn)發(fā)行為是瀏覽器只做了一次訪問請求浴鸿。
重定向過程:客戶瀏覽器發(fā)送http請求——》web服務(wù)器接受后發(fā)送302狀態(tài)碼響應(yīng)及對應(yīng)新的location給客戶瀏覽器——》客戶瀏覽器發(fā)現(xiàn)是302響應(yīng),則自動再發(fā)送一個新的http請求弦追,請求url是新的location地址——》服務(wù)器根據(jù)此請求尋找資源并發(fā)送給客戶岳链。在這里location可以重定向到任意URL,既然是瀏覽器重新發(fā)出了請求骗卜,則就沒有什么request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑左胞,客戶可以觀察到地址的變化的寇仓。重定向行為是瀏覽器做了至少兩次的訪問請求的。-
get和post的優(yōu)缺點(diǎn)
PageHelper的參數(shù)
//當(dāng)前頁
private int pageNum;
//每頁的數(shù)量
private int pageSize;
//當(dāng)前頁的數(shù)量
private int size;
//由于startRow和endRow不常用烤宙,這里說個具體的用法
//可以在頁面中"顯示startRow到endRow 共size條數(shù)據(jù)"
//當(dāng)前頁面第一個元素在數(shù)據(jù)庫中的行號
private int startRow;
//當(dāng)前頁面最后一個元素在數(shù)據(jù)庫中的行號
private int endRow;
//總記錄數(shù)
private long total;
//總頁數(shù)
private int pages;
//結(jié)果集
private List list;
//第一頁
private int firstPage;
//前一頁
private int prePage;
//是否為第一頁
private boolean isFirstPage = false;
//是否為最后一頁
private boolean isLastPage = false;
//是否有前一頁
private boolean hasPreviousPage = false;
//是否有下一頁
private boolean hasNextPage = false;
//導(dǎo)航頁碼數(shù)
private int navigatePages;
//所有導(dǎo)航頁號
private int[] navigatepageNums;