概述
前面文章記錄了Springboot整合Mybatis以及Spingboot整合JDBCTemlate的過程,這篇文章記錄Springboot整合JPA操作過程。jpa實際也是用來操作數據庫的持久層框架,如何使用jpa操作數據庫,和Springboot整合Mybatis以及Spingboot整合JDBCTemlate一樣,數據庫連接池還是使用默認的連接池tomcat.jdbc.pool,我們不再配置Druid或者其他連接池,關於Springboot如何整合Druid或者其他連接池後面文章會給出。
什麼是JPA?
全稱Java Persistence API,可以通過註解或者XML描述【對象-關係表】之間的映射關係,並將實體對象持久化到數據庫中。
爲我們提供了:
1)ORM映射元數據:JPA支持XML和註解兩種元數據的形式,元數據描述對象和表之間的映射關係,框架據此將實體對象持久化到數據庫表中;
如:@Entity、@Table、@Column、@Transient等註解。
2)JPA 的API:用來操作實體對象,執行CRUD操作,框架在後臺替我們完成所有的事情,開發者從繁瑣的JDBC和SQL代碼中解脫出來。
如:entityManager.merge(T t);
3)JPQL查詢語言:通過面向對象而非面向數據庫的查詢語言查詢數據,避免程序的SQL語句緊密耦合。
如:from Student s where s.name = ?
但是:
JPA僅僅是一種規範,也就是說JPA僅僅定義了一些接口,而接口是需要實現才能工作的。所以底層需要某種實現,而Hibernate就是實現了JPA接口的ORM框架。
也就是說:
JPA是一套ORM規範,Hibernate實現了JPA規範!如圖:
什麼是spring data jpa?
spirng data jpa是spring提供的一套簡化JPA開發的框架,按照約定好的【方法命名規則】寫dao層接口,就可以在不寫接口實現的情況下,實現對數據庫的訪問和操作。同時提供了很多除了CRUD之外的功能,如分頁、排序、複雜查詢等等。
Spring Data JPA 可以理解爲 JPA 規範的再次封裝抽象,底層還是使用了 Hibernate 的 JPA 技術實現。如圖:
接口約定命名規則:
實例:
springboot集成spring data jpa
引入stater
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
編寫實體類
對POJO類增加Entity的註解,並指定表名(如果不指定,默認的表名爲student),然後指定ID的及其生成策略,這些都是JPA的知識,與Spring boot無關,代碼:
//使用jpa註解配置映射關係
@Entity//告訴jpa這是和數據庫映射的類
@Table(name="tb_student")//table指明和哪個表映射 如果省略默認就是student表
public class Student {
//屬性id
@Id//這是一個主鍵
@GeneratedValue(strategy = GenerationType.IDENTITY)//自增主鍵
private Integer id;
//屬性name
@Column(name = "name",length = 50)//默認屬性就是列名
private String name;
編寫接口
//繼承JpaRepository完成對數據庫的操作
public interface StuRepository extends JpaRepository<Student,Integer>{
public int add(Student student);
}
基本配置(能配置的都在都在JpaProperties類中)
#更新或者參加數據表
spring.jpa.hibernate.ddl-auto=update
#打印sql語句控制檯
spring.jpa.show-sql=true
測試
@Controller
public class IndexController {
@Autowired
StuRepository stuRepository;
@GetMapping("/index/{id}")
public void index(@PathVariable ("id") Integer id){
//直接使用jpa提供好的方法
Student student = stuRepository.getOne(id);
System.out.println(student);
}
}
前面直接使用的是jpa規範中定義好的接口,我們也可自己在接口中定義方法
//繼承JpaRepository完成對數據庫的操作
public interface StuRepository extends JpaRepository<Student,Integer>{
@Query("select * from com.guxf.domain.Author au where id=:id")
public List<Student> queryByName(@Param("id") Integer id);
}
至此 Springboot整合jpa完成,有疑問可以關注我的公衆號 java一號 聯繫
個人獨立站點: www.javayihao.top