JPA Java Persistence API - Spring JPA.pdf · JPA Java Persistence API. JPA JPA...

11
ธีระยุทธ ทองเครือ JPA Java Persistence API

Transcript of JPA Java Persistence API - Spring JPA.pdf · JPA Java Persistence API. JPA JPA...

Page 1: JPA Java Persistence API - Spring JPA.pdf · JPA Java Persistence API. JPA JPA เป็นมาตรฐานใน Java EE ที่กาหนด (specification) วิธีการ

ธระยทธ ทองเครอ

JPA

Java Persistence API

Page 2: JPA Java Persistence API - Spring JPA.pdf · JPA Java Persistence API. JPA JPA เป็นมาตรฐานใน Java EE ที่กาหนด (specification) วิธีการ

JPAJPA เปนมาตรฐานใน Java EE ทก าหนด (specification) วธการ mapping ระหวาง

object และขอมลในฐานขอมล (ORM: Object/Relation Mapping) แบบอตโนมต

JPA ชวยใหนกพฒนาสามารถจดการกบขอมลใน object เพยงอยางเดยว โดยไมตองใชค าสง SQL ชวยใหนกพฒนาเขยนโคดนอยลง

ไลบรารท implement ตามมาตรฐาน JPA มชอวา "Hibernate"

2

Page 3: JPA Java Persistence API - Spring JPA.pdf · JPA Java Persistence API. JPA JPA เป็นมาตรฐานใน Java EE ที่กาหนด (specification) วิธีการ

Spring DataSpring Data คอ Framework ส าหรบเขาถงขอมลทครอบคลมทงฐานขอมลแบบ

relational และ non-relational, map-reduce frameworks และบรการบน cloud-based คณสมบตของ Spring Data

การจบค Java Object กบโครงสรางในฐานขอมลแบบอตโนมต สรางและประมวลผล SQL แบบอตโนมตตามทนกพฒนาก าหนด

โมดลหลกของ Spring Data Spring Data Commons สวนแกนหลกของ Spring Data ทกชนด Spring Data JPA ใชสรางโมดลจดการฐานขอมลแบบ relational database Spring Data KeyValue ใชสรางโมดลจดการฐานขอมลแบบ Map-base Spring Data LDAP ใชสรางโมดลจดการฐานขอมลผใช Spring Data MongoDB ใชสรางโมดลจดการฐานขอมลแบบ non-relational ชอ MongoDB

3

Page 4: JPA Java Persistence API - Spring JPA.pdf · JPA Java Persistence API. JPA JPA เป็นมาตรฐานใน Java EE ที่กาหนด (specification) วิธีการ

Spring Data JPA

4

Spring Data

JPA

Hibernate

JDBC

Database

Spring Data JPA เปนชด Library ทชวยอ านวยความสะดวกในการใชงาน JPA มลกษณะเปน Interface-based programming model กลาวคอ ไมตอง implement โคด แตใชการก าหนด Query จากชอ method ใน interface แทน

Page 5: JPA Java Persistence API - Spring JPA.pdf · JPA Java Persistence API. JPA JPA เป็นมาตรฐานใน Java EE ที่กาหนด (specification) วิธีการ

Entity Class (หรอ JavaBean)

5

