文档章节

H2数据库做单测数据库时踩到的坑

o
 osc_pn11u1x9
发布于 2018/08/06 12:03
字数 510
阅读 20
收藏 0

精选30+云产品,助力企业轻松上云!>>>

H2数据库用来做单测数据库,可以自定义初始化数据,不用担心数据库内容更改造成单测跑不过问题,不过H2数据库跟实际使用的Mysql还是有一定区别。

1. H2数据库不支持Mysql的批量更新功能,支持批量插入

--批量更新(H2不支持)
  <update id="increaseBatch"  parameterType="java.util.List">
        <foreach collection="list" item="item" index="index" open="" close="" separator=";">
            update product
            <set>
                quantity = quantity + #{item.updateQuantity}, modify_time = #{item.modifyTime}
            </set>
            where id = #{item.productId}
        </foreach>
    </update>

--批量插入(H2支持)
<insert id="insertItems" keyProperty="id" parameterType="java.util.List" useGeneratedKeys="true">
        <selectKey keyProperty="id" order="AFTER" resultType="long">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT INTO bill_item(
        bill_id,product_id,product_name,product_quantity,product_quantity_after,product_price,product_amount)
        VALUES
        <foreach close="" collection="list" index="index" item="item" open="" separator=",">
            (
            #{item.billId},#{item.productId},#{item.productName},#{item.productQuantity},
            #{item.productQuantityAfter},#{item.productPrice},#{item.productAmount})
        </foreach>
    </insert>

2. H2数据库不支持Mysql的replace into 语法

3. H2数据库初始化时不允许出现相同的UK

<jdbc:embedded-database id="dataSource" type="H2">
        <jdbc:script location="classpath:H2_TYPE.sql"/>
        <jdbc:script location="classpath:INIT_TABLE.sql"/>
        <jdbc:script location="classpath:INIT_DATA.sql"/>
    </jdbc:embedded-database>

 

INIT_TABLE.sql

-- 表A
CREATE TABLE `table_A` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `bill_no` varchar(45) DEFAULT NULL COMMENT '单号',
  `bill_type` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '单据类别',
  `created_time` datetime NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '创建时间',
  `modify_time` datetime NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_bill_type_bill_no` (`bill_type`,`bill_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

--表A
CREATE TABLE `table_B` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `bill_no` varchar(45) DEFAULT NULL COMMENT '单号',
  `bill_type` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '单据类别',
  `created_time` datetime NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '创建时间',
  `modify_time` datetime NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_bill_type_bill_no` (`bill_type`,`bill_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

运行结果:

Caused by: org.h2.jdbc.JdbcSQLException: Constraint "uk_bill_type_bill_no" already exists; 
SQL statement:CREATE TABLE `table_B` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `bill_no` varchar(45) DEFAULT NULL COMMENT '单号',
  `bill_type` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '单据类别',
  `created_time` datetime NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '创建时间',
  `modify_time` datetime NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_bill_type_bill_no` (`bill_type`,`bill_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
jmeter接口自动化和性能学习目录

目录黑色代表未完成的,绿色代表已完成的文章。目录的作用的为了引导和总结自己的学习,也是为了更好的分享给大家。 一、接口自动化 jmeter解决登录token获取 jmeter五种提取器 之 正则表达式...

osc_yyass0pm
2019/07/14
17
0
单元测试基础知识(三)

9.单测工具简介 JUnit Java用的最多的单测框架,使用非常简单,主流IDE基本都集成了JUnit,具体用法就不介绍了,可以花十分钟看看官方文档http://junit.org/junit4/ TestNg 是一款基于junit...

osc_pqzfxki9
2019/02/26
2
0
关于halo博客系统的使用踩坑——忘记登录密码

踩坑: halo系统可以直接通过运行jar -jar halo-0.0.3.jar跑起来,也可以通过导入IDE然后运行Application的main方法跑起系统。 h2数据库访问路径:http://localhost:8090/h2-console/ 博客浏...

osc_44jaxl0s
2019/02/13
16
0
基于Ubuntu搭建Mysql5.7(主备)

最近在工作中要求在客户的系统中使用源码编译的方式搭建一个高可用的Mysql5.7数据库,客户提供的Linux系统为国产uos,其实用起来个人感觉和Unbuntu很像,ps:也没用过其他的,太菜太菜! 经过...

一个向往自由的假程序员
昨天
0
0
ElasticSearch系列三:Logstash的使用

目录 前言 Logstash配置文件 启动 前言 Logstash一般用来收集整理日志,但是也可以做数据的同步 我希望我的数据库的数据全部存到ElasticSearch之后,我的数据库做的增删改查都可以增量的更新到...

蜀云泉
05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

是否有可能从另一个git存储库中挑选一个提交? - Is it possible to cherry-pick a commit from another git repository?

问题: I'm working with a git repository that needs a commit from another git repository that knows nothing of the first. 我正在使用一个git存储库,需要从另一个不知道第一个存储库......

技术盛宴
昨天
26
0
【LeetCode】53 盛最多水的容器

题目 解题思路 双指针法: https://leetcode-cn.com/problems/container-with-most-water/solution/sheng-zui-duo-shui-de-rong-qi-by-leetcode-solution/ 代码 public class Solution { ......

JaneRoad
昨天
16
0
阿里云OSS配置CDN加速

首先购买CDN流量包 然后添加域名 添加好后 然后将域名OSS.xxxx.com 解析到 生成的CDN域名上 这样就完成了

可达鸭眉头一皱
昨天
16
0
js 整数与小数正则替换片段

说明 /(\d+)/g 整数 /(\d+\.\d+)rem/g 小数 /(\d+\.\d+|\d+)rem/g 其中 | 或 条件 例子 全局查找带 rem 单位的,替换成 px 单位 let text = text.replace(/(\d+\.\d+|\d+)rem/g, function(s......

DrChenXX
昨天
17
0
ubuntu下minicorba例子

一、开发环境安装 sudo apt install omniorb omniorb-idl omniidl libomniorb4-dev libomniorb4-2 omniorb-nameserver libomnithread4 libomnithread4-dev 二、源文件: Hi.idl module ......

wangxuwei
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部