day02_springboot综合案例

news2024/12/25 9:16:04

day02_springboot综合案例

订单操作

查询所有订单

查询所有订单流程

查询订单,要把订单对应的产品也要查出来

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

Orders实体类

@Data
public class Orders {
    private String id;
    private String orderNum;
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
    private Date orderTime;
    private String orderTimeStr;
    private int orderStatus;
    private String orderStatusStr;
    private int peopleCount;
    private Product product;
    private List<Traveller> travellers;
    private Member member;
    private Integer payType;
    private String payTypeStr;
    private String orderDesc;
    //用于添加订单时,添加产品,会员
    private Integer productId;
    private Integer memberId;

    public String getOrderTimeStr() {
        // 对日期格式化
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        if (null != orderTime) {
            orderTimeStr = dateFormat.format(orderTime);
        }
        return orderTimeStr;
    }

    public String getPayTypeStr() {
        if (payType == 0){
            payTypeStr = "支付宝";
        } else if(payType == 1){
            payTypeStr = "微信";
        }else if(payType == 2){
            payTypeStr = "其他";
        }
        return payTypeStr;
    }


    public String getOrderStatusStr() {
        if (orderStatus == 0){
            orderStatusStr = "未支付";
        } else if(orderStatus == 1){
            orderStatusStr = "已支付";
        }
        return orderStatusStr;
    }
}

编写OrdersMapper

public interface OrderMapper {
    /**
     * 分页查询所有订单
     */
    List<Orders> findAll();

编写OrdersService


public interface OrderService {

    /**
     * 分页查询所有订单
     * @param page
     * @param size
     * @return
     */
    List<Orders> findAll(Integer page, Integer size);
}

@Service
public class OrderServiceImpl implements OrderService {
    
    @Autowired
    private OrderMapper orderMapper;

    /**
     * 查询订单
     * @return
     */
    @Override
    public List<Orders> findAll() {
        return this.orderMapper.findAll();
    }
}

编写OrdersController

@Controller
@RequestMapping("order")
public class OrderController {

    @Autowired
    private OrderService orderService;

    /**
     * 查询所有订单
     */
    @RequestMapping("findAll")
    public String findAll( Model model ,
                                 @RequestParam(value = "page",defaultValue = "1") Integer page,
                                 @RequestParam(value = "size",defaultValue = "5") Integer size){

        PageHelper.startPage(page,size);
        List<Orders> orders = this.orderService.findAll();

        PageInfo pageInfo = new PageInfo(orders);

        model.addAttribute("pageInfo",pageInfo);
        return "order-list";
    }
}

编写OrdersMapper.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.yanqi.ssm.mapper.OrderMapper">
    
    <!--查询订单,查询订单对应的产品-->
    <resultMap id="orders" type="Orders" autoMapping="true">
        <id column="id" property="id" />
        <association property="product" javaType="Product" autoMapping="true">
            <id property="id" column="id"/>
        </association>
    </resultMap>
    <select id="findAll" resultMap="orders">
      	SELECT * FROM orders o , product p WHERE o.productId = p.id
    </select>
    
</mapper>

测试

在这里插入图片描述

订单详情

查询订单详情流程

查看订单详情,需要查看 产品 会员 旅客

在这里插入图片描述

-- sql 分析
	SELECT
		o.orderNum as "订单号",
		p.productName as "路线",
		m.nickName as "下单人",
		t.name as "游客"
	FROM
		orders o
		LEFT JOIN product p ON o.productId = p.id
		LEFT JOIN member m ON o.memberId = m.id
		LEFT JOIN order_traveller ot ON ot.orderId = o.id
		LEFT JOIN traveller t ON ot.travellerId = t.id
	WHERE
	o.id = 5

在这里插入图片描述

Member实体类

package cn.yanqi.ssm.pojo;

import lombok.Data;


@Data
public class Member {
    private String id;
    private String mname;
    private String nickname;
    private String mphoneNum;
    private String email;
}

Traveller实体类

package cn.yanqi.ssm.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
public class Traveller {
    private String id;
    private String name;
    private String sex;
    private String phoneNum;
    private Integer credentialsType;
    private String credentialsTypeStr;
    private String credentialsNum;
    private Integer travellerType;
    private String travellerTypeStr;

