首页 > 数据库 >MySQL转义字符+存储过程的使用

MySQL转义字符+存储过程的使用

时间:2022-11-16 14:46:51浏览次数:42  
标签:存储 List 订单 转义字符 params MySQL 数据 id homePageDao

MySQL中大于,大于等于,小于,小于等于的转义写法

一、左边就是原来的符号,右边就是在mybatis中代替的符号

image

二、如何通过mysql的存储过程创建虚拟表(临时表),并插入1000条数据

这些表通常是用来做数据统计时用到的:比如:查询指定时间段内的每天的数据的总和,

指定时间包括:开始时间:2022-1-1、结束时间:2022-1-30

2022-1-1~2022-1-30,这个时间段内,要求获取每天的数据,但是数据库可能某天是没有数据的,这时,就需要一张有连续id/其他的字段的一张临时表

创建表很简单,插入1000条数据(id连续)具体方式如下(使用存储过程插入数据):

1.创建存储过程p01

点击查看代码
CREATE PROCEDURE p01 ()
BEGIN
declare i int;
set i=1;

while i<=1000 do

INSERT INTO help(id) VALUES (i);

set i=i+1;
end WHILE;

END;

2.呼叫存储过程p01

CALL p01;

3.移除存储过程p01

DROP PROCEDURE p01;

以上三步就可以把1000条数据(id连续)插入数据库了

三、mysql查询指定时间段内的每天的数据,查询语句示例如下:

1.controller层代码

点击查看代码
 private HomePageService homePageService;

    @Autowired
    public void setHomePageService(HomePageService homePageService) {
        this.homePageService = homePageService;
    }

    @GetMapping("/order_home_page")
    @ApiOperation("【订单数据统计】")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "startDate", value = "开始日期", paramType = "query", dataType="Date",defaultValue = "2022-1-1"),
            @ApiImplicitParam(name = "overDate", value = "结束日期", paramType = "query", dataType="Date",defaultValue = "2022-1-30")
    })
    public Result<OrderHomePageVO> orderHomePage(@ApiIgnore @RequestParam Map<String, Object> params){
        OrderHomePageVO vo = homePageService.orderHomePage(params);
        return new Result<OrderHomePageVO>().ok(vo);
    }

2.service层代码

点击查看代码
/**
     * 订单数据统计
     * @param params
     * @return
     */
    OrderHomePageVO orderHomePage(Map<String, Object> params);

3.serviceImpl实现类代码

点击查看代码
private HomePageDao homePageDao;

    @Autowired
    public void setHomePageDao(HomePageDao homePageDao) {
        this.homePageDao = homePageDao;
    }


    @Override
    public OrderHomePageVO orderHomePage(Map<String, Object> params) {
        OrderHomePageVO orderHomePageVO = new OrderHomePageVO();
        //1.查询指定时间段内的订单信息
        HomePageVo1 homePageVo1 = new HomePageVo1();
        Integer orderTotal=homePageDao.getOrderTotal(params);
        List<Map<String,Object>> map=homePageDao.getEveryMap(params);
        homePageVo1.setOrderTotal(orderTotal);
        homePageVo1.setMap(map);
        orderHomePageVO.setHomePageVo1(homePageVo1);
        log.info("【订单统计】-1.查询指定时间段内的订单信息"+homePageVo1);
        //2.各宾馆的订单数据
        List<Map<String,Object>> hotelMap=homePageDao.getHotelMap(params);
        orderHomePageVO.setHotelMap(hotelMap);
        log.info("【订单统计】-2.各宾馆的订单数据"+hotelMap);
        //3.各服务类型订单数据
        List<Map<String,Object>> serviceTypeMap=homePageDao.getServiceTypeMap(params);
        orderHomePageVO.setServiceTypeMap(serviceTypeMap);
        log.info("【订单统计】-3.各服务类型订单数据"+serviceTypeMap);
        //4.各房间类型的订单数据
        List<Map<String,Object>> roomTypeMap=homePageDao.getRoomTypeMap(params);
        orderHomePageVO.setRoomTypeMap(roomTypeMap);
        log.info("【订单统计】-4.各房间类型的订单数据"+roomTypeMap);
        //5.各服务星级的订单数据
        List<WaiterGradeOrderVO> waiterGradeOrderVOList=homePageDao.getWaiterGradeOrderVO();
        if (waiterGradeOrderVOList!=null){
            for (WaiterGradeOrderVO waiterGradeOrderVO:waiterGradeOrderVOList) {
                if (waiterGradeOrderVO.getStarName()!=null){
                    List<Long> ids=homePageDao.getIds(waiterGradeOrderVO.getStarName());
                    if (ids!=null){
                        Integer allTotal=0;
                        for (Long waiterGradeId:ids) {
                            List<Long> waiterUserIds=homePageDao.getWaiterUserIds(waiterGradeId);
                            if (waiterUserIds.isEmpty()){
                                waiterGradeOrderVO.setTotal(0);
                            }else {
                                    Integer waiterTotal =  homePageDao.getWaiterOrderTotal(waiterUserIds,params);
                                allTotal=waiterTotal+allTotal;
                            }
                        }
                        waiterGradeOrderVO.setTotal(allTotal);
                    }
                }
            }
            orderHomePageVO.setWaiterGradeOrderVOList(waiterGradeOrderVOList);
            log.info("【订单统计】-5.各服务星级的订单数据"+waiterGradeOrderVOList);
        }
        return orderHomePageVO;
    }

