一、简介
Spring Data JPA,它的底层是用Hibernate实现的,相当于封装了一道Hibernate。目的是帮我们简化持久层的代码。
Hikari:截止2019年7月,Hikari号称java平台最快的连接池......
二、配置及操作
2.1引入依赖
pom中引入spring-boot-starter-data-jpa依赖,以及MySQL连接类mysql-connector-java依赖,springboot 2.0 后默认连接池就是Hikari了,所以引用parents后不用专门加依赖。
为了减少实体类或虚拟实体类的代码,引入lombok依赖。Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。例如开发中经常需要写的实体类,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误。Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。
完整pom如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.kcsm.training</groupId>
<artifactId>bootdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>bootdemo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.2 配置数据源连接
在application.properties配置文件中进行配置,配置如下,:(更为详细的配置信息详见最后的附件)
#应用名称
spring.application.name=bootdemo
server.port=8080
# 数据库连接配置
# jdbc_config datasource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url= jdbc:mysql://127.0.0.1:3306/alh?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=sa
spring.datasource.password=123456
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
# hibernate配置(jpa底层使用hibernate配置实现)
##映射方式配置,PhysicalNamingStrategyStandardImpl,名称不做修改加工。
##映射方式配置,若配置成SpringPhysicalNamingStrategy,在进行映射时,首字母小写,大写字母变为下划线加小写
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
##ddl-auto配置属性:create 启动时删数据库中的表,然后创建;create-drop 启动时删数据库中的表,然后创建,如果表不存在报错;
##update 如果启动时表格式不一致则更新表,原有数据保留;validate 项目启动表结构进行校验 如果不一致则报错
##生产环境中请勿配置,否则会导致严重的生产事故!,生产时使用spring cloud远程配置中心统一配置各项参数
spring.jpa.hibernate.ddl-auto=update
##控制台是否打印sql,默认false,生产时建议关闭
spring.jpa.show-sql=true
# 连接池配置
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
## 最小连接数
spring.datasource.hikari.minimum-idle=5
## 最大连接数
spring.datasource.hikari.maximum-pool-size=15
## 此属性控制从池返回的连接的默认自动提交行为,默认值:true
spring.datasource.hikari.auto-commit=true
## 连接允许在池中闲置的最长时间,默认600000(10分钟),单位ms
spring.datasource.hikari.idle-timeout=30000
## 连接池名称
spring.datasource.hikari.pool-name=UserHikariCP
## 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟,单位ms
spring.datasource.hikari.max-lifetime=1800000
## 数据库连接超时时间,默认30秒,即30000,单位ms
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1
创建entity包,创建实体类
@Data注解后自动生成getter/setter、equals、hashcode、toString方法(lombok提供的功能)
package com.kcsm.training.bootdemo.entity;
import lombok.*;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
/**
* 学生实体类
*
* @author lqk
* @date 2019/7/9 11:41
*/
@Entity
@Table(name = "STUDENT")
@Data
public class Student {
/**
* 主键
*/
@Id
@GeneratedValue(generator = "guidGenerator")
@GenericGenerator(name = &#