0
点赞
收藏
分享

微信扫一扫

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


学习目标

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

详情功能

介绍

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

分析

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

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

详情的后台代码

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文件下面,文件夹必须一级一级创建


举报

相关推荐

0 条评论