h2为轻量级数据库,使用特别方便,它可以不使用数据库服务器,直接嵌入到java程序中。可以配置持久化,同样也可以不持久化(数据在内存中)进程结束后,数据就释放,用做测试和演示特别方便。自带后台管理,非常方便,开源免费

  • 类库,使用maven简易安装
  • 可以同应用程序打包在一起发布
  • 可持久化,也可以直接基于内存不保留数据,适合于做单元测试

maven依赖

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency> <dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
<version>1.4.193</version><!--低版本,支持访问内存数据库-->
</dependency> <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>

application.yml配置

server:
port: 8080 spring:
datasource:
driver-class-name: org.h2.Driver
# schema: classpath:db/schema-h2.sql #初始化建表
# data: classpath:db/data-h2.sql #初始化数据
# url: jdbc:h2:mem:test #不持久化,放在内存中
url: jdbc:h2:~/test
username: root
password: test
h2:
console:
path: /h2-console
enabled: true #必须配置,不然无法访问
  • 配置中提供了初始化数据库语句schema: classpath:db/schema-h2.sql

  • 配置中提供数据初始化语句data: classpath:db/data-h2.sql

  • 当然你也可以不初始化数据和表,在程序启动后,可以通过 localhost:8080/h2-console访问数据库管理后台。通过后台操作h2数据库

  • 持久化与否url: jdbc:h2:mem:test代表数据放置于内存中,这种适合做单元测试,一次性使用

    url: jdbc:h2:~/test 代表数据存放于 家目录/test

启动Springboot应用类,访问http://localhost:8080/h2-console就可以使用数据库管理后台了

测试查询功能

完整代码参考:https://gitee.com/haimama/java-study/tree/master/h2db-demo-simple

  • Application.java
package demosimple.h2;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
@MapperScan("demosimple.h2.mapper")
public class Application { public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
  • TestController.java
package demosimple.h2.controller;

import demosimple.h2.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class TestController { @Autowired
UserMapper userMapper; @GetMapping("/test")
public Object test(){
return userMapper.getById(1L);
}
}
  • UserMapper.java
package demosimple.h2.mapper;

import demosimple.h2.pojo.User;
import org.apache.ibatis.annotations.Select; public interface UserMapper {
@Select("select * from user where id=#{id}")
public User getById(Long id);
}
  • User.java
package demosimple.h2.pojo;

import lombok.Data;

@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}

访问http://localhost:8080/test 返回结果{"id":1,"name":"Jone","age":18,"email":"test1@baomidou.com"}

问题收集

jdbc链接

控制台默认链接是jdbc:h2:~/test,如果我们使用的是内存jdbc:h2:mem:test,需要将链接改为jdbc:h2:mem:test

内存链接报错

当我们使用jdbc:h2:mem:test链接时,报如下错误

Database "mem:test" not found, and IFEXISTS=true, so we cant auto-create it [90146-199] 90146/90146 (Help)

这句话的意思是说数据库未找到。经查询,高版本的h2不再允许远程访问内存数据库,可以将maven依赖添加一个低版本的

    <dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
<version>1.4.193</version> <!--低版本,支持访问内存数据库-->
</dependency>

初始化sql执行

  • 如果持久化到文件,也就是url: jdbc:h2:~/test,当应用再次启动时,初始化的sql不会再执行,并且操作后新增减的数据状态将一直保存
  • 如果数据库选择的是url: jdbc:h2:mem:test,每次启动时,数据都会重新初始化
  • 这里再补充一点儿前提,只有maven配置了 mybatis-spring-boot-starter 时,初始化的sql才会执行