    public String getCredentialsTypeStr() {
        if(credentialsType != null){
            // 证件类型 0:身份证 1:护照 2:军官证
            if (credentialsType == 0) {
                credentialsTypeStr = "身份证";
            } else if (credentialsType == 1) {
                credentialsTypeStr = "护照";
            } else if (credentialsType == 2) {
                credentialsTypeStr = "军官证";
            }
        }
        return credentialsTypeStr;
    }

    public String getTravellerTypeStr() {
        if( travellerType != null){
            // 证件类型 0:成人 1:儿童
            if (travellerType == 0) {
                travellerTypeStr = "成人";
            } else if (travellerType == 1) {
                travellerTypeStr = "儿童";
            }

        }
        return travellerTypeStr;
    }
}

编写OrderMapper


public interface OrderMapper {
    /**
     * 分页查询所有订单
     */
    List<Orders> findAll();

    /**
     * 查询订单详情
     * @param orderId
     * @return
     */
    Orders findById(Integer orderId);
}

编写OrderService

public interface OrderService {

    /**
     * 分页查询所有订单
     * @param page
     * @param size
     * @return
     */
    List<Orders> findAll(Integer page, Integer size);


    /**
     * 查询订单详情
     * @param orderId
     * @return
     */
    Orders findById(Integer orderId);
}
@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    private OrderMapper orderMapper;


    /**
     * 查询订单详情
     * @param id
     * @return
     */
    @Override
    public Orders findById(Integer id) {
        return this.orderMapper.findById(id);
    }

}

编写OrdersController

@Controller
@RequestMapping("order")
public class OrderController {

    @Autowired
    private OrderService orderService;

    /**
     * 查询订单详情
     * @param id
     * @return
     */
    @RequestMapping("findById")
    public String findById(Model model ,@RequestParam("id") Integer id){
        Orders orders = this.orderService.findById(id);
        model.addAttribute("order",orders);
        return "order-show";
    }

}

编写OrdersMapper.xml

<!--查询订单详情-->
    <resultMap id="findByIdresultMap" type="Orders" autoMapping="true">
        <!--映射本身orders-->
        <id property="id" column="oid"/>

        <!--映射Product-->
        <association property="product" javaType="Product" autoMapping="true">
            <id property="id" column="pid"/>
        </association>

        <!--映射member-->
        <association property="member" javaType="Member" autoMapping="true">
            <id property="id" column="mid"/>
        </association>

        <!--映射traveller-->
        <collection property="travellers" javaType="List" ofType="Traveller" autoMapping="true">
            <id property="id" column="tid"/>
        </collection>

    </resultMap>
    <select id="findById" resultMap="findByIdresultMap">
        SELECT
            *,
            o.id as oid,
            p.id AS pid,
            m.id AS mid,
            t.id AS tid
        FROM
            orders o
            LEFT JOIN product p ON o.productId = p.id
            LEFT JOIN member m ON o.memberId = m.id
            LEFT JOIN order_traveller ot ON ot.orderId = o.id
            LEFT JOIN traveller t ON ot.travellerId = t.id
        WHERE
        	o.id = #{id}
    </select>

测试

在这里插入图片描述

新增订单-查询产品,会员,游客

添加订单,需要在订单中选择,产品(路线),会员, 游客

在这里插入图片描述

编写OrdersController

@Controller
@RequestMapping("order")
public class OrderController {

    @Autowired
    private ProductService productService;

    @Autowired
    private MemberService memberService;
    
    @Autowired
    private TravellerService travellerService;


    /**
     * 新增订单,同时查询出有哪些 product,有哪些 member ,添加的游客是哪些人
     * @return
     */
    @GetMapping("add")
    public String add(Model model){

        //下拉查询 product, 在产品中已写过方法
        List<Product> productList = this.productService.findAll();

        //下拉查询 member
        List<Member> memberList = this.memberService.findAll();

        //下拉查询 Traveller
        List<Traveller> travellerList = this.travellerService.findAll();

        //显示到order-add.html
        model.addAttribute("productList",productList);
        model.addAttribute("memberList",memberList);
        model.addAttribute("travellerList",travellerList);

        return "order-add";

    }
}    

编写Service

@Service
public class MemberServiceImpl implements MemberService {

    @Autowired
    private MemberMapper memberMapper;

    /**
     * 查询所有
     * @return
     */
    @Override
    public List<Member> findAll() {
        return this.memberMapper.findAll();
    }
}
@Service
public class TravellerServiceImpl implements TravellerService {

    @Autowired
    private TravellerMapper travellerMapper;

