天天看點

SpringBoot整合SpringDataJPA,今天沒啥事情就看了一下springboot整合springdataJPA,實在是香啊,SQL語句都不用寫了

SpringBoot整合SpringDataJPA,今天沒啥事情就看了一下springboot整合springdataJPA,實在是香啊,SQL語句都不用寫了

SpringBoot整合SpringDataJPA

1、JPA概念

JPA是Java Persistence API的簡稱,中文名Java持久層API,是JDK 5.0注解或XML描述對象-關系表的映射關系,并将運作期的實體對象持久化到資料庫中.

JPA的總體思想和現有Hibernate、TopLink、JDO等ORM架構大體一緻。總的來說,JPA包括以下3方面的技術:

ORM映射中繼資料

JPA支援XML和JDK5.0注解兩種中繼資料的形式,中繼資料描述對象和表之間的映射關系,架構據此将實體對象持久化到資料庫表中;

API

用來操作實體對象,執行CRUD操作,架構在背景替代我們完成所有的事情,開發者從繁瑣的JDBC和SQL代碼中解脫出來。

查詢語言

這是持久化操作中很重要的一個方面,通過面向對象而非面向資料庫的查詢語言查詢資料,避免程式的SQL語句緊密耦合

2.springdataJPA的快速入門

建立maven工程并導入依賴:(這裡用的是sprigcloud2.1.16的)

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.1.16.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

<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>

2、配置檔案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 沒有任何操作

3、實體類

@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也就是資料庫對應的主鍵

5、測試類

@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 #無參構造的注解

SpringBoot整合SpringDataJPA,今天沒啥事情就看了一下springboot整合springdataJPA,實在是香啊,SQL語句都不用寫了
SpringBoot整合SpringDataJPA,今天沒啥事情就看了一下springboot整合springdataJPA,實在是香啊,SQL語句都不用寫了
SpringBoot整合SpringDataJPA,今天沒啥事情就看了一下springboot整合springdataJPA,實在是香啊,SQL語句都不用寫了

6、基于@Query注解查詢與更新

SpringBoot整合SpringDataJPA,今天沒啥事情就看了一下springboot整合springdataJPA,實在是香啊,SQL語句都不用寫了
SpringBoot整合SpringDataJPA,今天沒啥事情就看了一下springboot整合springdataJPA,實在是香啊,SQL語句都不用寫了
SpringBoot整合SpringDataJPA,今天沒啥事情就看了一下springboot整合springdataJPA,實在是香啊,SQL語句都不用寫了

歡迎大家一起交流學習...

發表于

2020-10-02 17:34 

statics 

閱讀(0) 

評論(0) 

編輯 

收藏