Day20JavaWeb [tourism project] detailed function background code***

learning target

  • (1) Display the route according to the details and save the function
  • (2) The core of the background is still 业务方法withsql
  • (3) The core of the front desk is $(id)splicinghtml() get()

Details function

Introduction

Insert picture description here

analysis

The essence is to query multiple tables.
Insert picture description here

Details of the code behind

RouteServiceTest

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

The route object that needs to be returned contains route data, merchant data, classified data, and image data

Extend Route entity class


    //分类数据
    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) Through analysis, the data comes from four tables, so you can consider 2, or 3 query plan
  • (2) The core of using Mybatis is the developer's sql ability.
# 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

》Find route data 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>

》》Check 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>

》》Query merchant data 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>

》》Find pictures

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);

    }

}

Scan the mapping file in Mybatis

The mapper subtag package can simplify the following configuration

	<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>

for

    <mappers>
        <package name="com.wzx.dao"/>
    </mappers>
  • (1) The mapper subtag packaage can scan the compiled com.wzx.daodirectory
  • (2) It is required that XxxDao.java and XxxDao.xml have the same name
  • (3) Put it under the same package in idea, and write XxxDao.java under the com.wzx.dao package of src
  • XxxDao.xml is written under the com.wzx.dao file of resources, the folder must be created level by level

Guess you like

Origin blog.csdn.net/u013621398/article/details/108947473