MyBatis-从查询昨天的数据说起
前段时间写了《RabbitMQ入门》系列
- RabbitMQ入门-初识RabbitMQ
- RabbitMQ入门-从HelloWorld开始
- RabbitMQ入门-高效的Work模式
- RabbitMQ入门-消息派发那些事儿
- RabbitMQ入门-消息订阅模式
- RabbitMQ入门-Routing直连模式
- RabbitMQ入门-Topic模式
主要讲了一些RabbitMQ的基本知识点,后面准备再起个Spring集成RabbitMQ系列,希望能够更加贴近我们的日常接触的生产环境。
今天这篇跟Mybatis以及sql语句有关,正好也是今天解决问题的实践总结。
流水统计
业务背景
做一个流水统计的功能,从流水明细表中,每天定时同步前一天的流水,按照两个以上的维度统计并存储到新的统计表中。
对于明细表中过时的数据需要清除以防止明细表的无限增长。
设计思路
因为项目使用的是Mybatis,所以需要在这个框架下实现想要的功能。抛开框架,问题比较简单,最核心的其实是sql语句。
但是坦白说,sql语句一直也就是简单的使用,尤其是现如今有以Hibernate等为代表ORM框架,我们很少需要手写那些sql语句,甚至在一些成熟的产品项目里,sql语句更是难得一见。
整个思路很简单,我需要定义一个定时器,这个可以使用Spring Quartz来配置,其中还涉及到Cron expression即定时器表达式。然后我们要在Mybatis的壳子里塞入我们需要的sql语句。最后待时间点一到就执行sql语句完成流水统计,就大功告成了。下面罗列些解决这个问题的点。
Mybatis
个人认为Mybatis是灵活的,但同时也是繁琐的。为了写上一个我们想要执行的sql语句,需要写一大堆的声明代码。
有的sql语句有输入参数比如where后的比较条件就涉及到参数,这时候在Mybatis就要提供输入参数的入口,我们可以用parameterType来定义你想要的输入参数。相应的,执行完sql语句有时候会有返回结果,比如select完后的结果,这时候我们可以通过resultMap来返回,必要的时候你需要定义一个resultMap,好比下面这样
MyBatis-从查询昨天的数据说起
这实际上是一种映射,将数据库字段的identity_card_id与Model中的identityCardId对应起来。
对于我们的问题来说,需要首先从明细表中查出所有符合条件的流水明细记录,然后将符合条件的记录统计并插入到统计表中。Mybatis提供了增删改查相应的声明标签<insert>、<delete>、<update>、<select>,需要执行的sql语句可以放在对应的标签中。
如何查询昨天的数据
在解决查询昨天的数据这个问题之前,我们首先得知道怎么获取今天的日期。
SYSDATE()
通过SYSDATE()我们可以获得当前时间,如果你经常用sql语句,应该还知道有一个now()函数,两个都是可以查到当前的时间,但是区别在于now()一旦执行后就不变了,而SYSDATE()每次执行都是当前的时间。
DATE_FORMAT
有了SYSDATE()我们确实可以拿到当前时间了,那么怎么才能得到我们想要的时间格式呢,众所周知,时间的表示法千千万,比如20170809,2017-08-09等等。
这时候我们需要使用DATE_FORMAT()得到我们想要的日期格式比如DATE_FORMAT(SYSDATE(), '%Y-%m-%d')执行完后,我们就得到了结果“2017-08-09”。有关DATE_FORMAT中的第二个参数可以选择的值如下


DATE_SUB
有了格式化的DATE_FORMAT函数,我们可以得到想要的日期格式,有了SYSDATE()也能够得到今天的具体时间了,那么如何得到昨天,明天的时间呢,如果这步可以实现,那么离我们统计昨天所有流水明细的任务就不远了。
这时候我们可以用DATE_SUB来解决,比如date_sub(SYSDATE(), interval 1 day)表示在当前时间的基础上往前提一天就是昨天。当然,我们也可以使用DATE_ADD把日期调到明天。
有了这些sql的函数,我们已经可以实现预期的功能了。最终的sql语句类似
MyBatis-从查询昨天的数据说起
有了这些知识点,对于上面提到的定期删除数据以及其他的数据整理工作基本上都能解决了,剩下的就是敲代码实现业务了。
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注JackieZheng的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。

