MySQL转义字符+存储过程的使用
MySQL中大于,大于等于,小于,小于等于的转义写法
一、左边就是原来的符号,右边就是在mybatis中代替的符号
二、如何通过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 < 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>
以上,举了两个示例,后续有新的需求,及时补充,在这里记录一下,拜拜~
MySQL转义字符+存储过程的使用的更多相关文章
- Mysql之存储过程与存储函数
1 存储过程 1.1 什么是存储过程 存储过程是一组为了完成某项特定功能的sql语句集,其实质上就是一段存储在数据库中的代码,他可以由声明式的sql语句(如CREATE,UPDATE,SELECT等语 ...
- MYSQL中存储过程的创建,调用及语法
MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库 ...
- MYSQL分页存储过程及事务处理
最近给客户做的一小系统是SQLSERVER的数据库,因为特殊原因要切换到MYSQL上去,切换数据库确实让人头疼的,SQLSERVER和MYSQL的存储过程还是有很大差别的,下面是我做切换时转换的MYS ...
- mysql之存储过程
一.存储过程 迄今为止,使用的大多数 SQL语句都是针对一个或多个表的单条语句.并非所有操作都这么简单,经常会有一个完整的操作需要多条语句才能完成.例如,考虑以下的情形. 1. ...
- MySQL的存储过程1
来源:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html MySQL的存储过程 2. 关于MySQL的存储过程存储过程是数据库存储的一个重要的功能 ...
- mysql 转义字符和php addslashes
遇到一个很奇怪的问题,json数据中含有中文: "mail":{"title":"\u6218\u529b\u8fbe\u4eba\u6d3b\u52 ...
- Mysql的存储过程(以Mysql为例进行讲解)
我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储 在数据库中,用户通过指定存 ...
- mysql之——存储过程 + 游标 + 事务
下面是自己曾经编写过的mysql数据库存储过程,留作存档,以后用到的时候拿来参考. 其中,涉及到了存储过程.游标(双层循环).事务. [说明]:代码中的注释只针对当时业务而言,无须理会. 代码如下: ...
- MYSQL:基础—存储过程
MYSQL:基础-存储过程 快速入门 理解: 迄今为止,我们学过的大多数SQL语句都是针对一个或多个表的单条语句.但是并不是所有的操作都是可以用一条语句来完成的,经常有一些操作是需要多条语句配合才能完 ...
- MySQL笔记 存储过程 游标 触发器
第二十三章 使用存储过程 MySQL5 中添加了存储过程的支持. 大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成 存储过程简单来说,就 ...
随机推荐
- Docker MySql 查看版本的三种方法
目录 Docker MySql 查看版本的三种方法 1.mysql -V命令查看版本 2.status命令查看版本 3.version命令查看版本 Docker MySql 查看版本的三种方法 1.m ...
- 研发效能之技术治理&技术治理架构师
最近很多公司专门设置了一个职位叫「技术治理架构师」,主要负责公司技术治理相关事宜.这是个非常有意思的职位.技术治理的活,之前我们也是做的,只是没有提的这么明确,一般都是研发效能团队.PMO.架构团队. ...
- nsis新插件:Aero.dll
可以使安装界面在 win7 Aero特效下非客户区透明并美化BrandingText定义的字串 下载:http://nsis.sourceforge.net/Aero_plug-in nsis交流群: ...
- 文盘Rust -- struct 中的生命周期
最近在用rust 写一个redis的数据校验工具.redis-rs中具备 redis::ConnectionLike trait,借助它可以较好的来抽象校验过程.在开发中,不免要定义struct 中的 ...
- 最长公共前缀(Java)
编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入:strs = ["flower","flo ...
- Nebula Graph介绍和SpringBoot环境连接和查询
Nebula Graph介绍和SpringBoot环境连接和查询 转载请注明来源 https://www.cnblogs.com/milton/p/16784098.html 说明 当前Nebula ...
- 『现学现忘』Git后悔药 — 34、git commit --amend 命令
目录 1.git commit --amend 命令说明 2.使用场景 (1)场景一 (2)场景二 3.git commit --amend 命令原理 这是我们Git中的第三种后悔药. 1.git c ...
- c语言KMP匹配算法与字符串替换算法
一.字符串匹配算法 (1)传统匹配算法BF int Index_BF(char* S, char* T){ int i=1,j=1; while(i<=strlen(S) && ...
- F118校准(二)-- 操作步骤(使用任意品牌PG点屏,并使用PX01 PG校准F118)
1. 准备工作 硬件连接: CA310通过USB线材连接PC PX01通过USB线材连接PC F118通过灰排线连接PX01左上角的GPIO扩展口(如下图所示) 启动LcdTools软件,点击&quo ...
- 42.JSON Web Token认证
JSON Web Token认证介绍 简称JWT认证,一般用于用户认证 JWT是一种相当新的标准,可用于基于token的身份验证 与内置的TokenAuthentication方案不同,JWT不需要使 ...