Day20JavaWeb【旅游项目】详情功能后台代码***

    科技2024-03-16  84

    学习目标

    (1)按详情显示路线,收藏 功能(2)后台最核心的还是业务方法与sql(3)前台最核心的是$(id) 拼接html() get()

    详情功能

    介绍

    分析

    本质是进行多个表的查询。

    详情的后台代码

    RouteServiceTest

    @Test public void test03() throws JsonProcessingException { //业务,根据 路线的rid查找 路线的数据,商家的数据,分类的数据,收藏的数据 RouteService routeService = new RouteService(); int rid = 1; Route route = routeService.findRouteById(rid); System.out.println(route); }

    需要返回的route对象内部包含 路线的数据,商家的数据,分类的数据,图片的数据

    扩展Route实体类

    //分类数据 private Category category; //商家数据 private Seller seller; //图片数据 private List<RouteImg> imgList;

    Serller.java

    public class Seller { private int sid;//商家id private String sname;//商家名称 private String consphone;//商家电话 private String address;//商家地址

    RouteImg

    public class RouteImg { private int rgid;//商品图片id private int rid;//旅游商品id private String bigPic;//详情商品大图 private String smallPic;//详情商品小图

    RouteService

    (1)通过分析,数据来自四个表,所以可以考虑2,或者3查询方案(2)使用Mybatis其实核心 是开发者的sql能力。 # rid =1 # 路线表 tab_route # 商家表 tab_seller # 图片表 tab_route_img # 分类表 tab_category select * from tab_route r where r.rid =1 ; select * from tab_route r,tab_seller s where r.rid =1 and r.sid=s.sid ; # 方式1:内连接查询的话,因为出现重复的数据,放弃 select * from tab_route r,tab_seller s,tab_route_img i where r.rid =1 and r.sid=s.sid and r.rid = i.rid; # 方式2:内连接查询的话,必须一对一 # 一个路线属于一个商家, 一个路线属于一个分类 # 一个路线可以包含多个图片 select * from tab_route r,tab_seller s,tab_category c where r.rid =1 and r.sid=s.sid and r.cid = c.cid; # 还差图片数据 select * from tab_route_img i where i.rid=1; #方式3: 详情数据来自四个表,拆成四个查询语句 select * from tab_route r where r.rid = 1; #路线 select * from tab_seller s where s.sid = 1; #商家数据 select * from tab_route_img i where i.rid=1;#图片数据 select * from tab_category c where c.cid =1;#分类数据 public Route findRouteById(int rid) { //数据来自四个表,执行四个查找方法 //路线数据 RouteDao routeDao = MySessionUtils2.getMapper(RouteDao.class); Route route =routeDao.findOneByRid(rid); //分类数据 CategoryDao categoryDao = MySessionUtils2.getMapper(CategoryDao.class); Category category = categoryDao.findOneByCid(route.getCid()); //设置给route对象 route.setCategory(category); //商家数据 SellerDao sellerDao = MySessionUtils2.getMapper(SellerDao.class); Seller seller = sellerDao.findOneBySid(route.getSid()); //设置给route对象 route.setSeller(seller); //图片数据 XxxxDao RouteImgDao routeImgDao = MySessionUtils2.getMapper(RouteImgDao.class); List<RouteImg> list= routeImgDao.findAllImgByRid(route.getRid()); route.setImgList(list); return route; }

    RouteDao

    》查找路线数据RouteDao.java

    //select * from tab_route r where r.rid = 1; Route findOneByRid(int rid); <!-- //select * from tab_route r where r.rid = 1;--> <!-- Route findOneByRid(int rid);--> <select id="findOneByRid" parameterType="int" resultType="route"> select * from tab_route r where r.rid =#{rid}; </select>

    》》查分类CategoryDao.java

    //select * from tab_category c where c.cid =1; Category findOneByCid(int cid); <!-- //select * from tab_category c where c.cid =1;--> <!-- Category findOneByCid(int cid);--> <select id="findOneByCid" parameterType="int" resultType="category"> select * from tab_category c where c.cid =#{cid} </select>

    》》查询商家数据SellerDao.java

    public interface SellerDao { //select * from tab_seller s where s.sid = 1; Seller findOneBySid(int sid) ; } <!-- //select * from tab_seller s where s.sid = 1;--> <!-- Seller findOneBySid(int sid) ;--> <select id="findOneBySid" parameterType="int" resultType="seller"> select * from tab_seller s where s.sid =#{sid}; </select>

    》》查找图片

    public interface RouteImgDao { //select * from tab_route_img i where i.rid=1; List<RouteImg> findAllImgByRid(int rid); }

    RouteDetailServlet

    @WebServlet("/routedetail/*") public class RouteDetailServlet extends BaseServlet { // /routedetail/find public void find(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 接收请求,获取参数 //业务,根据 路线的rid查找 路线的数据,商家的数据,分类的数据,图片的数据 String ridStr = request.getParameter("rid"); int rid = 1; //"1" try { rid = Integer.parseInt(ridStr); } catch (NumberFormatException e) { //Ctrl+Alt+T e.printStackTrace(); } //2 处理参数 RouteService routeService = new RouteService(); Route route = routeService.findRouteById(rid); //3 响应浏览器 String json = toJson(200,route); response.getWriter().println(json); } }

    Mybatis中扫描映射文件

    mapper子标签package可以简化以下配置

    <mappers> <mapper resource="com/wzx/dao/UserDao.xml"/> <mapper resource="com/wzx/dao/CategoryDao.xml"/> <mapper resource="com/wzx/dao/RouteDao.xml"/> <mapper resource="com/wzx/dao/SellerDao.xml"/> </mappers>

    <mappers> <package name="com.wzx.dao"/> </mappers> (1)mapper子标签 packaage可以扫描 编译后的com.wzx.dao目录(2)要求XxxDao.java与XxxDao.xml名字相同(3)在idea中 放在同一个包下面,XxxDao.java写在src的com.wzx.dao包下面XxxDao.xml写在resources的com.wzx.dao文件下面,文件夹必须一级一级创建
    Processed: 0.020, SQL: 8