jpa java persistence api - spring jpa.pdf · jpa java persistence api. jpa jpa...
TRANSCRIPT
ธระยทธ ทองเครอ
JPA
Java Persistence API
JPAJPA เปนมาตรฐานใน Java EE ทก าหนด (specification) วธการ mapping ระหวาง
object และขอมลในฐานขอมล (ORM: Object/Relation Mapping) แบบอตโนมต
JPA ชวยใหนกพฒนาสามารถจดการกบขอมลใน object เพยงอยางเดยว โดยไมตองใชค าสง SQL ชวยใหนกพฒนาเขยนโคดนอยลง
ไลบรารท implement ตามมาตรฐาน JPA มชอวา "Hibernate"
2
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
Spring Data JPA
4
Spring Data
JPA
Hibernate
JDBC
Database
Spring Data JPA เปนชด Library ทชวยอ านวยความสะดวกในการใชงาน JPA มลกษณะเปน Interface-based programming model กลาวคอ ไมตอง implement โคด แตใชการก าหนด Query จากชอ method ใน interface แทน
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
การก าหนดชอตารางและคอลมนดวยตนเองหากตองการก าหนดชอตาราง ทแตกตางจากชอคลาส จะใช
@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;
}
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); // เรมลบจรง
}}
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
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 ก าหนด ใชรปแบบดงตวอยาง
ตวอยางการใช count(*)
10
public BigInteger count() {Query nativeQuery = entityManager.createNativeQuery("select count(*) from customer");
return (BigInteger)nativeQuery.getSingleResult();}
กจกรรมระบบแสดงความคดเหนจากผใชตองการเกบขอมล ทมโครงสรางดงน
จงสราง Entity Class ชอ Forum และ Repository เพอใชจดการขอมลโดยใช Spring Data JPA
ทดสอบการท างาน ดงน เพมขอมล แสดงขอมลทงหมดทเพมไปแลว เพมจ านวน Love
11
ชอฟลด ค าอธบาย ชนดขอมล หมายเหตid รหสความคดเหน INT คยหลก แบบเพมคาอตโนมตdetail ความคดเหน VARCHARauthor ผเขยน VARCHARlove จ านวนผชนชอบ INTpost_date วนทแสดงความคดเหน DATETIME ใชคลาส LocalDateTime