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

知了一笑發表於2020-01-01

本文原始碼: GitHub·點這裡 || GitEE·點這裡

一、JAP框架簡介

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

二、與SpringBoot2整合

1、核心依賴

<!-- JPA框架 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

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,Integer> {
    // 但條件查詢
    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){
        userRepository.deleteById(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 (){
        System.out.println(userService.findByNameAndAge("cicada",23));
    }
    @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
GitEE·地址
https://gitee.com/cicadasmile/spring-boot-base

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957347/viewspace-2671548/,如需轉載,請註明出處,否則將追究法律責任。

相關文章