Spring Data JPA(一)簡介

Spring Data JPA介紹html

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

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

  JPA包括如下3方面的內容:web

  (1)一套API標準。在javax.persistence的包下面,用來操做實體對象,執行CRUD操做,框架在後臺替代咱們完成全部的事情,開發者從煩瑣的JDBC和SQL代碼中解脫出來。spring

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

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

  

Spring Data介紹編程

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

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

  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
相關文章
相關標籤/搜索