SpringBoot整合SpringDataJPA,今天没啥事情就看了一下springboot整合springdataJPA,实在是香啊,SQL语句都不用写了

SpringBoot整合SpringDataJPA

一、JPA概念

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.java

JPA的整体思想和现有Hibernate、TopLink、JDO等ORM框架大致一致。总的来讲,JPA包括如下3方面的技术:mysql

ORM映射元数据spring

JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;sql

API数据库

用来操做实体对象,执行CRUD操做,框架在后台替代咱们完成全部的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。oracle

查询语言app

这是持久化操做中很重要的一个方面,经过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合框架

2.springdataJPA的快速入门

建立maven工程并导入依赖:(这里用的是sprigcloud2.1.16的)maven

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.16.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>spring-boot

<dependencies>
<dependency>
<groupId>org.sprin
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>

二、配置文件application.yml

server:
port: 9090
spring:
application:
name: spring-data-jpa
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///user_db?serverTimezone=UTC
username: root
password: root
#jpa配置
jpa:
show-sql: true
hibernate:
ddl-auto: update

 

注意: url这里的配置 必需要加入serverTimezone=UTC传递时区,否则操做数据库会抛异常的,///表明的是127.0.0.1:3306 本地的能够省略

ServerTimeZone时区的问题

在设定时区的时候,若是设定serverTimezone=UTC,会比中国时间早8个小时,若是在中国,能够选择Asia/Shanghai或者Asia/Hongkong,例如:

url:jdbc:mysql://localhost:3306/mango?serverTimezone=Asia/Shanghai&useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8

解析:

ddl-auto表示对数据库进行自动化配置

值有三个选择:

create表示建立,若是说数据库中无论有没有这张表,都会先干掉,而后在从新建立,不适合生产环境

update表示更新,若是说数据库中有这张表,则执行进行更新表中的数据,若是没有这张表,则直接建立这张表,适合生产环境

none 没有任何操做

 

三、实体类

@Data
@Entity//表示当前类是实体类
@Table(name="tb_user",catalog = "user_db")
public class UserInfo {
/**
* 若是数据库表中 的字段名称和实体类中的属性名称保持一致的话,能够不须要加@Column注解
* @GeneratedValue(strategy=GenerationType.IDENTITY)主键生成策略
* GenerationType.IDENTITY表示针对于mysql中有自增加的数据的生成策略
* GenerationType.SEQUENCE表示针对于oracle数据中的主键生成策略
* GenerationType.AUTO是默认的选项,会根据数据库自动选择

 

@table 中的name值是指定数据库中的表名   catalog表示的是指定database名


*/
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;

private String name;
private String gender;
private Integer age;
private String address;
private String qq;
private String email;
private String username;
private String password;
private String phone;
}

4.dao接口

/**
* dao接口
*/
@Repository
public interface UserMapper extends JpaRepository<UserInfo,Integer> {
}

jpaRepository的泛型 为 userinfo 为实体类  integer为实体类的id也就是数据库对应的主键

五、测试类

 

@RunWith(SpringRunner.class)
@SpringBootTest
public class JpaTest {

@Autowired
private UserMapper userMapper;

//查询方法
@Test
public void queryAll(){
List<UserInfo> infoList = userMapper.findAll();
System.out.println(infoList);
}
}

 

在实体类上要加入lombok的注解:

@AllArgsConstructor #有参构造的注解
@NoArgsConstructor #无参构造的注解

 

 

 

 

 

 

六、基于@Query注解查询与更新

 

 

 

 

 

 

 

欢迎你们一块儿交流学习...