黑马旅游网-学习笔记Part07
大约 6 分钟
黑马旅游网-学习笔记Part07
1. 旅游路线分页展示
旅游路线分页展示

接口信息: 👇
- 请求路径:
/travel/routeServlet
- 请求方式:GET
- 请求参数:
cid=5¤tPage=1&rname=null
- cid: 分类id
- currentPage: 当前页
- rname: 路线关键词
- 返回结果:
{
"totalCount": 513, //总共条目数
"totalPage": 52, //总页数
"currentPage": 1, //当前第几页
"pageSize": 10, //每页条数
"list": [ //当前页数据
{
"rid": 1,
"rname": "【旅展 半价特惠 重走丝路•漫游宁夏 双飞4天】银川西部影视城 穆民新村 中卫沙坡头【品美酒 回族学唱花儿 感悟民俗】",
"price": 999.0,
"routeIntroduce": "走进【宁夏沙坡头】,感受西北大漠风情、体会“大漠孤烟直,长河落日圆”的塞上风光!",
"rflag": "1",
"rdate": "2018-02-09 01:13:16",
"isThemeTour": "0",
"count": 0,
"cid": 5,
"rimage": "img/product/small/m304b69a4c8328f7d6b8d5dadef020fe07.jpg",
"sid": 1,
"sourceId": "23677",
"category": null,
"seller": null,
"routeImgList": null
},
{
"rid": 2,
"rname": "【官网专享 立减¥500 张家界天门山+大峡谷+凤凰古城+玻璃栈道+玻璃桥 高铁4天 无自费5钻】印象鲵宴-赶年宴+2晚蓝湾博格酒店",
"price": 1799.0,
"routeIntroduce": "官网专线,顶级品质!全程超豪华住宿,2晚入住超豪华铂金-蓝湾博格国际酒店,独家尊享金马VIP贵宾专用楼层。",
"rflag": "1",
"rdate": "2018-02-09 01:13:17",
"isThemeTour": "0",
"count": 990,
"cid": 5,
"rimage": "img/product/small/m34866f055de8630e94e25c40f277a79ba.jpg",
"sid": 1,
"sourceId": "22066",
"category": null,
"seller": null,
"routeImgList": null
}
]
}
代码操作
- 准备封装类、分页插件、检查uri编码
- 控制层的Servlet
- 业务层的Service
- 持久层的Mapper
1.domain 包下的实体类 👇
public class PageBean<T> {
private int totalCount;//总记录数
private int totalPage;//总页数
private int currentPage;//当前页码
private int pageSize;//每页显示的条数
private List<T> list;//每页显示的数据集合
// 补全getset方法
}
2.在pom.xml下导入PageHelper插件 进行物理分页👇
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
3.在mybatis-config.xml下配置插件 👇
<!--分页插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
4.检查pom.xml下的tomcat插件是否配置了uri编码为utf-8
RouteServlet接受参数,返回响应👇
@WebServlet("/routeServlet")
public class RouteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp){
//第一部分:获取前端传递过来的参数 cid=5¤tPage=1&rname=null
int cid = 0;
String id = req.getParameter("cid");
if (id.equals("null") || id.equals("")) {
cid = 5; //国内游
} else {
cid = Integer.parseInt(id);
}
//获取前端传递过来的搜索栏的数据
String rname = req.getParameter("rname");
//设置当前页码默认为1
int currentPage = 1;
String cPage = req.getParameter("currentPage");
if (cPage != null && cPage != "") {
currentPage = Integer.parseInt(cPage);
}
//设置每页显示的默认条数
int pageSize = 10;
System.out.println("cid:"+cid + " rname:"+rname +" 当前页码为:"+currentPage +" 每页"+pageSize+"条数据");
//第二部分 调用业务层查询分页数据
//调用routeServiceImpl 做查询操作
RouteService routeService = new RouteServiceImpl();
PageBean pageBean = routeService.queryPageAndRname2(currentPage, pageSize, cid, rname);;
//第三部分 将返回的对象 转成JSON字符串 返回
String jsonString = JSON.toJSONString(pageBean);
//设置响应头信息
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().write(jsonString);
}
}
业务层接口RouteService 👇
public interface RouteService {
PageBean queryPageAndRname2(int currentPage, int pageSize, int cid, String rname);
}
业务层接口实现类RouteServiceImpl 👇
public class RouteServiceImpl implements RouteService {
@Override
public PageBean queryPageAndRname2(int currentPage, int pageSize, int cid, String rname) {
//1 开启分页
PageHelper.startPage(currentPage, pageSize);
//2 查询数据
RouteMapper mapper = MybatisUtils.getSession().getMapper(RouteMapper.class);
List<Route> routes = mapper.findByPageAndRname2(cid, rname);
//3 获得分页查询数据
PageInfo<Route> pageInfo = new PageInfo(routes);
List<Route> list = pageInfo.getList();
int pages = pageInfo.getPages();
Long total = pageInfo.getTotal();
//4封装PageBean对象
PageBean<Route> pageBean = new PageBean<>();
pageBean.setTotalCount(total.intValue());
pageBean.setTotalPage(pages);
pageBean.setCurrentPage(currentPage);
pageBean.setPageSize(pageSize);
pageBean.setList(list);
return pageBean;
}
}
持久层Mapper接口 👇
public interface RouteMapper {
List<Route> findByPageAndRname2(@Param("cid")Integer cid, @Param("rname") String rname);
}
持久层Mapper映射文件 👇
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.itcast.travel.mapper.RouteMapper">
<select id="findByPageAndRname2" resultType="cn.itcast.travel.domain.Route">
SELECT * FROM tab_route
<where>
<if test="cid !=null">
and cid =#{cid}
</if>
<if test="rname !=null and rname !='' and rname !='null'">
and rname like concat('%',#{rname},'%')
</if>
</where>
</select>
</mapper>


2. 旅游线路的详情展示
旅游线路的详情展示

接口信息: 👇
- 请求路径:
/travel/findOneRouteServlet
- 请求方式:GET
- 请求参数:
rid=113
- rid: 路线id
- 返回结果:
代码操作
- 封装实体类,对应的表格
- 控制层的Servlet
- 业务层的Service
- 持久层的Mapper

RouteFindOneServlet接收参数,返回响应👇
@WebServlet("/findOneRouteServlet")
public class RouteFindOneServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 获取前端传递过来rid
String rid1 = req.getParameter("rid");
if (StringUtils.isEmpty(rid1)){
resp.setStatus(404);
resp.setContentType("application/html;charset=utf-8");
resp.getWriter().write("rid为null,请重试!");
return;
}
//2.调用业务层查询路线的信息
int rid = Integer.parseInt(rid1);
RouteService routeService = new RouteServiceImpl();
Route route = routeService.findOne(rid);
//3.将route对象转成json字符串,返回给前端
String jsonString = JSON.toJSONString(route);
//设置响应头信息
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().write(jsonString);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
业务层接口RouteService 👇
public interface RouteService {
Route findOne(int rid);
}
业务层接口实现类RouteServiceImpl 👇
public class RouteServiceImpl implements RouteService {
@Override
public Route findOne(int rid) {
//1.创建sqlsession 查询 route表数据
SqlSession sqlSession = MybatisUtils.getSession();
RouteMapper mapper = sqlSession.getMapper(RouteMapper.class);
Route route = mapper.findAll(rid);
//2.通过sid查询商家信息表
int sid = route.getSid();
Seller seller = mapper.findSeller(sid);
//3.通过rid查询图片信息表
List<RouteImg> routeImgList = mapper.findImgByRid(rid);
//4.通过cid查询旅游线路分类
int cid = route.getCid();
CategoryService categoryService = new CategoryServiceImpl();
Category category = categoryService.findOneBycid(cid);
//4将数据封装到route实体类
route.setSeller(seller);
route.setRouteImgList(routeImgList);
route.setCategory(category);
sqlSession.close();
return route;
}
}
业务层接口CategoryService 👇
// 根据cid查询分类信息
Category findOneBycid(int cid);
业务层接口实现类CategoryServiceImpl 👇
public class CategoryServiceImpl implements CategoryService {
public Category findOneBycid(int cid) {
SqlSession session = MybatisUtils.getSession();
CategoryMapper mapper = session.getMapper(CategoryMapper.class);
Category category = mapper.findOneBycid(cid);
session.close();
return category;
}
}
持久层RouteMapper接口 👇
public interface RouteMapper {
// 根据id查询路线
Route findAll(int rid);
// 根据sid查询售卖者
Seller findSeller(int sid);
// 根据rid查询图片
List<RouteImg> findImgByRid(int rid);
}
持久层RouteMapper.xml映射文件 👇
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.itcast.travel.mapper.RouteMapper">
<select id="findAll" resultType="route">
select * from tab_route where rid =#{rid}
</select>
<select id="findSeller" resultType="seller">
select * from tab_seller where sid =#{sid}
</select>
<select id="findImgByRid" resultType="routeimg">
select * from tab_route_img where rid =#{rid}
</select>
</mapper>
持久层CategoryMapper接口 👇
public interface CategoryMapper {
Category findOneBycid(int cid);
}
持久层CategoryMapper.xml映射文件 👇
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.itcast.travel.mapper.CategoryMapper">
<select id="findOneBycid" resultType="category">
select * from tab_category where cid = #{cid}
</select>
</mapper>

