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