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

實(shí)際開(kāi)發(fā)中,不可避免地會(huì)對(duì)數(shù)據(jù)進(jìn)行反復(fù)的增刪改查操作,然而這部分工作是十分繁瑣枯燥的。那么,隨即而生的ORM框架就能很好的解決這個(gè)問(wèn)題。
我們常用的ORM框架有:Hibernate、Mybatis、Jpa 等。本文介紹SpringBoot 中集成 Jpa 框架。

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

Spring-data-jpa 依賴于 Hibernate,對(duì)Hibernate有一定的了解有助于使用JPA框架。

一、pom.xml添加依賴

<!-- mysql數(shù)據(jù)庫(kù)驅(qū)動(dòng) -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.21</version>
</dependency>

<!-- 數(shù)據(jù)層 Spring-data-jpa -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
查看spring-boot-starter-data-jpa的具體依賴,可以發(fā)現(xiàn)有依賴hibernate

二、配置數(shù)據(jù)庫(kù)連接信息

#數(shù)據(jù)庫(kù)配置
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,那么會(huì)清楚spring.jpa.properties.hibernate.hbm2ddl.auto 的作用
# 配置指定對(duì)數(shù)據(jù)庫(kù)表結(jié)構(gòu)的處理方式,值有:create、create-drop、update、validate 
#
# create:每次加載hibernate的時(shí)候,都會(huì)重新根據(jù)模型生成表。如果表已存在,會(huì)先刪除該表再生成。
# create-drop:?jiǎn)?dòng)項(xiàng)目加載hibernate的時(shí)候,會(huì)生成表。停止項(xiàng)目時(shí),會(huì)把生成的表刪除掉。
# update:常用屬性。每次加載hibernate的時(shí)候,會(huì)生成表。如果表存在,會(huì)根據(jù)模型的屬性變化來(lái)更新表結(jié)構(gòu),這個(gè)過(guò)程不會(huì)做刪表處理。
# validate:每次加載hibernate的時(shí)候,會(huì)檢查表結(jié)構(gòu),但不會(huì)生成表。

三、創(chuàng)建實(shí)體類,并使用注解進(jìn)行映射。

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
}

四、創(chuàng)建 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可以發(fā)現(xiàn),已經(jīng)封裝好了基本的增刪改查操作,直接使用即可。
JpaRepository.png
除了默認(rèn)提供的增刪改成之外,jpa 還提供了極其簡(jiǎn)便的方式來(lái)自定義查詢等方法(不需要編寫(xiě)任何sql語(yǔ)句):
如上面的 Person findByName(String name) 方法,JPA 會(huì)根據(jù)方法名(駝峰式),解析出相應(yīng)的sql語(yǔ)句進(jìn)行具體的查詢操作。
當(dāng)我們需要執(zhí)行復(fù)雜的語(yǔ)句的時(shí)候,我們還可以使用 @Query() 創(chuàng)建自定義sql語(yǔ)句查詢:
@Query("FROM Person p WHERE p.id=:id"),查詢語(yǔ)句與hibernate的HQL語(yǔ)句相同,可以通過(guò) :id 來(lái)綁定 @Param("id") 的參數(shù)。

五、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;
    }

}

訪問(wèn):http://localhost:8080/person 正確返回:
{"id":1,"name":"sam","age":25}
到此,基本完成了Spring Boot 集成 Spring-data-jpa 框架。
Spring-data-jpa 詳細(xì)使用請(qǐng)參考:Spring Data JPA 官方文檔

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容