科技

SpringBoot2.0 基礎案例(09):整合JPA持久層框架,簡化資料庫操作

一、JAP框架簡介

JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0後提出的Java持久化規範。主要是為了簡化持久層開發以及整合ORM技術,結束Hibernate、TopLink、JDO等ORM框架各自為營的局面。JPA是在吸收現有ORM框架的基礎上發展而來,易於使用,伸縮性強。

二、與SpringBoot2.0整合

1、核心依賴

org.springframework.boot

spring-boot-starter-data-jpa

2、配置檔案

spring:

application:

name: node09-boot-jpa

datasource:

url: jdbc:mysql://localhost:3306/data_jpa?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true

username: root

password: root

driver-class-name: com.mysql.jdbc.Driver

jpa:

hibernate:

ddl-auto: update

show-sql: true

ddl-auto幾種配置說明

1)create

每次載入hibernate時都刪除上一次的生成的表,然後根據bean類重新來生成新表,容易導致資料丟失,(建議首次建立時使用)。

2)create-drop

每次載入hibernate時根據bean類生成表,但是sessionFactory一關閉,表就自動刪除。

3)update

第一次載入hibernate時根據bean類會自動建立起表的結構,以後載入hibernate時根據bean類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。

4)validate

每次載入hibernate時,驗證建立資料庫表結構,只會和資料庫中的表進行比較,不會建立新表,但是會插入新值。

3、實體類物件

就是根據這個物件生成的表結構。

@Table(name = "t_user")

@Entity

public class User {

@Id

@GeneratedValue

private Integer id;

@Column

private String name;

@Column

private Integer age;

// 省略 GET SET

}

4、JPA框架的用法

定義物件的操作的介面,繼承JpaRepository核心介面。

import com.boot.jpa.entity.User;

import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.data.jpa.repository.Query;

import org.springframework.data.repository.query.Param;

import org.springframework.stereotype.Repository;

@Repository

public interface UserRepository extends JpaRepository {

// 但條件查詢

User findByAge(Integer age);

// 多條件查詢

User findByNameAndAge(String name, Integer age);

// 自定義查詢

@Query("from User u where u.name=:name")

User findSql(@Param("name") String name);

}

5、封裝一個服務層邏輯

import com.boot.jpa.entity.User;

import com.boot.jpa.repository.UserRepository;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service

public class UserService {

@Resource

private UserRepository userRepository ;

// 儲存

public void addUser (User user){

userRepository.save(user) ;

}

// 根據年齡查詢

public User findByAge (Integer age){

return userRepository.findByAge(age) ;

}

// 多條件查詢

public User findByNameAndAge (String name, Integer age){

return userRepository.findByNameAndAge(name,age) ;

}

// 自定義SQL查詢

public User findSql (String name){

return userRepository.findSql(name) ;

}

// 根據ID修改

public void update (User user){

userRepository.save(user) ;

}

//根據id刪除一條資料

public void deleteStudentById(Integer id)

三、測試程式碼塊

import com.boot.jpa.JpaApplication;

import com.boot.jpa.entity.User;

import com.boot.jpa.service.UserService;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

@RunWith(SpringJUnit4ClassRunner.class)

@SpringBootTest(classes = JpaApplication.class)

public class UserJpaTest {

@Resource

private UserService userService ;

@Test

public void addUser (){

User user = new User() ;

user.setName("知了一笑");

user.setAge(22);

userService.addUser(user);

User user1 = new User() ;

user1.setName("cicada");

user1.setAge(23);

userService.addUser(user1);

}

@Test

public void findByAge (){

Integer age = 22 ;

// User{id=3, name='知了一笑', age=22}

System.out.println(userService.findByAge(age));

}

@Test

public void findByNameAndAge ()

@Test

public void findSql (){

// User{id=4, name='cicada', age=23}

System.out.println(userService.findSql("cicada"));

}

@Test

public void update (){

User user = new User() ;

// 如果這個主鍵不存在,會以主鍵自增的方式新增入庫

user.setId(3);

user.setName("哈哈一笑");

user.setAge(25);

userService.update(user) ;

}

@Test

public void deleteStudentById (){

userService.deleteStudentById(5) ;

}

}

四、原始碼地址

GitHub地址:知了一笑

https://github.com/cicadasmile/spring-boot-base

碼雲地址:知了一笑

https://gitee.com/cicadasmile/spring-boot-base

Reference:科技日報

看更多!請加入我們的粉絲團

轉載請附文章網址

不可錯過的話題