利用H2的自定义函数更好的支持测试
在写DAO层的单元测试时,用mock的写法意义不大,因为DAO层的测试更多的关注是Java对象的传递和生成SQL的正确性,所以需要链接真实的数据库。
但是对于单元测试,真实的数据库是很重的,还要依赖于数据库本身的初始化和数据情况。H2作为一个基于Java开发的嵌入式数据库,支持在内存运行,也支持文件模式,非常适合用在单元测试。因为Spring Boot等框架对于这一块的支持很全面了,特别是Spring Boot默认的JDBC测试如果没有配置,会自动启动一个H2的内存数据库。
H2虽然支持很多模式,可以尽可能的模拟不同的数据库,但是还是有一些支持是不完整的,一些数据库特有的方法H2是不支持的,比如MySQL的UNIX_TIMESTAMP。特别是业务上基本都有创建时间和更新时间这两列,unix_timestamp函数大量使用。
这里可以使用H2的一个特性–用户自定义函数,支持两种使用方式
- Java方法预编译
 - Java源代码直接使用
 
这里来看看如何让H2支持unix_timestamp方法:
首先新建一个新Java类
Java
| 
 1 
2 
3 
4 
5 
 | 
 public class H2Extended { 
    public static int unix_timestamp() { 
        return (int)(System.currentTimeMillis() / 1000); 
    } 
} 
 | 
然后使用SQL创建一个别名,并将别名链接到我们的Java类的对应方法中
MySQL
| 
 1 
 | 
 CREATE ALIAS UNIX_TIMESTAMP FOR "com.sankuai.meituan.banma.thrift.csc.tool.H2Extended.unix_timestamp"; 
 | 
然后在初始化Datasource的时候执行该SQL语句就行了
参考
http://www.h2database.com/html/features.html#user_defined_functions
https://hyrepo.com/tech/h2-unit-test/
利用H2的自定义函数更好的支持测试的更多相关文章
- excel自定义函数添加和使用方法
		
第一,excel自定义函数简介 Excel自带很多函数供使用,但有些问题用内置函数解决起来很复杂,甚至是无能为力,这时就可以利用VBA开发自定义函数. 第二,excel如何添加自定义函数 excel自 ...
 - 巧妙利用JS中的自定义函数——化繁为简,提高效率
		
利用自定义函数编写年月日时间表: (复杂写法)如下: <body> <select id="year" size="1&q ...
 - 利用jQuery扩展接口为jQuery框架定义了两个自定义函数,然后调用这两个函数
		
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
 - 浅谈Excel开发:六 Excel 异步自定义函数
		
上文介绍了Excel中的自定义函数(UDF ),它极大地扩展了Excel插件的功能,使得我们可以将业务逻辑以Excel函数的形式表示,并可以根据这些细粒度的自定义函数,构建各种复杂的分析报表. 普通的 ...
 - Sqlserver自定义函数Function
		
一.FUNCTION: 在sqlserver2008中有3中自定义函数:标量函数/内联表值函数/多语句表值函数,首先总结下他们语法的异同点: 同点:1.创建定义是一样的: ...
 - 17.python自定义函数
		
什么是函数,函数说白了就是将一系列代码封装起来,实现代码的重用. 什么是代码重用? 假设我有这样的需求: 但是我还是觉得太麻烦了,每次想吃饭的时候都要重复这样的步骤.此时,我希望有这样的机器:
 - python学习之--自定义函数:
		
Python之--自定义函数: 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 以下自定义 ...
 - 利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载
		
简述 可能大家都知道,php中有一个函数叫debug_backtrace,它可以回溯跟踪函数的调用信息,可以说是一个调试利器. 好,来复习一下 01 one(); 02 03 function one ...
 - (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载    【反射】
		
原文地址:http://www.cnblogs.com/melonblog/archive/2013/05/09/3062303.html 原文作者:豆浆油条 - melon 本文示例代码测试环境是W ...
 - LR11中自定义函数web_custom_request请求
		
Action() { char * ip,temp; int state; double time_elapsed, duration, waste; merc_timer_handle_t time ...
 
随机推荐
- 活动预告 | 中国数据库联盟(ACDU)中国行定档深圳,一起揭秘数据库前沿技术
			
在当今数字化时代,数据库是各行各业中最核心的信息管理系统之一.随着技术的飞速发展,数据库领域也不断涌现出新的前沿技术和创新应用.数据库运维和开发人员需要紧跟前沿技术,才能保持竞争力,并实现更高效.更智 ...
 - iOS通知使用小结
			
最近在项目开发中遇到了一个问题,首页底部菜单和底部子菜单的互动.需求是这样的,编辑状态下点击红色删除按钮,首页底部菜单移除该项,子菜单中对应项选中状态设置为未选中,典型的一对多方式.刚开始的方案是想通 ...
 - 1. C#面试题 - Webservice和WebApi的区别
			
1. Webservice : 基于SOAP协议的,数据格式时XML,只支持http协议,不是开源的,只能部署在IIS上 2. Webapi 开源的,.net 平台
 - MySQL 通过 Next-Key Locking 技术(行锁+间隙锁)避免幻读问题
			
在MySQL中,InnoDB引擎通过Next-Key Locking技术来解决幻读问题.幻读是一种事务并发问题,通常出现在Repeatable Read隔离级别下的范围查询操作中.幻读的现象是,事务在 ...
 - SpringMvc请求注解@ResponseBody
			
1.概念 注解 @ResponseBody,使用在控制层(controller)的方法上. 2.作用 作用:将方法的返回值,以特定的格式写入到response的body区域,进而将数据返回给客户端. ...
 - 谈一谈 Netty 的内存管理 —— 且看 Netty 如何实现 Java 版的 Jemalloc
			
本文基于 Netty 4.1.112.Final 版本进行讨论 在之前的Netty 系列中,笔者是以 4.1.56.Final 版本为基础和大家讨论的,那么从本文开始,笔者将用最新版本 4.1.112 ...
 - [Flink/FlinkCDC] 实践总结:Flink 1.12.6 升级 Flink 1.15.4
			
Flink DataStream/API 依赖模块的变化 版本变化 flink.version : 1.12.6 => 1.15.4 flink.connector.version : 1.12 ...
 - 如何使用Ida Pro和Core Dump文件定位崩溃位置(Linux下无调试符号的进程专享)
			
我们在嵌入式Linux开发过程中经常会遇到一个问题,就是程序崩溃后不知道具体位置.因为我们发布到生产环境的一般是没有调试符号的(使用strip或编译时加-s参数,CMake生成的编译指令中的-O3也会 ...
 - cmu15545-索引并发控制(Concurrent Indexes)
			
目录 Overview Lock和Latch辨析 设计目标 大致分类 Hash Table Latches Page Latches Slot Latches B+Tree Latches 并发问题 ...
 - C++之OpenCV入门到提高005:005 图像操作
			
一.介绍 今天是这个系列<C++之 Opencv 入门到提高>得第五篇文章.这篇文章也不难,介绍如何图像的基本操作,比如:读取一张图片的像素值,如何修改一张图片中的像素值,如何读取一张图片 ...