實際開發中,不可避免地會對數據進行反復的增刪改查操作,然而這部分工作是十分繁瑣枯燥的。那么,隨即而生的ORM框架就能很好的解決這個問題。
我們常用的ORM框架有:Hibernate、Mybatis、Jpa 等。本文介紹SpringBoot 中集成 Jpa 框架。
集成 JPA (Java Persistence API) ,持久層框架。
Spring-data-jpa 依賴於 Hibernate,對Hibernate有一定的了解有助於使用JPA框架。
一、pom.xml添加依賴
<!-- mysql數據庫驅動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<!-- 數據層 Spring-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
查看spring-boot-starter-data-jpa的具體依賴,可以發現有依賴hibernate
二、配置數據庫連接信息
#數據庫配置
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
如果你熟悉hibernate,那么會清楚spring.jpa.properties.hibernate.hbm2ddl.auto 的作用
# 配置指定對數據庫表結構的處理方式,值有:create、create-drop、update、validate
#
# create:每次加載hibernate的時候,都會重新根據模型生成表。如果表已存在,會先刪除該表再生成。
# create-drop:啟動項目加載hibernate的時候,會生成表。停止項目時,會把生成的表刪除掉。
# update:常用屬性。每次加載hibernate的時候,會生成表。如果表存在,會根據模型的屬性變化來更新表結構,這個過程不會做刪表處理。
# validate:每次加載hibernate的時候,會檢查表結構,但不會生成表。
三、創建實體類,並使用注解進行映射。
package com.sam.demo.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
* @author sam
* @since 2017/7/18
*/
@Entity
@Table(name = "t_person") //指定表名
public class Person {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String name;
@Column
private int age;
// getter & setter
}
四、創建 PersonRepository 接口 繼承 JpaRepository
package com.sam.demo.repository;
import com.sam.demo.domain.Person;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
/**
* @author sam
* @since 2017/7/18
*/
public interface PersonRepository extends JpaRepository<Person, Long> {
Person findByName(String name);
Person findByNameAndAge(String name, int age);
@Query("FROM Person p WHERE p.id=:id")
Person findPersonById(@Param("id") Long id);
}
PersonRepository 繼承了 jpa提供的 JpaRepository。查看JpaRepository可以發現,已經封裝好了基本的增刪改查操作,直接使用即可。
除了默認提供的增刪改成之外,jpa 還提供了極其簡便的方式來自定義查詢等方法(不需要編寫任何sql語句):
如上面的 Person findByName(String name) 方法,JPA 會根據方法名(駝峰式),解析出相應的sql語句進行具體的查詢操作。
當我們需要執行復雜的語句的時候,我們還可以使用 @Query() 創建自定義sql語句查詢:
@Query("FROM Person p WHERE p.id=:id"),查詢語句與hibernate的HQL語句相同,可以通過 :id 來綁定 @Param("id") 的參數。
五、controller 中使用 PersonRepository
package com.sam.demo.controller;
import com.sam.demo.domain.Person;
import com.sam.demo.repository.PersonRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* @author sam
* @since 2017/7/16
*/
@RequestMapping("/person")
@RestController
public class PersonController {
@Autowired
private PersonRepository personRepository;
@RequestMapping(method = RequestMethod.GET)
public Person index() {
Person person = new Person();
person.setName("sam");
person.setAge(25);
//保存person
personRepository.save(person);
// Person temp = personRepository.findPerson(1l);
Person temp = personRepository.findByName("sam");
return temp;
}
}
訪問:http://localhost:8080/person 正確返回:
{"id":1,"name":"sam","age":25}
到此,基本完成了Spring Boot 集成 Spring-data-jpa 框架。
Spring-data-jpa 詳細使用請參考:Spring Data JPA 官方文檔
版權聲明:本文為博主原創文章,轉載請注明出處。