• 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才会执行
  • 相关阅读:
    __declspec关键字详细用法
    【转载】前端面试“http全过程”将所有HTTP相关知识抛出来了...
    【转载】理解C语言中的关键字extern
    Linux应用环境实战
    【转载】深入解析连接点
    【转载】COM多线程原理与应用
    【转载】COM的多线程模型
    【转载】COM 连接点
    【转载】COM:IUnknown、IClassFactory、IDispatch
    101. Symmetric Tree
  • 原文地址:https://www.cnblogs.com/mxjhaima/p/13810479.html
Copyright © 2020-2023  润新知