多条件查询与分页:
通过页面的houseName、floorage获取值传到前端视图(HouseSearchVO)实体类中的houseName,floorage建立houseSearchVO对象。
通过controller控制层getHouseSearch方法得到houseName,floorage的值 存在哪个就将此值传到后端(HouseSearch)实体类中建立houseSearch对象。
list.jsp: HouseSearchVO:
HouseController:
此时返回一个houseSearch对象。通过HouseService中的search方法调用HouseDAO中的查询,此时传到HouseDAO.xml调用sql语句
HouseService: HouseDAO:
HouseDAO.xml:
分页插件:
页面显示:
源码:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > 3 <mapper namespace="com.etc.dao.HouseDAO"> 4 <insert id="add"> 5 INSERT INTO `t_house` ( 6 `h_name`, 7 `h_rect`, 8 `h_date`, 9 `h_loc1`, 10 `h_loc2`, 11 `h_img`, 12 `h_userId` 13 ) 14 VALUES 15 ( 16 #{hName}, 17 #{hRect}, 18 #{hDate}, 19 #{hLoc1}, 20 #{hLoc2}, 21 #{hImg}, 22 #{userId} 23 ); 24 </insert> 25 26 <select id="serach" resultType="house"> 27 SELECT * from `t_house` 28 <where> 29 <if test="houseName!=null"> 30 h_name like '%${houseName}%' 31 </if> 32 <if test="minRect!=null and maxRect!=null"> 33 and h_rect between #{minRect} and #{maxRect} 34 </if> 35 </where> 36 37 </select> 38 39 </mapper>
1 package com.etc.controller; 2 3 import com.etc.Vo.HouseSearchVO; 4 import com.etc.Vo.HouseVO; 5 import com.etc.common.Constant; 6 import com.etc.converter.HouseConverter; 7 import com.etc.entity.House; 8 import com.etc.entity.HouseSearch; 9 import com.etc.entity.User; 10 import com.etc.servise.HouseService; 11 import com.github.pagehelper.PageHelper; 12 import com.github.pagehelper.PageInfo; 13 import org.springframework.beans.factory.annotation.Autowired; 14 import org.springframework.stereotype.Controller; 15 import org.springframework.ui.Model; 16 import org.springframework.util.StringUtils; 17 import org.springframework.web.bind.annotation.RequestMapping; 18 19 import javax.servlet.http.HttpSession; 20 import java.io.File; 21 import java.io.IOException; 22 import java.util.List; 23 24 @Controller 25 @RequestMapping("/house") 26 public class HouseController { 27 28 public static final String UPLOAD_DIR="D:\\images\\"; 29 30 @Autowired 31 private HouseService houseService; 32 33 @RequestMapping("/add") 34 public String add(HouseVO houseVO, HttpSession session) throws IOException { 35 //获取session中的user对象 36 User user=(User) session.getAttribute("user"); 37 //拿到user对象的id 38 int userId=user.getUserId(); 39 //设置文件上传的路径 40 houseVO.getHImg().transferTo(new File(UPLOAD_DIR+houseVO.getHImg().getOriginalFilename())); 41 //建立house对象 42 House house=HouseConverter.convert(houseVO,houseVO.getHImg().getOriginalFilename(),userId); 43 //调用添加方法 44 houseService.add(house); 45 return "list"; 46 } 47 48 @RequestMapping("/serach") 49 public String serach(HouseSearchVO houseSearchVO, Model model,Integer pageNum) { 50 if(pageNum==null){ 51 pageNum=1; 52 } 53 54 HouseSearch houseSearch = getHouseSearch(houseSearchVO); 55 List<House> serach = houseService.serach(houseSearch); 56 57 PageHelper.startPage(pageNum, Constant.PAGE_SIZE); 58 PageInfo<House> pageInfo = new PageInfo<>(serach); 59 model.addAttribute("pageInfo",pageInfo); 60 return "list"; 61 } 62 63 private HouseSearch getHouseSearch(HouseSearchVO houseSearchVO) { 64 HouseSearch houseSearch =new HouseSearch(); 65 if(!StringUtils.isEmpty(houseSearchVO.getHouseName())){ 66 houseSearch.setHouseName(houseSearchVO.getHouseName()); 67 } 68 if(!StringUtils.isEmpty(houseSearchVO.getFloorage())){ 69 String[] split = houseSearchVO.getFloorage().split("-"); 70 houseSearch.setMinRect(Double.valueOf(split[0])); 71 houseSearch.setMaxRect(Double.valueOf(split[1])); 72 } 73 return houseSearch; 74 } 75 76 }
1 package com.etc.servise; 2 3 import com.etc.entity.HouseSearch; 4 import com.etc.dao.HouseDAO; 5 import com.etc.entity.House; 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.stereotype.Service; 8 9 import java.util.List; 10 11 @Service 12 public class HouseService { 13 14 @Autowired 15 private HouseDAO houseDAO; 16 17 public void add(House house){ 18 houseDAO.add(house); 19 } 20 21 public List<House> serach(HouseSearch houseSearch){ 22 List<House> serach = houseDAO.serach(houseSearch); 23 return serach; 24 } 25 26 }
1 package com.etc.dao; 2 3 import com.etc.entity.HouseSearch; 4 import com.etc.entity.House; 5 6 import java.util.List; 7 8 public interface HouseDAO { 9 10 void add(House house); 11 12 List<House> serach(HouseSearch houseSearch); 13 }
1 package com.etc.Vo; 2 3 import lombok.AllArgsConstructor; 4 import lombok.Data; 5 import lombok.NoArgsConstructor; 6 7 @Data 8 @AllArgsConstructor 9 @NoArgsConstructor 10 public class HouseSearchVO { 11 private String houseName; 12 private String floorage; 13 }
1 package com.etc.entity; 2 3 import lombok.AllArgsConstructor; 4 import lombok.Data; 5 import lombok.NoArgsConstructor; 6 7 @Data 8 @AllArgsConstructor 9 @NoArgsConstructor 10 public class HouseSearch { 11 private String houseName; 12 private Double minRect; 13 private Double maxRect; 14 15 }
1 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd"> 3 <!-- saved from url=(0030)http://localhost:8080/House-2/ --> 4 <HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>布谷租房 - 首页</TITLE> 5 <META content="text/html; charset=utf-8" http-equiv=Content-Type> 6 <LINK rel=stylesheet type=text/css href="../css/style.css"> 7 <META name=GENERATOR content="MSHTML 8.00.7601.17514"></HEAD> 8 <BODY> 9 <DIV id=header class=wrap> 10 <DIV id=logo><IMG src="../images/logo.gif"></DIV></DIV> 11 <DIV id=navbar class=wrap> 12 <DL class="search clearfix"> 13 <FORM id=sform method=post action=/house/serach> 14 <DT> 15 <UL> 16 <LI class=bold>房屋信息</LI> 17 <LI>标题:<INPUT class=text type=text name=houseName> <LABEL class=ui-blue> 18 <INPUT value=搜索房屋 type=submit name=search></LABEL> 19 </LI></UL></DT> 20 <DD> 21 <UL> 22 <LI class=first>面积 </LI> 23 <LI><SELECT name=floorage> <OPTION selected value="">不限</OPTION> <OPTION 24 value=0-40>40以下</OPTION> <OPTION value=40-500>40-500</OPTION> <OPTION 25 value=500-1000000>500以上</OPTION></SELECT> </LI></UL></DD> 26 <DD> 27 <UL> 28 <LI class=first>价格 </LI> 29 <LI><SELECT name=price> <OPTION selected value="">不限</OPTION> <OPTION 30 value=0-100>100元以下</OPTION> <OPTION value=100-200>100元—200元</OPTION> 31 <OPTION value=200-1000000>200元以上</OPTION></SELECT> </LI></UL></DD> 32 <DD> 33 <UL> 34 <LI class=first>房屋位置</LI> 35 <LI><SELECT id=street name=street_id> <OPTION selected 36 value="">不限</OPTION> <OPTION value=1000>知春路</OPTION> <OPTION 37 value=1001>中关村大街</OPTION> <OPTION value=1002>学院路</OPTION> <OPTION 38 value=1003>朝阳路</OPTION></SELECT> </LI></UL></DD> 39 <DD> 40 <UL> 41 <LI class=first>房型</LI> 42 <LI><SELECT name=type_id> <OPTION selected value="">不限</OPTION> <OPTION 43 value=1000>一室一厅</OPTION> <OPTION value=1001>一室两厅</OPTION> <OPTION 44 value=1002>两室一厅</OPTION> <OPTION value=1003>两室两厅</OPTION></SELECT> 45 </LI></UL></DD> 46 </FORM></DL></DIV> 47 <DIV class="main wrap"> 48 <TABLE class=house-list> 49 <TBODY> 50 <c:forEach items="${pageInfo.list}" var="house"> 51 <TR> 52 <TD class=house-thumb><span><A href="../../details.jsp" target="_blank"><img src="../images/thumb_house.gif" width="100" height="75" alt=""></a></span></TD> 53 <TD> 54 <DL> 55 <DT><A href="../../details.jsp" target="_blank">${house.HName}</A></DT> 56 <DD>${house.HLoc1}${house.HLoc2},${house.HRect}平米<BR>联系方式:3456 </DD></DL></TD> 57 <TD class=house-type>一室一厅</TD> 58 <TD class=house-price><SPAN>346.0</SPAN>元/月</TD></TR> 59 </c:forEach> 60 </TBODY></TABLE> 61 <DIV class=pager> 62 <UL> 63 <LI class=current><A href="?pageNum=${pageInfo.firstPage}">首页</A></LI> 64 <LI><A href="?pageNum=${pageInfo.hasPreviousPage?pageInfo.prePage:pageInfo.pageNum}">上一页</A></LI> 65 <LI><A href="?pageNum=${pageInfo.hasNextPage?pageInfo.nextPage:pageInfo.pageNum}">下一页</A></LI> 66 <LI><A href="?pageNum=${pageInfo.lastPage}">末页</A></LI></UL><SPAN 67 class=total>${pageInfo.pageNum}/${pageInfo.pages}页</SPAN> </DIV></DIV> 68 <DIV id=footer class=wrap> 69 <DL> 70 <DT>布谷租房 © 2010 布谷租房 京ICP证1000001号</DT> 71 <DD>关于我们 · 联系方式 · 意见反馈 · 帮助中心</DD></DL></DIV></BODY></HTML>