MyBatis-从查询昨天的数据说起的更多相关文章
- mybatis框架-查询用户表中的记录数
之前已经搭建过mybatis框架了,现在我们要用mybatis框架真正的干点事情了. 这是这个简单web项目的整体架构. 我们使用mybatis框架查询用户表中的记录数: 这是用户类: package ...
- java之mybatis之查询及分页
1.mybatis中查询方式有3种 //查询单个值 @Test public void testFindOne()throws IOException{ SqlSession session = My ...
- Mybatis关联查询和数据库不一致问题分析与解决
Mybatis关联查询和数据库不一致问题分析与解决 本文的前提是,确定sql语句没有问题,确定在数据库中使用sql和项目中结果不一致. 在使用SpringMVC+Mybatis做多表关联时候,发现也不 ...
- mysql数据库管理工具sqlyog在首选项里可以设置默认查询分页条数和字体,改写关键字大小写
sqlyog设置一直习惯用sqlyog来管理mysql数据库,但有三个地方用得不是很爽:1.默认查询条数只有1000条经常需要勾选掉重新查询.2.自动替换关键字大小写,有时候字段名为关键字的搞成大写的 ...
- myBatis批量查询操作,xml中使用foreach案例
使用场景:有一个订单表,实体类为OrderBase.java,订单有个状态为status值可能为"1,2,3,4,5,6",现在需要查询状态为"2,3,4"的订 ...
- MyBatis关联查询 (association) 时遇到的某些问题/mybatis映射
先说下问题产生的背景: 最近在做一个用到MyBatis的项目,其中有个业务涉及到关联查询,我是将两个查询分开来写的,即嵌套查询,个人感觉这样更方便重用: 关联的查询使用到了动态sql,在执行查询时就出 ...
- MyBatis基础:MyBatis关联查询(4)
1. MyBatis关联查询简介 MyBatis中级联分为3中:association.collection及discriminator. ◊ association:一对一关联 ◊ collecti ...
- mysql查询语句,通过limit来限制查询的行数。
mysql查询语句,通过limit来限制查询的行数. 例如: select name from usertb where age > 20 limit 0, 1; //限制从第一条开始,显示1条 ...
- sql语句,查询昨天的数据
如果在程序中,有前台传来两个时间点:beginTime和endTime,在sql查询中的限制条件就是查询昨天的数据,那么可以这样写: 但是如果在这里要查询昨天的数据的话, 则不能简单地在开始时间的那里 ...
随机推荐
- js脚本中try与cache捕获异常处理
<script type="text/javascript"> function add_reason(elm){ try{ var pp=$('.pp').val() ...
- 使用python操作mysql数据库
这是我之前使用mysql时用到的一些库及开发的工具,这里记录下,也方便我查阅. python版本: 2.7.13 mysql版本: 5.5.36 几个python库 1.mysql-connector ...
- TSC打印机使用教程终极版
最近公司做一个资产采集的项目,之前做过此类项目,不过没有整理资料,借这次机会写一下,做个记录. 本教程使用的打印机型号:TSC TTP-244 Plus 官方文档 一.TSC打印机安装 1.机 ...
- scrollMenu,一款可滚动的菜单插件 兼容pc和移动端
这个菜单 有两种样式 , 也可以通过animate.css加不同的动画效果!滚动的方式也有两种 一种为通用的overflow,另外一种是better-scroll的滚动效果 在线链接地址 ht ...
- vijos1051题解
题目: 圣诞老人回到了北极圣诞区,已经快到12点了.也就是说极光表演要开始了.这里的极光不是极地特有的自然极光景象.而是圣诞老人主持的人造极光. 轰隆隆--烟花响起(来自中国的浏阳花炮之乡).接下来就 ...
- Chrome浏览器扩展开发系列之一:初识Google Chrome扩展
1. Google Chrome扩展简介 Google Chrome扩展是一种软件,以增强Chrome浏览器的功能. Google Chrome扩展使用HTML.JavaScript.CS ...
- java 线程 理解 解析
1 线程的概述 进程:正在运行的程序,负责了这个程序的内存分配,代表了内存中的执行区域. 线程:就是在一个进程中负者一个执行路径. 多线程:就是在一个进程中多个执行路径同时执行. 假象: 电脑上的程序 ...
- Java之初识
今天开始学习Java 1.什么是Java? Java是1995年由sun公司推出的一门极富创造力的面向对象编程语言,是由Java之父詹姆斯格斯林博士设计的. Java名字的由来:据说,java刚刚设计 ...
- CentOS7 下使用YUM安装 MySQL5.7
于2015年10月19日(美国时间),Oracle公司发布了开源数据库MySQL的最新版本5.7.到现在已有将近3年之久,经过这几年的改进,MySQL5.7性能最高可达前一个版本的3倍,现在官网的最新 ...
- HttpClient以json形式的参数调用http接口并对返回的json数据进行处理(可以带文件)
1.参数的url就是被调用的地址,map是你要传的参数.参数转成json我使用的是gson方式转换的. 主要使用的jar包有httpclient-4.5.3.jar.httpcore-4.4.6.ja ...