    /**
     * 查询游客
     * @return
     */
    @Override
    public List<Traveller> findAll() {
        return travellerMapper.findAll();
    }
}

编写Mapper

@Repository
public interface TravellerMapper {
    /**
     * 查询游客
     * @return
     */
    List<Traveller> findAll();
}
public interface MemberMapper {

    /**
     * 查询所有会员
     * @return
     */
    List<Member> findAll();
}

编写Mapper.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.yanqi.mapper.TravellerMapper">

	<select id="findAll" resultType="Traveller">
		select * from traveller
	</select>

</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.yanqi.mapper.MemberMapper">

	<select id="findAll" resultType="Member">
		select * from member
	</select>

</mapper>

新增订单

编写OrderController

/**
 * @Author: yanqi
 * @Date: 9:20
 * @Desc: 订单模块
 */
@Controller
@RequestMapping("order")
public class OrderController {

    @Autowired
    private MemberService memberService;

    @Autowired
    private ProductService productService;

    @Autowired
    private OrderService orderService;

    @Autowired
    private TravellerService travellerService;

    @Autowired
    private OrderAndTravellerService orderAndTravellerService;


    /**
     * 新增订单
     * @param orders
     * @return
     */
    @PostMapping("save")
    public String save(Orders orders){

        //添加订单信息
        this.orderService.save(orders);

        //根据添加订单orderNum 查询订单id  select id from orders where orderNum = #{orderNum}
        Integer OrderId = orderService.findByOrderNum(orders.getOrderNum());

        //中间表order_traveller 添加   参数1:订单id   参数2:旅客ids
        this.orderAndTravellerService.add(OrderId,orders.getTravellerId());

        return "redirect:findAll";
    }

}

编写Service


@Service
public class OrderServiceImpl  implements OrderService {

    @Autowired
    public OrderMapper orderMapper;
	/**
     * 新增订单
     * @param orders
     */
    @Override
    public void save(Orders orders) {
        this.orderMapper.save(orders);
    }
}

@Service
public class OrderServiceImpl  implements OrderService {

    @Autowired
    public OrderMapper orderMapper;
    
	/**
     * 根据添加orderNum查询订单id
     * @param orderNum
     * @return
     */
    @Override
    public Integer findByOrderNum(String orderNum) {
        return this.orderMapper.findByOrderNum(orderNum);
    }
}    
/**
 * @Author: yanqi
 * @Date: 14:41
 * @Desc: 中间表order_traveller 添加   参数1:订单id   参数2:旅客ids
 */
@Service
public class OrderAndTravellerServiceImpl implements OrderAndTravellerService {

    @Autowired
    private OrderAndTravellerMapper orderAndTravellerMapper;

    //中间表order_traveller 添加   参数1:订单id   参数2:旅客ids
    @Override
    public void add(Integer orderId, List<Integer> travellerIds) {
        this.orderAndTravellerMapper.add(orderId,travellerIds);
    }
    
}

编写Mapper

@Repository
public interface OrderMapper {

   /**
     * 新增订单
     * @param orders
     */
    void save(Orders orders);
    
     /**
     * 根据添加orderNum查询订单id
     * @param orderNum
     * @return
     */
    Integer findByOrderNum(String orderNum);
}
@Repository
public interface OrderAndTravellerMapper {

	//中间表order_traveller 添加   参数1:订单id   参数2:旅客ids
    void add(@Param("orderId") Integer orderId,@Param("travellerId") List<Integer> travellerId );
}