h2database在springboot中的使用的更多相关文章

  1. [SpringBoot]SpringBoot中使用redis事务

    本文基于SpringBoot 2.X 事务在关系型数据库的开发中经常用到,其实非关系型数据库,比如redis也有对事务的支持,本文主要探讨在SpringBoot中如何使用redis事务. 事务的相关介 ...

  2. springboot中使用h2数据库(内存模式)

    使用H2的优点,不需要装有服务端和客户端,在项目中包含一个jar即可,加上初始化的SQL就可以使用数据库了 在springboot中引入,我的版本是2.1.4,里面就包含有h2的版本控制 <!- ...

  3. SpringBoot中yaml配置对象

    转载请在页首注明作者与出处 一:前言 YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所 ...

  4. 如何在SpringBoot中使用JSP ?但强烈不推荐,果断改Themeleaf吧

    做WEB项目,一定都用过JSP这个大牌.Spring MVC里面也可以很方便的将JSP与一个View关联起来,使用还是非常方便的.当你从一个传统的Spring MVC项目转入一个Spring Boot ...

  5. springboot中swaggerUI的使用

    demo地址:demo-swagger-springboot springboot中swaggerUI的使用 1.pom文件中添加swagger依赖 2.从github项目中下载swaggerUI 然 ...

  6. spring-boot+mybatis开发实战:如何在spring-boot中使用myabtis持久层框架

    前言: 本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架 spring-boot中使用mybatis持久层框架与原spring项目使用方式 ...

  7. 由浅入深学习springboot中使用redis

    很多时候,我们会在springboot中配置redis,但是就那么几个配置就配好了,没办法知道为什么,这里就详细的讲解一下 这里假设已经成功创建了一个springboot项目. redis连接工厂类 ...

  8. Springboot中使用AOP统一处理Web请求日志

    title: Springboot中使用AOP统一处理Web请求日志 date: 2017-04-26 16:30:48 tags: ['Spring Boot','AOP'] categories: ...

  9. SpringBoot 中常用注解

    本篇博文将介绍几种SpringBoot 中常用注解 其中,各注解的作用为: @PathVaribale 获取url中的数据 @RequestParam 获取请求参数的值 @GetMapping 组合注 ...

随机推荐

  1. Google Kick Start 2020 Round C

    ac代码 A. Countdown for循环跑一跑,没啥好说的. B. Stable Wall 如果\(s_{i,j} \ne s_{i+1,j}\),那么说明\(s_{i+1,j}\)必须在\(s ...

  2. linux 增加新用户无法使用sudo命令解决办法

    昨天一不小心把自己的系统搞崩了,也没有快照,没法进行还原操作,所以只能重装系统解决了,装完系统以后一切正常,当我新增了一个用户,使用sudo命令切换到root用户时,发现怎么都切换不过去,经过百度发现 ...

  3. centos7安装jdk11

    我下载的网址是http://jdk.java.net/11/ 找安装包的事就说到这里了.我是因为公司用的jdk8,但是,我给个人研究东西的时候,目前定的版本是jdk11 .另外,现在基本全线转到了op ...

  4. linux账户的锁定和解锁、禁用账号

    l——lock锁定 S——STATUS查看 u——unlock解锁 1.通过passwd命令锁定和解锁: [root@localhost ~]# passwd -S abc ——passwd -S  ...

  5. 数据库漏洞扫描工具scuba

    1.先下载安装scuba 参考地址  https://www.52pojie.cn/thread-702605-1-1.html 百度网盘下载地址: 链接:https://pan.baidu.com/ ...

  6. oracle之insert语句总结

    insert语句总结 16.1 第一类,insert语句:单行插入 1)SQL> create table a (id int,name char(10) default 'aaa');   / ...

  7. 关于java基础_方法的学习

    方法: 方法就是把一堆需要反复执行的代码封装起来,如果项目需要调用这段代码时,直接调用方法名即可 方法相当于榨汁机, 材料:水果 产出物:果汁 参数(材料):进入方法的数据 返回值(产出物):就是方法 ...

  8. hystrix熔断器之metrics

    Metric概述 HystrixCommands和HystrixObservableCommands执行过程中,会产生执行的数据,这些数据对于观察调用的性能表现非常有用. 命令产生数据后,Metric ...

  9. kubernetes部署Percona XtraDB Cluster集群

    PXC介绍 全称percona-xtradb-cluster,提供了MySQL高可用的一种实现方法.PXC集群以节点组成(推荐至少3节点,便于故障恢复),每个节点都是基于常规的 MySQL Serve ...

  10. WEB 应用缓存解析以及使用 Redis 实现分布式缓存

    什么是缓存? 缓存就是数据交换的缓冲区,用于临时存储数据(使用频繁的数据).当用户请求数据时,首先在缓存中寻找,如果找到了则直接返回.如果找不到,则去数据库中查找.缓存的本质就是用空间换时间,牺牲数据 ...