4.dao+XML代码

4.1某时间段内每日的订单统计信息

其中的help表,就是上面提到的临时表(具有连续id的一张表)
点击查看dao代码
/**
     * 某时间段内每日的订单统计信息
     * @param params
     * @return
     */
    List<Map<String, Object>> getEveryMap(Map<String, Object> params);
点击查看dao.xml代码
<select id="getEveryMap" resultType="java.util.Map">
        select t1.day, ifnull(u1.total, 0) as num  from
        (
        select date_format(date_sub(#{overDate},interval t.id day),'%Y-%m-%d') as day
        from help t,
        (
        select TIMESTAMPDIFF(day,#{startDate}, #{overDate})+1 as subday
        ) as subdayt
        where t.id &lt; subdayt.subday
        ) as t1  left join
        (
        select date_format(u.create_date, '%Y-%m-%d') as r_t , count(id) as total from user_order u WHERE u.status=1   group by r_t
        ) as u1 on u1.r_t = t1.day
        ORDER BY t1.day asc
    </select>

4.2各宾馆的订单数据

点击查看dao代码
 /**
     * 各宾馆的订单数据
     * @param params
     * @return
     */
    List<Map<String, Object>> getHotelMap(Map<String, Object> params);
点击查看dao.xml代码
<select id="getHotelMap" resultType="java.util.Map">
        SELECT
            A.hotel_name hotelName,
            IFNULL((SELECT COUNT(id) FROM user_order WHERE status=1 AND hotel_id=A.id AND create_date between #{startDate} AND #{overDate}),0) total
        FROM
            hotel A
        WHERE
            A.status = 1
        GROUP BY
            A.hotel_name
    </select>

以上,举了两个示例,后续有新的需求,及时补充,在这里记录一下,拜拜~

标签:存储,List,订单,转义字符,params,MySQL,数据,id,homePageDao
From: https://www.cnblogs.com/xiaoguo-java/p/16895842.html

相关文章

  • mysql的存储引擎选择
    (1)InnoDB:是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、......
  • SQLServer添加字段,或者添加存储过程,显示列明无效
    在SQLServer中,当设计(修改)表结构之后,再用SQL语句时,列名会显示无效,但执行可以通过原因是SQLServer的intellisense(智能感知功能)需要重新整理一下,用快捷键Ctrl+Shift+R即可......
  • mysql笔记-2022-11-16
    1、Mysql安装,参照学习视频一步步展开即可。   https://www.bilibili.com/video/BV1NJ411J79W?p=6&spm_id_from=pageDriver&vd_source=83cfcaf83fbcf6f545d917d051b89......
  • InnoDB存储引擎,底层主键索引是聚集索引,那他的结构是什么样的?
    InnoDB存储引擎类型的表,底层是怎么存储数据的?   InnoDB存储引擎类型的表对应的文件,只有两个。Frm后缀文件,不用多说,是用来存放表结构的文件。InnoDB存储引擎类型的......
  • Python 操作MySQL
    目录pymysql的使用起手式--Python连接MySQL的几种方式:1.方式一:config+db+cur.execute(变量替换)2.方式二:conn+execute(sql)3.方式三pandas+config+db+read_sql4.方式......
  • Sqlserver 游标的实例_存储过程_带描述
    欢迎加入技术交流QQ群80669150(附加信息:珠海-"Lzw )一起学习!CREATEPROCPROC_SaveGgInitOrder@Gg_idint,@Init_fir_secintAS--使用游标更新orderid--firstD......
  • mysql忘记密码、登陆报错和启动报错问题
    1.mysql登录密码忘记,其实解决办法很简单,只需要在mysql的主配置文件my.cnf里添加一行“跳过授权表”的参数选择即可!在my.cnf中添加下面一行:[root@mysql_server~]#vim/e......
  • 【MYSQL例题】
    1、【出处:牛客网】题目:运营想要了解每个学校答过题的用户平均答题数量情况,请取出数据用户信息表user_profile:其中device_id指终端编号(认为每个用户有唯一的一个终端),gende......
  • mysql巧妙化解递归查询树形数据 | 纯sql
    前言开发中树形结构应该是很常见的一种数据结构了。而在数据库方面往往也都伴随相应的树形设计。在​​mysql​​中通过​​parent_id​​来绑定其上游,从而达到树形结构......
  • Mysql设置字符集
    记录设置数据库字符集。1、当向数据库插入表,或者在表中插入数据时,出现ERROR1366(HY000):Incorrectstringvalue:‘\xBD\xF0\xD3\xB9’forcolumn‘name......