简单介绍
关于数据层的三大组件,数据源,持久化技术,数据库。前两种都已经介绍过了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层。
首先是我们要用到的所有的依赖:
<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>
配置文件:
spring:
h2:
console:
enabled: true
path: /h2
datasource:
url: "jdbc:h2:~/test"
username: "sa"
password: "123456"
driver-class-name: "org.h2.Driver"
H2数据库SQL语句:
create table tb_user (id int,name varchar)
insert into tn_user values(1,'张三'),(2,'李四'),(3,'王五'),(4,'赵六')
select * from tb_user
然后就是去编写POJO和Mapper,这些我们之前都已经看过了,所以我这里直接展示测试类中的测试方法:
@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,注意在使用的时候要导入对应的依赖既可。