SpringBoot——内置数据库

简单介绍

关于数据层的三大组件,数据源,持久化技术,数据库。前两种都已经介绍过了SpringBoot的内置的解决方案,还有最后一个数据库,在SpringBoot中,内置了三款数据库。分别是:

  • H2
  • HSQL
  • Derby

这三种数据库有几个共同点:

  • 都是由Java语言编写,可以作为Java类被注入到Spring容器中
  • 轻量级,足够轻巧,可以在内存中运行

第一个特点可以让他们被内置在Spring中,第二个特点可以让他们在程序运行的时候避免安装直接被使用。这都是SpringBoot能内置这三款数据库的主要原因,并且足够轻巧的特点也可以方便我们在测试阶段做测试使用。

环境介绍

我们可以继续使用之前的环境,但是我们需要对pom文件中的坐标做一些修改。将之前的MySQL的坐标注释,然后添加H2数据库的相关依赖,以及Web的相关依赖:

        <!--H2数据库必须的两个坐标-->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

然后,我们将之前配置文件中的东西全部注释,然后对H2数据库和Web环境做一些配置:

server.port=80

spring.h2.console.enabled=true
spring.h2.console.path=/h2

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=123456
spring.datasource.url=jdbc:h2:~/test

最上面的是关于Web的相关配置,中间的是H2的相关配置,第一行表示开启H2的控制台,第二行表示H2Web端的控制台路径,第三部分是关于H2数据库的数据源相关配置,这部分的配置仅在第一次连接H2的时候有用,当第一次连接成功之后就可以删除这段配置。

然后启动SpringBoot的引导类:

可以看到,控制台输出了很多我们之前没有见过的东西 ,红色框中的部分就是H2相关的日志,然后我们打开浏览器,输入H2Web控制台的网址:

如果你在你的浏览器上看到这个,就说明你的H2数据库已经启动了,然后输入默认的密码123456,点击【Connect】:

这个界面就是操作H2数据库的Web端控制台,我们可以在右侧的输入框中输入SQL语句,然后在下面的状态栏中看到结果:

由于H2是运行在内存中的,所以他的操作非常的快,但是存储的数据量也不是很多,一般常用与我们在测试中。并且H2作为一个SQL数据库,基本上MySQL中的语法也都支持,一些基本的增删改查的操作都是一样的。下面我们就用H2搭配Druid和MyBatis做一个完成的Dao层。

首先是我们要用到的所有的依赖:

XML 复制代码
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter-test</artifactId>
            <version>2.3.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.8</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    </dependencies>

配置文件:

XML 复制代码
spring:
  h2:
    console:
      enabled: true
      path: /h2
  datasource:
    url: "jdbc:h2:~/test"
    username: "sa"
    password: "123456"
    driver-class-name: "org.h2.Driver"

H2数据库SQL语句:

sql 复制代码
create table tb_user (id int,name varchar)
insert into tn_user values(1,'张三'),(2,'李四'),(3,'王五'),(4,'赵六')
select * from tb_user

然后就是去编写POJO和Mapper,这些我们之前都已经看过了,所以我这里直接展示测试类中的测试方法:

java 复制代码
@Test
    void contextLoads(@Autowired userMapper userMapper) {
        book user = userMapper.selectUserById(1);
        System.out.println(user);
    }

方法还是之前的方法,参数都是一样的,SpringBoot主打的就是一个只要是你能集成的东西,那么基本代码不用变,无非就是导入一下坐标,然后更改一下配置文件而已。

在控制台上也打印出了我们这里与H2相关的日志,这就基本完成了H2的集成。

总结

到目前为止,我们关于数据层有关的三大组成部分,数据源,持久化技术,数据库,在SpringBoot中的默认解决方案就已经介绍完了。这里就只是说了一下在SpringBoot中有,并且自动维护了这么一种技术,具体的数据选型还是要根据当时的情况来决定,并且这集中技术的好坏优势等等都是要自己的深入学习之后,再根据情景去判断。

除了介绍这几种技术,最主要的是这几种技术可以互相的组合使用。比如我们一直在使用的MyBatis和Druid,MySQL的组合,在测试的时候,我们可以将MySQL换成速度更快的H2,或者将Druid换成配置更少的hikari,注意在使用的时候要导入对应的依赖既可。

相关推荐
新知图书2 分钟前
Rust编程与项目实战-箱
开发语言·后端·rust
SomeB1oody6 分钟前
【Rust自学】7.3. use关键字 Pt.1:use的使用与as关键字
开发语言·后端·rust
minstbe16 分钟前
WEB开发 - Flask 入门:Jinja2 模板语法进阶 Python
后端·python·flask
hjxxlsx29 分钟前
什么是Spring Boot 应用开发?
spring boot
计算机学无涯36 分钟前
Spring事务回滚
数据库·sql·spring
无名之逆42 分钟前
lombok-macros
开发语言·windows·后端·算法·面试·rust·大学期末
web130933203981 小时前
flume对kafka中数据的导入导出、datax对mysql数据库数据的抽取
数据库·kafka·flume
张声录11 小时前
【ETCD】【实操篇(二十)】浅谈etcd集群管理的艺术:从两阶段配置到灾难恢复的设计原则
数据库·etcd
qq_254674411 小时前
数据仓库和数据湖 数据仓库和数据库
数据库·数据仓库
m0_748247801 小时前
SpringBoot集成Flowable
java·spring boot·后端