zoukankan      html  css  js  c++  java
  • h2database在springboot中的使用

    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才会执行
  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    block的是发送信号的线程,又不是处理槽函数的线程
  • 原文地址:https://www.cnblogs.com/mxjhaima/p/13810479.html
Copyright © 2011-2022 走看看