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. Selenium文件上传问题

     

  2. HKDAS产品技术架构图

  3. Zookeeper高级

    1.1. 一致性协议概述 前面已经讨论过,在分布式环境下,有很多不确定性因素,故障随时都回发生,也讲了CAP理论,BASE理论 我们希望达到,在分布式环境下能搭建一个高可用的,且数据高一致性的服务,目 ...

  4. TP6.0 获取请求对象的五种方式

    目录 1. 门面类 2. 依赖注入 3. 框架提供的基础控制器的 request 属性 4. request() 助手函数 5. app() 超级助手函数 think\Request.think\fa ...

  5. Redis之命令

    Redis命令手册:http://doc.redisfans.com/

  6. 记录一次OCR程序开发的尝试

    记录一次OCR程序开发的尝试 最近工作中涉及到一部分文档和纸质文档的校验工作,就想把纸质文件拍下来,用文字来互相校验.想到之前调用有道智云接口做了文档翻译.看了下OCR文字识别的API接口,有道提供了 ...

  7. ctfhub sql注入 整数型注入

    整数型注入 手工注入 1.查看是否存在sql注入,及sql注入类型 2.确定列数 3.确定注入点,以及数据库版本,数据库名称 4.查表名 5.查字段名以及flag值 获得flag值 sqlmap做法 ...

  8. PHP学习路线图(转)

    PHP学习路线图 在网上很多人公布了太多的PHP学习路线图,本人在互联网公司工作十余年,也带了很多PHP入门的新手,将他们的一些问题和学习路线图为大家整理出来,希望很多小白少走弯路. 一. 网上某些错 ...

  9. [LeetCode]Sql系列2

    题目 1205. 每月交易II Transactions 记录表 +----------------+---------+ | Column Name | Type | +-------------- ...

  10. 如何在 PyPI安装python的软件包?

    安装软件包 本节介绍如何安装Python的基本知识.包裹. 需要注意的是,这个上下文中的“包”一词被用作分布(即要安装的一组软件),而不是指包装在Python源代码中导入(即模块的容器).Python ...