Tải bản đầy đủ (.pdf) (39 trang)

Slide 5 jparepository 1 (1)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.64 MB, 39 trang )

Conceive Design Implement Operate

JPAREPOSITORY API
GIẢNG VIÊN:


AGENDA

JPAREPOSITORY API
GIỚI THIỆU CSDL MẪU J5SHOP
TẠO CÁC LỚP THỰC THỂ
SƠ ĐỒ PHÂN CẤP THỪA KẾ JPAREPOSITORY
TẠO CÁC DAO LÀM VIỆC VỚI J5SHOP
XÂY DỰNG ỨNG DỤNG CRUD

SẮP XẾP VÀ PHÂN TRANG VỚI JPAREPOSITORY
TRUY VẤN CÓ SẮP XẾP
TRUY VẤN CÓ PHÂN TRANG
SẮP XẾP VÀ PHÂN TRANG SẢN PHẨM



CSDL J5SHOP


CSDL J5SHOP



POM.XML - THƯ VIỆN CẦN THIẾT



APPLICATION.PROPERTIES - THÔNG SỐ KẾT NỐI CSDL
spring.datasource.url=<dburl>
spring.datasource.username=<username>
spring.datasource.password=
spring.datasource.driverClassName=<driver>
spring.jpa.hibernate.dialect=<dialect>
spring.jpa.hibernate.ddl-auto=<none|create|create-drop|validate|update>
spring.jpa.show-sql=<true|false>
spring.jpa.properties.hibernate.format_sql=<true|false>



ENTITY RELATIONAL DIAGRAM

Product

Id: Integer
Name: String
Image: String
Price: Double
Quantity: Integer
CreateDate: Date
CategoryId: String
Available: Boolean

Username: String
Fullname: String
Password: String
Email: String

Photo: String
Activated: Boolean
Admin: Boolean

Id: Long
Username: String
CreateDate: Date
Address: String

Id: Long
OrderId: Long
ProductId: Integer
Price: Double
Quantity: Integer












Account

Id: String
Name: String


Order

OrderDetail

Category

@Entity
@Table
@UniqueConstraint
@Column
@Id
@GeneratedValue
@Temporal
@OneToMany
@ManyToOne
@JoinColumn


ERD - ENTITY RELATIONAL DIAGRAM
Category

@OneToMany(mappedBy=“category”)
List<Product> products
@OneToMany

1. @ManyToOne
Thay foreign key bằng entity

Product


@ManyToOne

2. @OneToMany
Map mới @ManyToOne


@ManyToOne
@JoinColumn(name=“categoryid”)
Category category


ORDERDETAIL ENTITY CLASS

❑ @Entity
❑ @Table
❑ @UniqueConstraint
❑ @Id
❑ @GeneratedValue
❑ @Column
❑ @ManyToOne
❑ @JoinColumn


ORDER ENTITY CLASS

❑@Temporal
❑@OneToMany




JPAREPOSITORY INHERITANCE HIERARCHY
<<Interface>>
Repository

<<Interface>>
CrudRepository

<<Interface>>
PagingAndSortingRepository

<<Interface>>
JpaRepository

<<Class>>
SimpleJpaRepository

❑Thông qua sơ đồ phân cấp thừa kế này, có
2 lựa chọn để lập trình với JpaRepository
1. Sử dụng SimpleJpaRepository.
2. Xây dựng lớp DAO implements JpaRepository

❑Với Spring Boot, thay vì xây dựng các lớp
DAO, ta chỉ việc tạo các interface thừa kế từ
JpaRepository và viết thêm các phương
thức truy vấn cần thiết, hệ thống sẽ tự
động tạo các Spring Bean thực thi theo
interface của chúng ta.



JPAREPOSITORY API DETAIL
<<Interface>>
CrudRepository<T, ID>
<S extends T> S save(S entity)
void delete(T entity)
T getOne(ID id)
Optional<T> findById(ID id)
Iterable<T> findAll()
Long count()
boolean exists(ID id)

