对于数据访问,无论是关系型数据库还是非关系型数据库,spring boot 默认采用整合Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置。它通过引入各种***Template、***Respository来简化我们对数据访问层的操作,对我们来说只需要进行简单的设置即可。
要想使用这些功能,首先得导入场景启动器。只要是以data命名的starters,底层都是用的spring data来进行操作的。
整合基本的jdbc与数据源
用spring的初始化向导来新建一个工程:
选择我们所需要的场景:
此时在pom文件中我们可以看到引入了如下内容:
如果要使用mysql,还应当导入如下内容:
最终形成的的依赖文件iml如下图所示:
在resources文件夹之下新建一个名为application.yml的文件,作为配置文件。在配置文件中,需要编写连接数据库所需的用户名、密码、url、驱动类名,如下图所示:
在测试类当中编写如下代码,将数据源进行注入。从容器中拿数据源,再从数据源中取一条连接。
效果默认是用org.apache.tomcat.jdbc.pool.DataSource作为数据源。数据源的相关配置都在DataSourceProperties里面。
数据源的自动配置原理
和数据源有关的配置都在这个包下:
org.springframework.boot.autoconfigure.jdbc
1、其中的DataSourceConfiguration,根据配置创建数据源,默认使用tomcat连接池。可以使用spring.datasource.type指定自定义的数据源类型。
2、SpringBoot默认可以支持以下数据源:
也可以使用以下方式自定义数据源:
使用Builder来创建数据源,其中有一个build()方法,通过BeanUtils进行反射创建出相应type的数据源,进而绑定相关的属性。
3、还有一处配置:DataSourceAutoConfiguration,代表数据源的自动配置。
其中,给IOC容器中添加了一个DataSourceInitializer,是一个ApplicationListener监听器。
作用:1、runSchemaScripts():运行建表语句,
2、runDataScripts():运行插入数据的sql语句。
默认只需要将文件命名为shema-*.sql、data-*.sql。这两种文件在Initializer当中运行。
在运行建表语句时,首先要得到通过getScripts得到语句文件。从resources来获取路径,如果找不到,就去默认的fallback路径下寻找文件。
还可以在application.yml文件当中添加下面的内容来指定位置:
操作数据库:自动配置了jdbcTemplate操作数据库。
示例:
1、编写一个控制器来发请求,在控制器当中注入jdbcTemplate来查询数据。
2、在数据库中插入测试数据。
3、让程序处理query请求,让ResponseBody将数据写出去。
4、查看结果。