Spring Data JPA(一)簡介


Spring Data JPA介紹

  可以理解為JPA規范的再次封裝抽象,底層還是使用了Hibernate的JPA技術實現,引用JPQL(Java Persistence Query Language)查詢語言,屬於Spring整個生態體系的一部分。隨着Spring Boot和Spring Cloud在市場上的流行,Spring Data JPA也逐漸進入大家的視野,它們組成有機的整體,使用起來比較方便,加快了開發的效率,使開發者不需要關心和配置更多的東西,完全可以沉浸在Spring的完整生態標准實現下。JPA上手簡單,開發效率高,對對象的支持比較好,又有很大的靈活性,市場的認可度越來越高。

  JPA是Java Persistence API的簡稱,中文名為Java持久層API,是JDK 5.0注解或XML描述對象-關系表的映射關系,並將運行期的實體對象持久化到數據庫中。

  JPA包括以下3方面的內容:

  (1)一套API標准。在javax.persistence的包下面,用來操作實體對象,執行CRUD操作,框架在后台替代我們完成所有的事情,開發者從煩瑣的JDBC和SQL代碼中解脫出來。

  (2)面向對象的查詢語言:Java Persistence QueryLanguage(JPQL)。這是持久化操作中很重要的一個方面,通過面向對象而非面向數據庫的查詢語言查詢數據,避免程序的SQL語句緊密耦合

  (3)ORM(object/relational metadata)元數據的映射。JPA支持XML和JDK5.0注解兩種元數據的形式,元數據描述對象和表之間的映射關系,框架據此將實體對象持久化到數據庫表中。

  

Spring Data介紹

  Spring  Data項目是從2010年發展起來的,從創立之初SpringData就想提供一個大家熟悉的、一致的、基於Spring的數據訪問編程模型,同時仍然保留底層數據存儲的特殊特性。它可以輕松地讓開發者使用數據訪問技術,包括關系數據庫、非關系數據庫(NoSQL)和基於雲的數據服務。 

  Spring Data Common是Spring Data所有模塊的公用部分,該項目提供跨Spring數據項目的共享基礎設施。它包含了技術中立的庫接口以及一個堅持java類的元數據模型。

  Spring Data不僅對傳統的數據庫訪問技術JDBC、Hibernate、JDO、TopLick、JPA、Mybitas做了很好的支持、擴展、抽象、提供方便的API,還對NoSQL等非關系數據做了很好的支持,包括MongoDB、Redis、Apache Solr等

 

Spring Data的子項目

 

 Spring Data操作的主要特性

  Spring Data項目旨在為大家提供一種通用的編碼模式。數據訪問對象實現了對物理數據層的抽象,為編寫查詢方法提供了方便。通過對象映射,實現域對象和持續化存儲之間的轉換,而模板提供的是對底層存儲實體的訪問實現。如圖1-4所示。操作上主要有如下特征:

  提供模板操作,如Spring Data Redis和Spring Data Riak。

  強大的Repository和定制的數據存儲對象的抽象映射。
  對數據訪問對象的支持(Auting等)。
  

 

 

Spring Data JPA的主要類及結構圖

  七個Repository接口:

    1.Repository

    2.CrudRepository

    3.PagingAndSortingRepository

    4.QueryByExampleExecutor

    5.JpaRepository

    6.JpaSpeccificationExecutor

    7.QueryDslPredicateExecutor

  兩個實現類:

    1.SimpleJpaRepository

    2.QueryDslJpaRepository

  關系結構圖如圖1-5所示。

    

 

MySQL的快速開發實例

  1.創建表

CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  2.創建springboot項目

 配置jpa、mysql、web依賴

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</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-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>

  3.配置application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/db_jpa?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root

  4.創建實體類

@Entity
@Data
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
  private Long id;
  private String name;
  private String email;
}

  5.創建Repository

public interface UserRepository extends CrudRepository<User,Long>{
    
}

  6.創建Controller

 

@RestController
public class UserController {
@Autowired
private UserRepository userRepository;

@GetMapping("/add")
public User addUser(@RequestParam String name,@RequestParam String email){
User user=new User();
user.setName(name);
user.setEmail(email);
return userRepository.save(user);
}

@GetMapping("/get")
public Iterable<User> getAll(){
return userRepository.findAll();
}
}

  7.運行main方法

提示:org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dia

問題:原來是Hibernate SQL方言沒有設置導致的,在properties文件中增加下面這行

spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM