H2Database自定义函数
来源:互联网 发布:网络教育毕业证有用吗 编辑:程序博客网 时间:2024/06/14 09:09
t# H2Database自定义函数
前言
h2数据库其实更多的用在开发中,因为可以内嵌,所以一般作为内存数据库,随用随创,随时删除。其中spring data jpa就使用到了这个数据库,再加上数据库版本控制工具flyway或者liquibase,就可以方便的在各个数据库中进行迁移和升级,我现在一般的工作的方式是开发在h2数据库中,生产环境是mysql的。但是h2在迁移的过程中sql其实很多是通用的。但是不可避免的会出现某些数据库有的函数,h2中没有的情况。所以今天就介绍一下在内嵌的h2数据库中使用自定义函数
条件
首先我这边使用的是spring data jpa和liquibase,项目只需要加个h2database的依赖就可以使用h2点内嵌数据库.简单配置如下
- gradle中依赖配置
dependencies { compile('org.springframework.boot:spring-boot-starter-data-jpa') runtime('org.liquibase:liquibase-core') runtime('com.h2database:h2') runtime('mysql:mysql-connector-java') testCompile("junit:junit")}
- Spring boot 配置
liquibase.change-log=classpath:/db/develop/db.changelog-master.yaml#liquibase.url=#liquibase.password=#liquibase.user=#liquibase.rollback-file=# JPAspring.jpa.properties.hibernate.hbm2ddl.import_files = classpath:db/develop/import.sqlspring.jpa.show-sql=truespring.jpa.hibernate.ddl-auto=create-drop# H2 Web Console (H2ConsoleProperties)spring.h2.console.enabled=truespring.h2.console.path=/h2-console
这里解释下liquibase的配置是加载升级的yaml文件,具体的文件格式可以去参考liquibase官网这里我简单的展示一下db.changelog-master.yaml
databaseChangeLog: - include: id: 1 author: dzg file: classpath:db/develop/import.sql
jpa的配置ddl-auto在生产环境中配置成validation,hibernate.hbm2ddl.import_files是不需要配置,只是为了初始化开发的时候内存数据库.
h2的配置就两个,第二个是可以在浏览器访问h2的url链接,默认用户sa,密码无,默认jdbc链接jdbc:h2:mem:testdb
自定义函数
我这是参考h2官网的自定义函数,自己能看懂最好,官网介绍的有两种一种是引入java类的形式,方法必须是公开静态的,官网有例子,另外一种就是直接源码的形式可以去看官网的第二个例子。
我这里使用的是第一种方式。由于需要临时编译,所以java库中需要tools.jar包,我这是开发环境,肯定是有的。
首先我建立了自己的函数如下
package org.h2.databse.function;/** * @author dzg * @since 2017/4/25. */public class Function { public static long GetNumericIP(String standardIP) { if (standardIP != null && standardIP.length() >= 4) { String[] ipStr = standardIP.split("\\."); if (ipStr.length == 4) { return (Long.valueOf(ipStr[0]) << 24) + (Long.valueOf(ipStr[1]) << 16) + (Long.valueOf(ipStr[2]) << 8) + (Long.valueOf(ipStr[3])); } } return 0; } public static String GetStandardIP(long numericIP) { String w = String.valueOf(numericIP >> 24); String x = String.valueOf((numericIP >> 16) % 256); String y = String.valueOf((numericIP >> 8) % 256); String z = String.valueOf(numericIP % 256); return w + "." + x + "." + y + "." + z; }}
然后我在我的import.sql中加了一句sql如下
CREATE ALIAS INET_ATON FOR "org.h2.databse.function.Function.GetNumericIP";
之后就可以正常的使用INET_ATON这个函数了,也不会出现问题
更多博客请移步我的私人博客
- H2Database自定义函数
- h2database
- h2database轻量级数据库
- h2database轻量级数据库
- h2database源码浅析:集群
- groovy : h2database 起步
- H2database源码编译及运行
- h2database源码浅析:SQL语句的执行
- h2database源码浅析:MVTable与MVIndex
- h2database源码浅析:TransactionMap、MVMap、MVStore
- h2database源码浅析:事务、两阶段提交
- h2database源码浅析:锁与MVCC
- H2Database之h2-xxx.jar分析
- 自定义函数
- 自定义函数
- 自定义函数
- 自定义函数
- 自定义函数
- 数据结构(二)
- 20170424模拟赛
- python中的tuples
- Java 爬虫工具Jsoup解析
- 服务器上启动多个oracle实例
- H2Database自定义函数
- getAttribute和getParameter的区别
- PostgreSQL常用数据类型
- 捕鱼达人(炮筒跟着鼠标旋转,委托事件的运用)
- python中的Functions
- Eclipse 无法打断点问题-遇到带斜杠的断点图标
- 笔记 intent隐式启动的两个注意事项
- ubuntu创建快捷方式
- 浅谈JavaScript类数组对象转换为数组对象