【SpringBoot新手篇】SpringBoot 集成H2数据库

【SpringBoot新手篇】SpringBoot 集成H2数据库

  • 概述h2数据库
  • SpringBoot整合测试
    • pom
    • yml
      • Embedded 嵌入式
      • Remote (client/server) 远程连接
      • In-Memory 内存
    • logback-spring.xml
    • Application
    • entity

概述h2数据库

h2database为我们提供了十分轻量,十分快捷方便的内嵌式数据库

  • H2是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
  • 可以同应用程序打包在一起发布
  • 它的另一个用途是用于单元测试。启动速度快,而且可以关闭持久化功能,每一个用例执行完随即还原到初始状态
  • 提供JDBC访问接口,提供基于浏览器的控制台,可以执行sql
  • 免费,开源,够快

还方便了程序刚开始dao层单元测试测试,不需要搭建oracle,不需要加载mysql,快速测试写的dao

SpringBoot整合测试

pom


    org.springframework.boot
    spring-boot-starter-web



    org.springframework.boot
    spring-boot-starter-data-jpa



    com.h2database
    h2
    runtime



    org.projectlombok
    lombok
    true

yml

spring:
  datasource:
    #配置h2数据库的连接地址
    # Embedded 嵌入式
    # Remote (client/server) 远程连接
    # In-Memory 内存
    url: jdbc:h2:mem:test
    #配置JDBC Driver
    driver-class-name: org.h2.Driver
    #配置数据库用户名
    username: root
    #配置数据库密码
    password: 123456
    #进行该配置,程序开启时就会启动h2 web consloe。当然这是默认的,如果你不想在启动程序时启动h2 web consloe,那么就设置为false。
  h2:
    console:
      enabled: true
      #进行该配置,你就可以通过YOUR_URL/h2访问h2 web consloe。YOUR_URL是你程序的访问URl。默认为/h2-console
      path: /h2
      # 进行该配置后,h2 web consloe就可以在远程访问了。否则只能在本机访问。
      settings:
        web-allow-others: true
  jpa:
    properties:
      hibernate:
        hbm2ddl:
          auto: update
      dialect: org.hibernate.dialect.MySQL5InnoDBDialect
    #启用SQL语句的日志记录
    show-sql: true

数据库支持多种连接模式和连接设置,主要有 Embedded 嵌入式,Remote (client/server) 远程连接,In-Memory 内存

Embedded 嵌入式

URL jdbc:h2:〜/test表示数据库存储在用户主目录中以“ test”开头的文件中。 支持绝对位置,如jdbc:h2:/data/db/test。 在嵌入式模式下,数据库与应用程序以相同的过程运行。 任何时候都只能有一个进程访问数据库。 如果您拥有权限,则不存在的数据库将自动创建。 形式为jdbc:h2:./data/test的URL相对于当前工作目录(启动应用程序的目录)。 建议使用相对于或绝对位置的位置。

Remote (client/server) 远程连接

URL jdbc:h2:tcp//localhost/〜/test表示通过TCP / IP连接到此计算机上运行的H2 TCP服务器,并在用户主目录中打开一个名为test的数据库。 必须首先启动服务器。 任意数量的客户端都可以连接到同一数据库。 适用与嵌入式数据库相同的位置规则。

In-Memory 内存

URL jdbc:h2:mem:test意味着打开一个名为“test”的内存数据库。数据不持久,当最后一个数据库连接关闭时,数据会丢失。多个线程可以访问同一个数据库,但是数据只能在同一个进程中可见。

logback-spring.xml




    
    

    
    
        
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            utf8
        
    

    
    
        
            
            ${LOG_HOME}/xc.%d{yyyy-MM-dd}.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
        
    

    
    
        
        0
        
        512
        
        
    


    
        
    
    
    
        
        
        
    

Application

package cn.zysheep.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Springboot06DataH2Application {

    public static void main(String[] args) {
        SpringApplication.run(Springboot06DataH2Application.class, args);
    }

}

entity

使用Jpa相关注解,在h2DB中自动生成与实体对应的表

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column
    private String name;

}

启动Springboot项目,浏览器访问http://localhost:8080/h2

【SpringBoot新手篇】SpringBoot 集成H2数据库_第1张图片

后台主页

【SpringBoot新手篇】SpringBoot 集成H2数据库_第2张图片

h2数据库的CRUD操作和使用JPA对MySQL数据库的操作一致

数据库支持多种连接模式和连接设置,不同的连接模式和连接设置是通过不同的URL来区分的,URL中的设置是不区分大小写。

Topic URL Format and Examples
嵌入式(本地)连接 jdbc:h2:[file:][] jdbc:h2:~/test jdbc:h2:file:/data/sample jdbc:h2:file:C:/data/sample (Windows only)
内存数据库(私有) jdbc:h2:mem:
内存数据库(被命名) jdbc:h2:mem: jdbc:h2:mem:test_mem
使用TCP/IP的服务器模式(远程连接) jdbc:h2:tcp://[:]/[ ] jdbc:h2:tcp://localhost/~/test jdbc:h2:tcp://dbserv:8084/~/sample
使用SSL/TLS的服务器模式(远程连接) jdbc:h2:ssl://[:]/ jdbc:h2:ssl://secureserv:8085/~/sample;
使用加密文件 jdbc:h2:;CIPHER=[AES|XTEA] jdbc:h2:ssl://secureserv/~/testdb;CIPHER=AES jdbc:h2:file:~/secure;CIPHER=XTEA
文件锁 jdbc:h2:;FILE_LOCK={NO|FILE|SOCKET} jdbc:h2:file:~/quickAndDirty;FILE_LOCK=NO jdbc:h2:file:~/private;CIPHER=XTEA;FILE_LOCK=SOCKET
仅打开存在的数据库 jdbc:h2:;IFEXISTS=TRUE jdbc:h2:file:~/sample;IFEXISTS=TRUE
当虚拟机退出时并不关闭数据库 jdbc:h2:;DB_CLOSE_ON_EXIT=FALSE
用户名和密码 jdbc:h2:[;USER=][;PASSWORD=] jdbc:h2:file:~/sample;USER=sa;PASSWORD=123
更新记入索引 jdbc:h2:;LOG=2 jdbc:h2:file:~/sample;LOG=2
调试跟踪项设置 jdbc:h2:;TRACE_LEVEL_FILE= jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3
忽略位置参数设置 jdbc:h2:;IGNORE_UNKNOWN_SETTINGS=TRUE
指定文件读写模式 jdbc:h2:;ACCESS_MODE_LOG=rws;ACCESS_MODE_DATA=rws
在Zip文件中的数据库 jdbc:h2:zip:!/ jdbc:h2:zip:~/db.zip!/test
兼容模式 jdbc:h2:;MODE= jdbc:h2:~/test;MODE=MYSQL
自动重连接 jdbc:h2:;AUTO_RECONNECT=TRUE jdbc:h2:tcp://localhost/~/test;AUTO_RECONNECT=TRUE
自动混合模式 jdbc:h2:;AUTO_SERVER=TRUE jdbc:h2:~/test;AUTO_SERVER=TRUE
更改其他设置 jdbc:h2:;=[;=…] jdbc:h2:file:~/sample;TRACE_LEVEL_SYSTEM_OUT=3

你可能感兴趣的:(#,SpringBoot,java,spring,boot)