<<Interface>>
JpaRepository<T, ID>
List<T> findAll()
List<T> findAll(Sort sort)
List<T> save(Iterable<? extends T> entities)
void flush()
T saveAndFlush(T entity)
void deleteInBatch(Iterable<T> entities)

❑Generic Types
<<Interface>>
PagingAndSortingRepository<T, ID>
Iterable<T> findAll(Sort sort)
Page<T> findAll(Pageable pageable)

❖T: Entity Class
❖ID: Primary Key Class



CRUDREPOSITORY<T, ID> API
❑<S extends T> S save(S entity)
❖Tạo mới hoặc update nếu entity đã tồn tại

❑void delete(T entity), deleteById(ID id)
❖Xóa thực thể

❑T getOne(ID id), Optional<T> findById(ID id)
❖Truy vấn thực thể theo id

❑Iterable<T> findAll()
❖Truy vấn tất cả thực thể

❑Long count()
❖Lấy số lượng của tất cả thực thể

❑boolean exists(ID id)
❖Kiểm tra sự tồn tại theo id


PAGINGANDSORTINGREPOSITORY<T, ID> API
❑Iterable<T> findAll(Sort sort)
❖Truy vấn tất cả có sắp xếp

❑Page<T> findAll(Pageable pageable)
❖Truy vấn phân trang có sắp xếp

<<Interface>>
CrudRepository


❑Trong đó:
❖Sort
➢ Cung cấp tiêu chí sắp xếp

<<Interface>>
PagingAndSortingRepository

❖Pageable
➢ Cung cấp tiêu chí sắp xếp và phân trang (nếu cần)

❖Page
➢ Chứa dữ liệu của trang đã được truy vấn và các thông số kết quả phân trang


JPAREPOSITORY<T, ID> API
❑List<T> findAll()
❖Truy vấn tất cả

❑List<T> findAll(Sort sort)
❖Truy vấn tất cả có sắp xếp

<<Interface>>
CrudRepository

❑List<T> save(Iterable<? extends T> entities)
❖Lưu (tạo hoặc cập nhật) nhiều thực thể

❑void flush()

<<Interface>>

PagingAndSortingRepository

❖Đồng bộ với CSDL

❑T saveAndFlush(T entity)
❖Lưu và đồng bộ với CSDL

❑void deleteInBatch(Iterable<T> entities)
❖Xóa nhiều thực thể

<<Interface>>
JpaRepository



CÁCH 1: SỬ DỤNG SIMPLEJPAREPOSITORY<T, ID>

implements

<<Interface>>
JpaRepository<T, ID>

<<Class>>
SimpleJpaRepository<T, ID>

❑SimpleJpaRepository(Class<Entity>, EntityManager)
❖Phương thức khởi dựng này tạo một đối tượng DAO tương ứng với một
Entity. Từ đó có thể gọi các phương thức phù hợp để làm việc với CSDL.



CÁCH 2: KẾ THỪA JPAREPOSITORY<T, ID>

extends

<<Interface>>
JpaRepository<T, ID>

<<Interface>>
XyzDAO



J5SHOP REPOSITORY CLASS DIAGRAM

<Category, String>

<Product, Integer>

<OrderDetail, Long>

<Order, Long>

<Account, String>

<<Interface>
CategoryDAO

<<Interface>
ProductDAO


<<Interface>
OrderDetail
DAO

<<Interface>
OrderDAO

<<Interface>
AccountDAO

<<Interface>
JpaRepository<T, ID>


J5SHOP REPOSITORY IMPLEMENTATION
public interface CategoryDAO extends JpaRepository<Category, String>{}
public interface ProductDAO extends JpaRepository<Product, Integer>{}

public interface AccountDAO extends JpaRepository<Account, String>{}
public interface OrderDAO extends JpaRepository<Order, Long>{}

public interface OrderDetailDAO extends JpaRepository<OrderDetail, Long>{}


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×