前言
第一次使用 Spring JPA 的时候,感觉这东西简直就是神器,几乎不需要写什么关于数据库访问的代码一个基本的 CURD 的功能就出来了。下面我们就用一个例子来讲述以下 JPA 使用的基本操作。
新建项目,增加依赖
在 Intellij IDEA 里面新建一个空的 SpringBoot 项目。具体步骤参考
SpringBoot 的第一次邂逅。根据本样例的需求,我们要添加下面三个依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
准备数据库环境
为这个项目,我们专门新建一个 springboot_jpa 的数据库,并且给 springboot 用户授权
create database springboot_jpa;
grant all privileges on springboot_jpa.* to 'springboot'@'%' identified by 'springboot';
flush privileges;
项目配置
#通用数据源配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://10.110.2.56:3306/springboot_jpa?charset=utf8mb4&useSSL=false
spring.datasource.username=springboot
spring.datasource.password=springboot
# Hikari 数据源专用配置
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
# JPA 相关配置
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
这李前面的数据源配置和前文《SpringBoot 中使用 JDBC Templet》中的一样。后面的几个配置需要解释一下
- spring.jpa.show-sql=true 配置在日志中打印出执行的 SQL 语句信息。
- spring.jpa.hibernate.ddl-auto=create 配置指明在程序启动的时候要删除并且创建实体类对应的表。这个参数很危险,因为他会把对应的表删除掉然后重建。所以千万不要在生成环境中使用。只有在测试环境中,一开始初始化数据库结构的时候才能使用一次。
- spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect 。在 SrpingBoot 2.0 版本中,Hibernate 创建数据表的时候,默认的数据库存储引擎选择的是 MyISAM (之前好像是 InnoDB,这点比较诡异)。这个参数是在建表的时候,将默认的存储引擎切换为 InnoDB 用的。
建立第一个数据实体类
数据库实体类是一个 POJO Bean 对象。这里我们先建立一个 UserDO 的数据库实体。数据库实体的源码如下
package com.yanggaochao.springboot.learn.springbootjpalearn.security.domain.dao;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* 用户实体类
*
* @author 杨高超
* @since 2018-03-12
*/
@Entity
@Table(name = "AUTH_USER")
public class UserDO {
@Id
private Long id;
@Column(length = 32)
private String name;
@Column(length = 32)
private String account;
@Column(length = 64)
private String pwd;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAccount() {
return account;
}
public void setAccou