@Entitypublic class Customer {

@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private Integer id;private String firstName;private String lastName;

// Getter and Setter Method}

Entity Class คอ คลาส JPA ใชเปนตวแทนตารางหนงในฐานขอมล @Id ใชระบวาเปน Primary Key @GeneratedValue ระบวาใหรนคา

Primary คยแบบอตโนมต

Entity Class เปนคลาสทมคณสมบตเชนเดยวกบ JavaBeans แตกตางกนท จะตองมการก าหนด Annotation

การตงชอตวแปรจะตองอยในรปแบบ camelCase สวนชอคอลมนจะอยในรปแบบ snake_case

ชนดขอมลของตวแปรในคลาสควรเปนคลาส เชน ใช Integer แทน int

ตาราง Customer ทจบคกบคลาส Customer

Page 6: JPA Java Persistence API - Spring JPA.pdf · JPA Java Persistence API. JPA JPA เป็นมาตรฐานใน Java EE ที่กาหนด (specification) วิธีการ

การก าหนดชอตารางและคอลมนดวยตนเองหากตองการก าหนดชอตาราง ทแตกตางจากชอคลาส จะใช

@Entity (name="ชอตาราง")ก าหนดชอคอลมนทไมใชชอเดยวกบ attribute

@Column(name="ชอคอลมน")

6

@Data@Entity (name="tbl_customer")public class Customer {

@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private Integer id;

@Column(name="fname")private String firstName;

@Column(name="lname")private String lastName;

}

Page 7: JPA Java Persistence API - Spring JPA.pdf · JPA Java Persistence API. JPA JPA เป็นมาตรฐานใน Java EE ที่กาหนด (specification) วิธีการ

Repository Class (หรอ DAO)

7

@Repositorypublic class CustomerRepository {

@PersistenceContextprivate EntityManager entityManager; // ใชเรยกเมธอดจดการฐานขอมล ทสรางมาใหแลว

public List<Customer> findAll() {Query query = entityManager.createQuery("from Customer"); // สรางค าสง SELECT ขอมลจากตาราง customerreturn query.getResultList(); // ดงรายการผลลพธจากการ Query สงกลบ

}

public Customer findById(Integer id) {return entityManager.find(Customer.class, id); // คนหา Customer ตาม id

}

@Transactionalpublic Customer save(Customer customer) {

entityManager.persist(customer); // insert กรณไมมคา id ใน object หรอ update กรณมคา id ใน object return customer;

}

@Transactionalpublic void delete(Integer id) {

Customer customer = entityManager.find(Customer.class, id); // คนหาตาม id ทตองการลบentityManager.remove(customer); // เรมลบจรง

}}

Page 8: JPA Java Persistence API - Spring JPA.pdf · JPA Java Persistence API. JPA JPA เป็นมาตรฐานใน Java EE ที่กาหนด (specification) วิธีการ

Spring JPA Name Query

8

public Employee findByLastName(String lastName) {

Query query = entityManager.createQuery("from Employee e where e.lastName = :LAST_NAME");

query.setParameter("LAST_NAME", lastName);

List resultList = query.getResultList();

return resultList.isEmpty() ? null : (Employee) resultList.get(0);

}

การนยามค าสง SQL ทนอกเหนอจากเมธอดท JPA ไดใหมา ใชรปแบบดงตวอยาง ซงเปนการก าหนดเงอนไข โดยไมระบวาตองการคอลมนใด ซงจะไดขอมลทกคอลมนเกบลงใน object

Page 9: JPA Java Persistence API - Spring JPA.pdf · JPA Java Persistence API. JPA JPA เป็นมาตรฐานใน Java EE ที่กาหนด (specification) วิธีการ

Spring JPA Native Query

9

public List<Employee> findAllByNativeQuery() {

Query nativeQuery = entityManager.createNativeQuery("select id, first_name, last_name

from employee", Employee.class);

return nativeQuery.getResultList();

}

หากตองการนยามค าสง SQL เองทงหมด ทนอกเหนอจากเมธอดท JPA ก าหนด ใชรปแบบดงตวอยาง

Page 10: JPA Java Persistence API - Spring JPA.pdf · JPA Java Persistence API. JPA JPA เป็นมาตรฐานใน Java EE ที่กาหนด (specification) วิธีการ

ตวอยางการใช count(*)

10

public BigInteger count() {Query nativeQuery = entityManager.createNativeQuery("select count(*) from customer");

return (BigInteger)nativeQuery.getSingleResult();}

Page 11: JPA Java Persistence API - Spring JPA.pdf · JPA Java Persistence API. JPA JPA เป็นมาตรฐานใน Java EE ที่กาหนด (specification) วิธีการ

กจกรรมระบบแสดงความคดเหนจากผใชตองการเกบขอมล ทมโครงสรางดงน

จงสราง Entity Class ชอ Forum และ Repository เพอใชจดการขอมลโดยใช Spring Data JPA

ทดสอบการท างาน ดงน เพมขอมล แสดงขอมลทงหมดทเพมไปแลว เพมจ านวน Love

11

ชอฟลด ค าอธบาย ชนดขอมล หมายเหตid รหสความคดเหน INT คยหลก แบบเพมคาอตโนมตdetail ความคดเหน VARCHARauthor ผเขยน VARCHARlove จ านวนผชนชอบ INTpost_date วนทแสดงความคดเหน DATETIME ใชคลาส LocalDateTime