Spring Boot 系列(九)數據層-集成Spring-data-jpa

實際開發中,不可避免地會對數據進行反覆的增刪改查操做,然而這部分工做是十分繁瑣枯燥的。那麼,隨即而生的ORM框架就能很好的解決這個問題。
咱們經常使用的ORM框架有:Hibernate、Mybatis、Jpa 等。本文介紹SpringBoot 中集成 Jpa 框架。

集成 JPA (Java Persistence API) ,持久層框架。

Spring-data-jpa 依賴於 Hibernate,對Hibernate有必定的瞭解有助於使用JPA框架。java

1、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

2、配置數據庫鏈接信息

#數據庫配置
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的時候,會檢查表結構,但不會生成表。

3、建立實體類,並使用註解進行映射。

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
}

4、建立 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能夠發現,已經封裝好了基本的增刪改查操做,直接使用便可。

JpaRepository.png

除了默認提供的增刪改爲以外,jpa 還提供了極其簡便的方式來自定義查詢等方法(不須要編寫任何sql語句):
如上面的 Person findByName(String name) 方法,JPA 會根據方法名(駝峯式),解析出相應的sql語句進行具體的查詢操做。
當咱們須要執行復雜的語句的時候,咱們還可使用 @Query() 建立自定義sql語句查詢:
@Query("FROM Person p WHERE p.id=:id"),查詢語句與hibernate的HQL語句相同,能夠經過 :id 來綁定 @Param("id") 的參數。

5、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 官方文檔

版權聲明:本文爲博主原創文章,轉載請註明出處。mysql

相關文章
相關標籤/搜索