本文參考:spring Data JPA入門 【原創】純乾貨,Spring-data-jpa詳解,全方位介紹 Spring Data JPA系列教程--入門html
JPA(Java Persistence API)是Sun官方提出的Java持久化規範。它爲Java開發人員提供了一種對象/關聯映射工具來管理Java應用中的關係數據。他的出現主要是爲了簡化現有的持久化開發工做和整合ORM技術,結束如今Hibernate,TopLink,JDO等ORM框架各自爲營的局面。值得注意的是,JPA是在充分吸取了現有Hibernate,TopLink,JDO等ORM框架的基礎上發展而來的,具備易於使用,伸縮性強等優勢。java
注意:JPA是一套規範,不是一套產品,那麼像Hibernate,TopLink,JDO他們是一套產品,若是說這些產品實現了這個JPA規範,那麼咱們就能夠叫他們爲JPA的實現產品mysql
Spring Data JPA 是 Spring 基於 ORM 框架(hibernate)、JPA 規範的基礎上封裝的一套JPA應用框架,可以使開發者用極簡的代碼便可實現對數據的訪問和操做。它提供了包括增刪改查等在內的經常使用功能,且易於擴展。web
spring data jpa讓咱們解脫了DAO層的操做,基本上全部CRUD均可以依賴於它來實現。redis
具體點來講就是隻須要編寫一個接口,繼承spring data jpa相應接口,不須要編寫實現類,建立一個實體類,不須要建立相應的數據庫表,就可使用基本的CRUD功能。spring
public interface UserRepository extends CrudRepository<User, Long>{}
咱們作Java開發的都知道Spring的強大,到目前爲止,企業級應用Spring幾乎是無所不能,無所不在,已是事實上的標準了,企業級應用不使用Spring的幾乎沒有,這樣說沒錯吧。而Spring整合第三方框架的能力又很強,他要作的不只僅是個最先的IOC容器這麼簡單一回事,如今Spring涉及的方面太廣,主要是體如今和第三方工具的整合上。而在與第三方整合這方面,Spring作了持久化這一塊的工做,我我的的感受是Spring但願把持久化這塊內容也拿下。因而就有了Spring-data-**這一系列包。包括,Spring-data-jpa,Spring-data-template,Spring-data-mongodb,Spring-data-redis,還有個民間產品,mybatis-spring,和前面相似,這是和mybatis整合的第三方包,這些都是乾的持久化工具乾的事兒。sql
Spring-data-jpa,表示與jpa的整合,底層都是由hibernate來實現。mongodb
優勢:數據庫
a、不須要寫SQL,SQL會自動生成編程
b、SQL語句不依賴數據庫,移植性強,更換數據庫較爲容易。
缺點:
a、SQL優化比較困難
b、相比mybatis入門門檻較高
適用與需求變化很少的中小型項目中,好比後臺管理,erp,orm,oa
Spring Data JPA 提供的編程接口
接口繼承關係圖:
一、配置環境
MySQL:5.7.17
Springboot:2.1.4.RELEASE
二、添加依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
三、修改application.properties文件
# DataSource spring.datasource.url=jdbc:mysql://localhost:3306/blog?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password= spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # JPA spring.jpa.show-sql = true spring.jpa.hibernate.ddl-auto=create-drop
四、實體User
實體的規範、註解、解析下一篇文章會詳細描述。
@Entity // 實體 public class User implements Serializable{ private static final long serialVersionUID = 1L; @Id // 主鍵 @GeneratedValue(strategy=GenerationType.IDENTITY) // 自增加策略 private Long id; // 用戶的惟一標識 @Column(nullable = false) // 映射爲字段,值不能爲空 private String name; @Column(nullable = false) private Integer age; protected User() { // JPA 的規範要求無參構造函數;設爲 protected 防止直接使用 } public User(String name, Integer age) { this.name = name; this.age = age; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return String.format( "User[id=%d, name='%s', age='%d']", id, name, age); } }
public interface UserRepository extends CrudRepository<User, Long>{}
@RestController @RequestMapping("/users") public class UserController { @Autowired private UserRepository userRepository; /** * 從 用戶存儲庫 獲取用戶列表 * @return */ private List<User> getUserlist() { List<User> users = new ArrayList<>(); for (User user : userRepository.findAll()) { users.add(user); } return users; }
}
a、啓動MySQL Server
b、建立blog數據庫
能夠看到自動建立了數據表