博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot简明教程之数据访问(一):JDBC Template
阅读量:5283 次
发布时间:2019-06-14

本文共 3818 字,大约阅读时间需要 12 分钟。

Spring Boot简明教程之数据访问(一):JDBC Template

文章目录

我们在之前已经介绍了有关Spring Boot对于Web开发的一些支持,但是如果整个应用要想实现动态的数据交换,对于数据库的操作是必不可少的。本文将介绍Spring Boot通过JdbcTemplate 进行数据库操作的示例。

创建项目:

大体上和我们的第一篇文章:相同,但是当我们在选择需要加载的所需要的组建的时候,除了选择所需要的Web组件外,还需要选择SQL类组件中的MySQL和JDBC.

在这里插入图片描述

或者,在创建好以后,在pom.xml中手动添加

mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-starter-jdbc

准备数据库环境

对于MySQL数据库部分的安装,请看这篇博客:,这里就不再赘述。

执行命令,创建数据库:

CREATE DATABASE springboot;

编写配置文件

在application.yml中进行如下配置:

spring:  datasource:    username: 你的MySQL用户名,默认为:root    password: 你的MySQL密码,默认为空    url: jdbc:mysql://127.0.0.1:3306/springboot    driver-class-name: com.mysql.jdbc.Driver

然后,我们测试一下该数据是否成功:

@RunWith(SpringRunner.class)@SpringBootTestpublic class Springboot06ApplicationTests {
@Autowired DataSource dataSource; @Test public void contextLoads() throws SQLException {
System.out.println(dataSource.getClass()); //打印获取到的数据源 Connection connection = dataSource.getConnection(); System.out.println(connection); //打印连接 connection.close(); //关闭连接 }}

然后,右键run"contextLoads":

在这里插入图片描述

成功获取到了连接,证明配置正确。

为啥我们获取到是class com.zaxxer.hikari.HikariDataSource?这是因为SpringBoot的数据源是自动配置的。在 SpringBoot 2.0 中,支持以下数据源:

  • org.apache.tomcat.jdbc.pool.DataSource
  • HikariDataSource
  • BasicDataSource

Spring Boot2.0开始,按照 HikariCP -> Tomcat pooling -> Commons DBCP2 优先顺序来选择最后实际使用哪个数据源,默认的就是:Hikari。但是在Spring Boot 1.0-2.0以前的版本默认的数据源是:Tomcat pooling 。在项目加入 spring-boot-starter-jdbc 依赖的时候,就已经包括了默认的数据源的依赖,所以这里自动配置 HikariCP 连接池数据源。

创建数据库

Spring Boot为我们提供了非常的方便的数据库的初始化配置,为我们的开发和部署都提供了极大的便利。它的的具体实现在org/springframework/boot/autoconfigure/jdbc/DataSourceInitializer.class:中,有兴趣的小伙伴可以自行阅读源码~~可我们如何实现数据库的初始化配置呢?下面两种方式都可以:

  1. 我们只需要在类路径(resource目录)下将我们的数据库的执行文件按照下面的方式命名:
schema-*.sql、data-*.sql默认规则:schema.sql,schema-all.sql;

但是需要注意的是,如果我们的文件命名为:schema-test,那么对应的,我们需要在配置文件中加上如下配置:

spring:   datasource:     platform: test
  1. 在配置文件中,指定我们的数据库执行文件的位置,就不需要按照上面的方式进行命名,例如:
schema:      - 指定位置

例如:

我们将编写如下的SQL语句,并将其放在resource目录下:

organization.sql

DROP TABLE IF EXISTS `organization`;CREATE TABLE `organization` ( `id` bigint(20) NOT NULL PRIMARY KEY AUTO_INCREMENT, `active` bit(1) NOT NULL, `company_name` varchar(30) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

data.sql

INSERT INTO organization (company_name, active)VALUES('JDBC IBM', true),('JDBC MS', true);

将配置文件修改如下:

spring:  datasource:    driver-class-name: com.mysql.jdbc.Driver    url: jdbc:mysql://localhost:3306/springboot?useSSL=false    username: 你的MySQL用户名,默认为:root    password: 你的MySQL密码,默认为空    schema: classpath:organization.sql    initialization-mode: always

直接启动项目:

在这里插入图片描述

启动成功,我们到数据库查看,发现数据表成功创建,且插入成功:

在这里插入图片描述

但需要注意的是:对于initialization-mode它有如下三个参数值:

参数值 说明
ALWAYS 始终初始化数据源(即:每次启动项目都会对数据库进行初始化)
EMBEDDED 对嵌入式数据源启用基本DataSource初始化,并在使用生产数据库时立即关闭。Spring Boot提供自动配置的嵌入式数据库有H2、HSQL、Derby,你不需要提供任何连接配置就能使用
NEVER 不要初始化数据源。

当我们在开发的过程中,可以先设置为ALWAYS,待初始化完成后就更改为NEVER,避免测试数据的丢失。

同时以上配置适用于Spring Boot 2.0以后的版本,对于2.0之前的版本,需要将配置initialization-mode更改为配置spring.datasource.initialize=true,其他配置基本一致。

创建Controller

helloController.java

/** * @Author: 公众号: Newtol * @Description:  * @Date: Created in 20:57 2018/9/19 */@RestControllerpublic class HelloController {
@Autowired JdbcTemplate jdbcTemplate; @GetMapping("/test") public Map
hello(){
List
> list = jdbcTemplate.queryForList("SELECT * FROM organization"); //查询数据库中的所有数据 return list.get(0); //打印第一条查询结果 }}

直接启动项目,访问localhost:9090/test

在这里插入图片描述
数据查询成功。

总结

我们介绍了有关Spring Boot整合JDBC Template,我们使用JDBC Template和直接使用JDBC区别不大,只是JDBC Template将数据库连接方面进行了自己的封装。以及在使用Spring Boot的数据库初始化的过程中一定要注意因为版本的不同而带来的不同配置。

源码地址

联系作者

有关转载、错误指正、问题咨询等事宜请扫码关注个人公众号进行联系,更有大量视频学习资源分享
70

转载于:https://www.cnblogs.com/newtol/p/10159082.html

你可能感兴趣的文章
eclipse插件Maven添加依赖查询无结果的解决方法(Select Dependency doesn't work)
查看>>
百度地图轨迹回放,自定义路书,边走边画线
查看>>
js学习-第3天
查看>>
查看android源码,windows环境下载源码
查看>>
echarts3.0 仪表盘实例更改完成占用率实例
查看>>
数字操作类
查看>>
Python学习之property
查看>>
js和.net操作Cookie遇到的问题
查看>>
几个简单的排序 source code
查看>>
Integer与int的区别
查看>>
Shell 判断文件或文件夹是否存在
查看>>
go的net/http用法
查看>>
JAVA字符串格式化-String.format()的使用
查看>>
[转]Java中继承、多态、重载和重写介绍
查看>>
【转】如何建立一个样式新颖的CSS3搜索框
查看>>
iOS Touch ID使用
查看>>
java 实现二分查找算法
查看>>
【C++】vector用法详解
查看>>
编译cubieboard android 源码过程详解之(四):extract-bsp
查看>>
Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
查看>>