背景
开发中经常想使用数据库,但是可能种种原因导致暂时无法安装oracle、mysql这种关系型数据库怎么办?H2轻松解决,既能快速上手也能满足你sql语法的要求,后续可很好的并入oracle和mysql中去。
一. H2数据库
H2 数据库是一个用 Java 开发的嵌入式(内存级别)数据库,它本身只是一个类库,也就是只有一个 jar 文件,可以直接嵌入到项目中。
注意:H2数据库的内存模式,那么我们创建的数据库和表都只是保存在内存中,一旦服务器重启,那么内存中的数据库和表就不存在了。
用途:缓存
H2的2种连接方式
- 以嵌入式(本地)连接方式连接H2数据库:
这种连接方式默认情况下只允许有一个客户端连接到H2数据库。当有客户端连接到H2数据库之后,此时数据库文件就会被锁定,那么其他客户端就无法再连接了。
连接语法: jdbc:h2:[file:][] 例如: //连接位于用户目录下的test数据库 jdbc:h2:~/test jdbc:h2:file:/data/sample jdbc:h2:file:E:/H2/gacl(Windows only) |
- 使用TCP/IP的服务器模式(远程连接)方式连接H2数据库(推荐):
这种连接方式和其他数据库连接方式类似,是基于Service的形式进行连接的,因此允许多个客户端同时连接到H2数据库。
连接语法: jdbc:h2:tcp://[:]/[] 范例: jdbc:h2:tcp://localhost/~/test |
二.下载H2
1. H2 数据库下载地址:
http://www.h2database.com/html/main.html
http://www.h2database.com/html/download.html
2. H2软件包目录结构
h2 |---bin | |---h2-2.1.212.jar //H2数据库的jar包(驱动也在里面) | |---h2.bat //Windows控制台启动脚本 | |---h2.sh //Linux控制台启动脚本 | |---h2w.bat //Windows控制台启动脚本(不带黑屏窗口) |---docs //H2数据库的帮助文档(内有H2数据库的使用手册) |---service //通过wrapper包装成服务。 |---src //H2数据库的源代码 |---build.bat //windows构建脚本 |---build.sh //linux构建脚本 |
3. windows下启动软件
我们可以进入到h2的bin目录下,点击h2.bat或者h2w.bat,运行软件。我这里选择的是点击h2w.bat(如上图红框),该方式会在后台运行。
4. Linux下启动软件
在 Linux 环境下,首先用上传命令rz等把压缩文件(.zip)上传到某个目录下,用unzip命令解压,自动解压到h2目录下,然后在h2/bin目录下,运行./h2.sh 文件来启动数据库服务,但不建议这样直接启动,因为需要带一些参数,需要进行如下修改:
1).复制h2.sh为h2_server.sh文件: # cp h2.sh h2_server.sh 2).用vim编辑h2_server.sh,如下: #!/bin/sh dir=$(dirname"$0") java -cp "$dir/h2-2.1.212.jar:$H2DRIVERS:$CLASSPATH" org.h2.tools.Server -tcpAllowOthers -webAllowOthers -webPort 8082 "$@" 3).说明: org.h2.tools.Server: 以服务器模式启动; -tcpAllowOthers: 允许远程机器通过TCP方式访问; -webAllowOthers: 允许远程机器通过浏览器访问; -webPort 8082: 默认的访问端口(8082为未被占用的端口,如果此端口已经被其他端口占用,则改为其他端口); 4).具体的运行方式: chmod修改启动文件权限: # chmod +x h2_server.sh 输入如下命令后台运行: # nohup ./h2_server.sh & 回车 说明:nohup 命令可以在我们退出账户之后继续运行相应的进程,nohup 就是不挂起的意思(no hang up),& 表示让该进程实现后台运行。 该命令的一般形式为: # nohup command & 回车 |
1、添加依赖:
<!-- H2数据库 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
2、配置文件 application.yml:
server:
port: 8089
spring:
datasource:
url: jdbc:h2:~/test
driver-class-name: org.h2.Driver
username: sa
password: 123456
# schema: classpath:db/schema.sql
# data: classpath:db/data.sql
jpa:
database: h2
hibernate:
ddl-auto: update
show-sql: true
h2:
console:
path: /h2-console
enabled: true
domain实体
package com.springboot.demo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Location {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String type;
private double latitude;
private double longtitude;
}
dao层
@Repository
public interface LocationRepository extends JpaRepository<Location,Long> {
List<Location> getLocationsByType(String type);
}
controller层
@Controller
public class HelloContraller {
@Autowired
private LocationRepository locationRepository;
@ResponseBody
@RequestMapping("/hello")
public List<Location> hello(){
return locationRepository.findAll();
}
}
数据console查看
下面使用H2控制台查看:
http://localhost:8089/h2-console
输入用户名sa,密码123456
9. 在打开的页面中点击左侧的Location。
10. 可以看到右侧显示了SQL:
SELECT * FROM USER
点击上面的Run执行。
11. 执行完毕后,可以看到下面显示了我们加入的数据。