编写Mapper.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.yanqi.mapper.OrderMapper">

	<!--根据添加orderNum查询订单id-->
	<select id="findByOrderNum" resultType="integer">
		select id from orders where orderNum = #{orderNum}
	</select>


	<!--新增订单-->
	<insert id="save">
		insert into orders(
		orderNum,
		orderTime,
		peopleCount,
		orderDesc,
		payType,
		orderStatus,
		productId,
		memberId)
		values(#{orderNum},
		#{orderTime},
		#{peopleCount},
		#{orderDesc},
		#{payType},
		#{orderStatus},
		#{productId},
		#{memberId})
	</insert>
</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.yanqi.mapper.OrderAndTravellerMapper">

	<insert id="add">
		INSERT INTO order_traveller (orderId, travellerId)
		VALUES
		<foreach collection="travellerId" item="travellerId" separator=",">
			(#{orderId}, #{travellerId})
		</foreach>
	</insert>


</mapper>

=“save”>
insert into orders(
orderNum,
orderTime,
peopleCount,
orderDesc,
payType,
orderStatus,
productId,
memberId)
values(#{orderNum},
#{orderTime},
#{peopleCount},
#{orderDesc},
#{payType},
#{orderStatus},
#{productId},
#{memberId})




```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.yanqi.mapper.OrderAndTravellerMapper">

	<insert id="add">
		INSERT INTO order_traveller (orderId, travellerId)
		VALUES
		<foreach collection="travellerId" item="travellerId" separator=",">
			(#{orderId}, #{travellerId})
		</foreach>
	</insert>


</mapper>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/789507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多线程面试题--线程安全

synchronized关键字的底层原理 基础版 当我们对代码就行反编译&#xff0c;会发现其实synchronized就是monitor Monitor 假如现在有一个线程过来了&#xff0c;要执行当前代码&#xff0c;会执行到synchronized (lock)&#xff0c;lock是一个对象锁。首先会让这个lock对象和m…

Clion开发stm32之微妙延迟(采用nop指令实现)

前言 需要借助逻辑分析仪动态调整参数此次测试的开发芯片为stm32f103vet6 延迟函数 声明 #define NOP_US_DELAY_MUL_CNT 5 /*nop 微妙延迟需要扩大的倍数(根据实际动态修改)*/ void bsp_us_delay_nop(uint32_t us);void bsp_ms_delay_nop(uint32_t ms);定义 void bsp_us_dela…

【深度学习】yolov5以及yolov8的微调后的模型精度对比

文章目录 前言1. 训练1.1 yolov5 的 yolov5m61.2 yolov5 的 yolov5l61.3 yolov8 的训练 结论&#xff1a; 前言 做了一个烟火识别&#xff0c;用了2W张图片&#xff0c;标注包括&#xff1a;fire&#xff0c;smoke 。在coco80类的模型上进行ft&#xff0c; 借此机会进行比较一…

koa2 从0使用mysql2做第一个接口

全局安装Koa命令行工具: npm install -g koa/cli 2. 创建新项目: koa new my-app 这将生成如下目录结构: my-app ├── app.js ├── package.json └── src └── index.js 3. 安装依赖: cd my-app npm install 4. 启动项目: npm start 5.安装mysql2 yarn add…

升级JDK17问题记录

1. 放开标准库的模块访问限制 Jdk9模块后, 有些类访问, 需要通过如下配置打开访问权限 --add-opensjava.base/jdk.internal.miscALL-UNNAMED --add-opensjava.base/java.langALL-UNNAMED --add-opensjava.base/java.utilALL-UNNAMED --add-opensjava.base/java.lang.refle…

加载数据集

批量梯度下降法&#xff08;Batch Gradient Descent&#xff0c;BGD&#xff09;&#xff1a;在更新参数时&#xff0c;BGD根据batch中的所有样本对参数进行更新。&#xff08;计算速度快&#xff09; 随机梯度下降法&#xff08;Stochastic Gradient Descent&#xff0c;SGD&…

实训笔记7.21

实训笔记7.21 7.21一、MapReduce编程代码的打包问题与大数据集群环境中运行问题1.1 MR程序在运行的时候&#xff0c;job提交作业的时候会自动识别我们的运行环境&#xff0c;如果我们是在windows本地运行的话&#xff0c;MR程序识别的环境未LocalRunner这么一个环境&#xff0c…

王道考研数据结构--4.2循环队列

目录 前言 1.循环队列的定义 2.循环队列的结构 3.循环队列的操作 3.1定义循环队列 3.2初始化 3.3入队 3.4出队 3.5遍历&#xff0c;求表长 3.6清空销毁 4.完整代码 前言 日期&#xff1a;2023.7.25 书籍&#xff1a;2024年数据结构考研复习指导&#xff08;王道考研…

MySQL 中一条 SQL 的查询与更新

MySQL 中一条 SQL 的查询与更新 1 SQL 的查询1.1 MySQL 的逻辑架构图1.2 连接器1.3 查询缓存1.4 分析器1.5 优化器1.6 执行器 2 SQL 的更新2.1 redo log&#xff08;重做日志&#xff09;2.2 binlog&#xff08;归档日志&#xff09;2.3 redo log 和 binlog 日志的差异2.4 示例…

【Java SE】类和对象

目录 【1】面向对象的初步认识 【1.1】什么是面向对象 【1.2】面向对象与面向过程 【2】类定义和使用 【2.1】简单认识类 【2.2】类的定义格式 【2.3】练习 【2.3.1】定义一个狗类 【2.3.2】定义一个学生类 【3】类的实例化 【3.1】什么是实例化 【3.2】类和对象的…

Acwing.282 石子合并(动态规划)

题目 设有N堆沙子排成一排&#xff0c;其编号为1&#xff0c;2&#xff0c;3&#xff0c;…&#xff0c;N。 每堆沙子有一定的质量&#xff0c;可以用一个整数来描述&#xff0c;现在要将这N堆沙子合并成为一堆。 每次只能合并相邻的两堆&#xff0c;合并的代价为这两堆沙子的…

应用层协议——http

文章目录 1. HTTP协议1.1 认识URL1.2 urlencode和urldecode1.3 HTTP协议格式1.3.1 HTTP请求1.3.2 HTTP响应1.3.3 外网测试1.3.4 添加html文件1.3.5 HTTP常见Header1.3.6 GET和POST 1.4 HTTP的状态码1.4.1 301和3021.4.2 代码实现 1.5 Cookie1.5.1 代码验证1.5.2 Cookiesession …

【Nodejs】Puppeteer\爬虫实践

puppeteer 文档:puppeteer.js中文文档|puppeteerjs中文网|puppeteer爬虫教程 Puppeteer本身依赖6.4以上的Node&#xff0c;但是为了异步超级好用的async/await&#xff0c;推荐使用7.6版本以上的Node。另外headless Chrome本身对服务器依赖的库的版本要求比较高&#xff0c;c…

海外网红营销合作指南:详解海外合同与协议要点

随着互联网的发展和社交媒体的普及&#xff0c;海外网红营销成为了品牌推广和营销的重要力量。然而&#xff0c;这种跨国合作需要谨慎考虑&#xff0c;签订合适的合同与协议显得尤为重要&#xff0c;以确保各方权益得到保障并促进合作的顺利进行。本文Nox聚星将详细介绍与海外网…

Stable Diffusion - 扩展 Segment Anything 和 GroundingDINO 实例分割算法 插件的配置与使用

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131918652 Paper and GitHub&#xff1a; Segment Anything: SAM - Segment Anything GitHub: https://github.com/facebookresearch/s…

学习机器视觉要点:

图像采集&#xff1a;了解镜头、光源、相机选型&#xff0c;打光对图像质量的重要性。 图像处理&#xff1a;掌握压缩、增强、匹配、识别等图像处理技术&#xff0c;包括滤波、连通域、腐蚀膨胀等基本操作。 矩视智能低代码平台&#xff1a;使用该平台进行快速开发&#xff0…

mac电脑强大的解压缩软件BetterZip 5.3.4 for Mac中文版及betterzip怎么压缩

BetterZip 5.3.4 for Mac 是Mac系统平台上一款功能强大的文件解压缩软件&#xff0c;不必解压就能快速地检查压缩文档。它能执行文件之间的合并并提供密码。使用它&#xff0c;用户可以更快捷的向压缩文件中添加和删除文件。它支持包括zip、gz、bz、bz2、tar、tgz、tbz、rar、7…

华为数通HCIA-数通网络基础

基础概念 通信&#xff1a;两个实体之间进行信息交流 数据通信&#xff1a;网络设备之间进行的通信 计算机网络&#xff1a;实现网络设备之间进行数据通信的媒介 园区网络&#xff08;企业网络&#xff09;/私网/内网&#xff1a;用于实现园区内部互通&#xff0c;并且需要部…

Python实现人脸识别功能

Python实现人脸识别功能 闲来没事&#xff0c;记录一下前几天学习的人脸识别小项目。 要想实现人脸识别&#xff0c;我们首先要搞明白&#xff0c;人脸识别主要分为哪些步骤&#xff1f;为了提高人脸识别的准确性&#xff0c;我们首先要把图像或视频中的人脸检测出来&#xf…

Linux入门 系统编程三 嵌入式开发 使用gcc制作静态库动态库,及调用库头文件应用

一、静态库的制作与使用 生成静态的主要是有5个步骤 1、编写源代码 2、将要编译成库的源文件编译成.o文件 3、使用ar命令创建静态库 4、调用库 5、测试 静态库的命名规则&#xff1a;lib开头。.a结尾。lib和.a中间的称作库名。lib库名称作库文件名 1.1 先写两个测试程序&…