Spring-Data-Jpa的使用

在spring-boot中,關於spring-data-jpa的使用做一個記錄: Spring Data JPA 是 Spring 基於 ORM 框架、JPA 規範的基礎上封裝的一套 JPA 應用框架,可以使開發者用極簡的代碼便可實現對數據的訪問和操做。它提供了包括增刪改查等在內的經常使用功能,且易於擴展! Spring Data JPA 讓咱們解脫了 DAO 層的操做,基本上全部 CRUD 均可以依賴於它來實現。前端

依賴包:java

<dependency>
    <groupId>org.Springframework.boot</groupId>
    <artifactId>Spring-boot-starter-data-jpa</artifactId>
</dependency>
 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

配置文件添加:mysql

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true

關於配置的說明:spring

spring.jpa.properties.hibernate.hbm2ddl.auto參數的做用主要用於:自動建立 | 更新 | 驗證數據庫表結構,總共有四個值:sql

create:每次加載 hibernate 時都會刪除上一次的生成的表,而後根據 model 類再從新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是致使數據庫表數據丟失的一個重要緣由。數據庫

create-drop:每次加載 hibernate 時根據 model 類生成表,可是 sessionFactory 一關閉,表就自動刪除。服務器

update:最經常使用的屬性,第一次加載 hibernate 時根據 model 類會自動創建起表的結構(前提是先創建好數據庫),之後加載 hibernate 時根據 model 類自動更新表結構,即便表結構改變了,但表中的行仍然存在,不會刪除之前的行。要注意的是當部署到服務器後,表結構是不會被立刻創建起來的,是要等應用第一次運行起來後纔會。session

validate:每次加載 hibernate 時,驗證建立數據庫表結構,只會和數據庫中的表進行比較,不會建立新表,可是會插入新值。框架

spring.jpa.properties.hibernate.dialect:主要是指定生成表的存儲引擎spring-boot

spring.jpa.show-sql:是否打印出自動生產的 SQL

添加實體類

@Entity
@Table(name = "t_people")
public class People implements Serializable{
    @Id
    @GeneratedValue
    private Long id;
    //添加人
    @Column(name = "add_user_name",nullable = false)
    private String addUserName;
    //修改人
    private String updateUserName;
    //添加時間
    @Temporal(TemporalType.TIMESTAMP)
    private Date addTime;
    //修改時間
    @Temporal(TemporalType.TIMESTAMP)
    private Date updateTime;
    //用戶名
    private String userName;
    //密碼
    private String password;
    //郵箱
    private String email;
    //電話號碼
    private String telephone;
    @Transient
    private String testMsg;

使用spring-data-jpa不須要單獨去數據庫添加對應的表,只須要在實體類加上相應的註解,會自動生成咱們須要的表;

註解的說明:

@Entity :指定哪些實體類須要在數據庫生成對應的表,不加將不生成表

@Table:能夠不加,默認使用實體類名做爲表名(默認按照駝峯命名的方式生成表名,例如:實體類名是SystemPeople,生成的表名是system_people),加註解後能夠自定義表名

@Id和 @GeneratedValue:指定哪一個字段爲主鍵id,而且每次新增id自動增加

@Column :能夠不加,默認實體類屬性生成表的列名,同表名的生成方式同樣,name屬性能夠自定義列名,nullable設置字段是否能夠爲空,默認值爲true,能夠爲空,爲空時能夠不加

@Temporal:設置實體類字段是Date類型時生成的表字段的類型;

@Transient:若是實體類的字段只是爲了計算或者前端展現,不想生成的話加上該註解

添加dao:

public interface PeopleRepository extends JpaRepository<People,Long>, JpaSpecificationExecutor<People>{

    People findByUserName(String userName);

}

說明:JpaRepository封裝好了不少增刪改查,所以基本的數據庫操做不用再定義查詢方法

自定義簡單查詢

自定義的簡單查詢就是根據方法名來自動生成 SQL,主要的語法是 findXXBy、 findByXX、readAXXBy、queryXXBy、countXXBy、getXXBy 後面跟屬性名稱;如:findByUserName; 也能夠加一些關鍵字 And、Or:

People findByUserNameOrPhone(String username, String phone);

** 刪除或統計也是相似語法:**

Long deleteById(Long id);

Long countByUserName(String userName)

LIKE、IgnoreCase、OrderBy使用:

List<People > findByEmailLike(String email);

People findByUserNameIgnoreCase(String userName);

List<People > findByUserNameOrderByEmailDesc(String email);

** 自定義sql查詢**

Spring Data支持大部分的SQL操做,但也支持咱們自定義sql,在 SQL 的查詢方法上面使用 @Query 註解,如涉及到刪除和修改須要加上 @Modifying,也能夠根據須要添加 @Transactional 對事物的支持,查詢超時的設置等。由於這裏的SQL是HQL因此 sql的表名和字段名直接寫實體類名和屬性名,若是要寫真實的表名,能夠在sql後加上 nativeQuery = true

@Modifying
    @Query(value = "update People set userName = ?1 where id = ?2")
    void updateUserName(String userName,long id);
    @Modifying
    @Query(value = "update t_people set user_name = ?1 where id = ?2", nativeQuery = true)
    void updateUserName(String userName,long id);
相關文章
相關標籤/搜索