Spring boot操作数据库基础知识

在学习Spring boot操作数据前,需要先了解数据库相关的一些基础概念。具体如下所示:

JDBC:(Java DataBase Connectivity)是java连接数据库操作的原生接口。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为各个数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。一句话概括:jdbc是所有框架操作数据库必须要用的,由数据库厂商提供,但是为了方便java程序员调用各个数据库,各个数据库厂商都要实现jdbc接口。

JdbcTemplate:JdbcTemplate是Spring JDBC 核心包(core)中的核心类,它可以通过配置文件、注解、Java 配置类等形式获取数据库的相关信息,实现了对 JDBC 开发过程中的驱动加载、连接的开启和关闭、SQL 语句的创建与执行、异常处理、事务处理、数据类型转换等操作的封装。我们只要对其传入SQL 语句和必要的参数即可轻松进行JDBC编程。

JPA:(Java Persistence API)是java持久化规范,是orm(Object/Relational Mapping)框架的标准,主流orm框架都实现了这个标准。Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。ORM是一种思想,是插入在应用程序与JDBC API之间的一个中间层,JDBC并不能很好地支持面向对象的程序设计,ORM解决了这个问题,通过JDBC将字段高效的与对象进行映射。具体实现有hibernate、spring data jpa、open jpa。

Hibernate:是一个标准的orm框架,实现JPA接口。

Spring Data Jpa:是对jpa规范的再次抽象,底层还是用的hibernate技术。

Mybatis:也是一个持久化框架,但不完全是一个orm框架,不是依照的jpa规范。

上面是基础概念介绍,接下来通过实际代码例子看看Spring boot如何操作数据库,在spring initial中选择数据操作的基础依赖,即可快速初始化一个项目,如下图所示:

在application.properties中添加数据库相关配置,这里使用H2数据库,resources下面编写shema.sql,shema.sql中写create table等sql语句,data.sql中写insert table等语句。运行Demo,即可查询创建的表中的数据。从执行过程看,可以知道Spring boot进行了很多自动化的配置,达到开箱即用的效果。在数据库方面,Spring Boot做了哪些配置呢?

SpringBoot对数据库的自动配置

实际Spring boot用了三个主要的配置对象,DataSourceAutoConfiguration, DataSourceTrasactionManagerAutoConfiguration, JdbcTemplateAutoConfiguration. DataSourceAutoConfiguration是Spring Boot关于关系型数据库数据源的自动配置,目的是在开发人员没有自定义数据源DataSource bean组件时,根据开发人员所引入的包自动定义DataSource bean组件。该配置对象完成4个Task:

1.初始化DataSourceProperties配置文件

2.初始化数据源

3.执行 sql 文件

4.为数据源注册一个DataSourcePoolMetadataProvider实例

如果设置的不是内置数据库,有如下的设置规则:

1)必须配置url,username,password

2)数据库名不是必须的

3)driverClassName 不是必须的:可以从 url 中推导出

4)type 不是必须的:可以从上下文中推导出

在Spring Boot中,无须显式使用@EnableTransactionManagement注解来开启事务支持,Spring Boot 通过自动配置,默认就提供了事务的支持,在实际开发中,只需在业务层的类或方法上添加@Transactional注解即可启用事务。事务一般是在一条sqlSession里执行多表或多条SQL操作时需要用到。在程序执行遇到运行时异常并抛出异常时才会触发事务,在实际开发中抛出异常还得在Controller捕获异常并做最终的处理。

JdbcTemplateAutoConfiguration是Spring Boot关于JdbcTemplate工作组件的自动配置类,下面是部分JdbcTemplateAutoConfiguration的源码,可以看到需要在一定条件下自动配置才会生效。

采用JdbcTemplate操作数据库

JdbcTemplate提供很多方法,可以方便开发人员对数据库进行增删改查,要使用JdbcTemplate无需添加新的依赖,JdbcTemplate包含在spring-jdbc-data的依赖中,如下图所示,注入JdbcTemplate后,可以方便对数据库进行修改查询操作,另外还可以进行批量操作,具体可参考Demo.

备注:spring学习系列的很多Demo来源于极客时间专栏老师的Demo,上面介绍了JdbcTemplate的使用,接下来看看如何使用Spring Data JPA操作数据库。

采用Spring Data JPA操作数据库

前面提到过,JPA全称是Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。JPA仅仅是一种规范,也就是说JPA仅仅定义了一些接口,而接口需要实现才能工作的。所以底层需要某种实现,而Hibernate就是实现了JPA接口的ORM框架。Spring Data JPA可以理解为JPA规范的再次封装抽象,底层还是使用了Hibernate的JPA技术实现。Spring默认集成了HikariCP,HikariCP本质上就是一个数据库连接池。创建和关闭数据库连接的开销很大,HikariCP通过“池”来复用连接,减小开销。除了HikariCP,Durid也是一款优秀的数据库连接池工具。如果要使用Spring Data JPA,在spring initializr中选择相关依赖,即可快速自动化创建项目的base code,而Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。

初始化项目,即可开始编写代码操作数据库,在写代码前需要先了解下Spring Data JPA提供的常用注解以及注解的作用,具体如下所示:

1.@Entity:标识实体类是JPA实体,告诉JPA在程序运行时生成实体类对应表

2.@Table:设置实体类在数据库所对应的表名

3.@Id:标识类里所在变量为主键

4.@GeneratedValue:设置主键生成策略,此方式依赖于具体的数据库

5.@Enumerated:使用此注解映射枚举字段

6.@Column:表示属性所对应字段名进行个性化设置

7.@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy:表示字段为创建时间字段(insert自动设置)、创建用户字段(insert自动设置)、最后修改时间字段(update自定设置)、最后修改用户字段(update自定设置)

表示表关系的注解如下所示:

@JoinColumn 指定一个实体组织或实体集合。用在“多对一”和“一对多”的关联中。

@OneToOne 定义表之间“一对一”的关系。

@OneToMany 定义表之间“一对多”的关系。

@ManyToOne 定义表之间“多对一”的关系。

@ManyToMany 定义表之间“多对多”的关系。

Lombok提供的常用注解以及每个注解的作用如下所示:

@NonNull:自动在方法内对该参数进行是否为空的校验,

@Getter/@Setter:用在属性上,即不用手写setter和getter方法了

@ToString:用在类上,可以自动覆写toString方法

@EqualsAndHashCode:用在类上,自动生成equals方法和hashCode方法

@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:用在类上,自动生成无参构造和使用所有参数的构造函数以及把所有@NonNull属性作为参数的构造函数

@Data:注解在类上,相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor这些注解,对于POJO类十分有用

@Builder:用在类、构造器、方法上,基于build可以灵活的构建对象

除上面的注解外,还支持各种日志框架注解,添加上下面的注解,即可使用日志框架。

@CommonsLog Creates log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);

@Log Creates log = java.util.logging.Logger.getLogger(LogExample.class.getName());

@Log4j Creates log = org.apache.log4j.Logger.getLogger(LogExample.class);

@Log4j2 Creates log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);

@Slf4j Creates log = org.slf4j.LoggerFactory.getLogger(LogExample.class);

@XSlf4j Creates log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

这里是采用Spring Data JPA操作数据的Demo,Demo中,定义了实体以及Repository,main方法中调用Repository提供的方法实现初始化数据和查询数据的能力,在定义Entity时用到了Lombok提供的很多注解,节省了很多简单代码编写工作。部分代码截图如下,具体代码细节请查看Demo

上面介绍了Spring Data JPA的使用,下一篇博客将专门介绍Mybatis使用。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

taoli-qiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值