1. 程式人生 > >springboot整合JPA(簡單整理,待續---)

springboot整合JPA(簡單整理,待續---)

整合步驟

引入依賴:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencie>

配置資料庫連線

spring.datasource.url=jdbc:mysql://localhost:3306/ssmweb?useSSL=false&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

編寫與表對應的實體類

import javax.persistence.*;
import java.io.Serializable;

@Entity
@Table(name = "dept")
public class Dept implements Serializable{

    @Id
    @GeneratedValue
    @Column(name = "dept_id")
    private Integer deptId;
    @Column(name = "dept_name")
    private String deptName;

   ......

    @Override
    
public String toString() { return "Dept{" + "deptId=" + deptId + ", deptName='" + deptName + '\'' + '}'; } }

編寫業務過程(controller,service,repository)

  repository:

import com.example.demo.entity.Dept;
import org.springframework.data.jpa.repository.JpaRepository;

public interface DeptRepository extends JpaRepository<Dept,Integer>{

}

  service:

import java.util.List;

@Service
public class DeptService {
    @Autowired
    DeptRepository deptRepository;

    public List<Dept> getAll(){
        return deptRepository.findAll();
    }
}

  controller:

import java.util.List;

@RestController
public class DeptController {
    @Autowired
    DeptService deptService;

    @GetMapping("/depts")
    public List<Dept> getAll(){
        return deptService.getAll();
    }
    
}

簡單測試

 

import com.example.demo.entity.Dept;
import com.example.demo.repository.DeptRepository;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.domain.Sort;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootjpademoApplicationTests {

    @Autowired
    DeptRepository deptRepository;

    @Test
    public void test01() {
        Sort sort = new Sort(Sort.Direction.DESC,"deptId");
        List<Dept> all = deptRepository.findAll(sort);
        for (Dept dept :all) {
            System.out.println(dept);
        }
    }
}

JPA介面

介面間關係

簡單測試

主要三個介面用法都相似,這裡主要用JpaRepository測試。

1.JpaRepository介面中List<T> findAllById(Iterable<ID> var1)(批量查詢)

 @Test
public void test02() {
    List<Integer> idList = new ArrayList<>();
    idList.add(1);
    idList.add(3);
    List<Dept> all = deptRepository.findAllById(idList);
    for (Dept dept :all) {
        System.out.println(dept);
    }
}

2.PagingAndSortingRepository介面中Page<T> findAll(Pageable var1),JpaRepository繼承PagingAndSortingRepository,所以可以使用父類的方法(分頁排序查詢)

@Test
    public void test03() {
        Sort sort = new Sort(Sort.Direction.DESC,"deptId");
        Pageable pageable = PageRequest.of(0,2,sort);
        Page<Dept> all = deptRepository.findAll(pageable);
        for (Dept dept :all) {
            System.out.println(dept);
        }
    }