實(shí)際開發(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)封裝好了基本的增刪改查操作,直接使用即可卿啡。
除了默認(rèn)提供的增刪改成之外吟吝,jpa 還提供了極其簡(jiǎn)便的方式來(lái)自定義查詢等方法(不需要編寫任何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)注明出處俗或。