Day20JavaWeb [ツーリズムプロジェクト]詳細な関数の背景コード***

学習目標

  • (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);
    }

返される必要のあるルートオブジェクトには、ルートデータ、マーチャントデータ、分類されたデータ、および画像データが含まれます

ルートエンティティクラスを拡張する


    //分类数据
    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)分析により、データは4つのテーブルから取得されるため、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のマッピングファイルをスキャンします

マッパーサブタグパッケージは、次の構成を簡素化できます

	<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)マッパーサブタグパッケージは、コンパイルされたcom.wzx.daoディレクトリをスキャンできます
  • (2)XxxDao.javaとXxxDao.xmlは同じ名前である必要があります
  • (3)アイデアとして同じパッケージの下に置き、srcのcom.wzx.daoパッケージの下にXxxDao.javaを記述します。
  • XxxDao.xmlはリソースのcom.wzx.daoファイルの下に書き込まれます。フォルダーはレベルごとに作成する必要があります

おすすめ

転載: blog.csdn.net/u013621398/article/details/108947473