在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);