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註解查詢與更新

 

 

 

 

 

 

 

歡迎你們一塊兒交流學習...

相關文章
相關標籤/搜索