เกี่ยวกับข้อมูลฤดูใบไม้ผลิ
โครงการชั้นนำในชุมชนฤดูใบไม้ผลิส่วนใหญ่จะใช้เพื่อทำให้ข้อมูลง่ายขึ้น (เชิงสัมพันธ์และไม่สัมพันธ์) หากเราใช้ข้อมูลฤดูใบไม้ผลิเพื่อพัฒนาโปรแกรมเราสามารถบันทึกการดำเนินการเข้าถึงข้อมูลระดับต่ำจำนวนมากเช่นการเขียนคำสั่งการสืบค้นข้อมูลคลาส DAO ฯลฯ เราจำเป็นต้องเขียนอินเทอร์เฟซนามธรรมและกำหนดการดำเนินการที่เกี่ยวข้อง ฤดูใบไม้ผลิจะสร้างอินสแตนซ์พร็อกซีระหว่างการดำเนินการเพื่อใช้งานการดำเนินการที่กำหนดไว้ในส่วนต่อประสานของเรา
เกี่ยวกับโครงการย่อยข้อมูลฤดูใบไม้ผลิ
ข้อมูลฤดูใบไม้ผลิมีโครงการย่อยมากมายนอกเหนือจากข้อมูลฤดูใบไม้ผลิ JPA แล้วยังมีโครงการย่อยต่อไปนี้
ข้อมูลฤดูใบไม้ผลิคอมมอนส์
สปริงข้อมูล mongoDB
ข้อมูลฤดูใบไม้ผลิ redis
Spring Data Solr
สปริงข้อมูล gemfire
การพักข้อมูลฤดูใบไม้ผลิ
ข้อมูลฤดูใบไม้ผลิ neo4j
เกี่ยวกับ Spring Data JPA
Spring Data JPA เป็นโครงการย่อยของข้อมูลสปริง ส่วนใหญ่จะใช้เพื่อทำให้การใช้งานเลเยอร์การเข้าถึงข้อมูลง่ายขึ้น การใช้ Spring Data JPA คุณสามารถใช้งานเพิ่มเติมการลบการดัดแปลงการปนเปื้อนการเรียงลำดับ ฯลฯ ได้อย่างง่ายดาย
ตัวอย่าง Spring Boot + Spring Data JPA
1. เพิ่มไฟล์ pom.xml
ดังที่แสดงด้านล่าง:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" <Sersion> 0.0.1-SNAPSHOT </เวอร์ชัน> <packaging> jar </packaging> <name> Spring-Data-JPA- ตัวอย่าง </name> <scription> โครงการสาธิตสำหรับการบูตฤดูใบไม้ผลิ </คำอธิบาย> <carent> <roupid> org.springframework.boot <Sersion> 1.4.4.Release </เวอร์ชัน> <inelypath/> <!-การค้นหาผู้ปกครองจากที่เก็บ-> </parent> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <java.version> 1.7 </java.version> </premerties> <การพึ่งพา> <การพึ่งพา> <roupId> org.springframework.boot </groupid> <ratifactid> Spring-Boot-Starter-Data-JPA </artifactid> <ArtIfactId> Spring-Boot-Starter-WEB </artifactId> </dercendency> <การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> ฤดูใบไม้ผลิ-การทดสอบการทดสอบ </artifactid> <scope> <ArtIfactId> mysql-connector-java </artifactid> </การพึ่งพาอาศัย> <การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Cache </artifactid> <ArtIfactId> Spring-Boot-Maven-Plugin </artifactid> </plugin> </plugins> </uffer
ในหมู่พวกเขาผู้ปกครองสปริง-สตาร์สตาร์สตาร์จะโหลดการกำหนดค่าเริ่มต้นทั้งหมดที่ต้องการโดยแอปพลิเคชันสปริงบูต
Spring-Boot-Starter-Data-JPA จะดาวน์โหลดการอ้างอิงทั้งหมดที่ต้องการโดย Spring Data JPA;
เพิ่ม Spring-Boot-Starter-Web เนื่องจากโครงการของเราเป็นเว็บแอปพลิเคชัน
นอกจากนี้ฐานข้อมูลของเราคือ MySQL ดังนั้นจึงจำเป็นต้องมีการพึ่งพา MySQL-connector-Java
เนื่องจากใช้แคชให้เพิ่มการพึ่งพาสปริง-สตาร์เทอร์-แคช
2. ผู้ใช้งานเขียนเอนทิตี
แพ็คเกจ com.example.domain; นำเข้า java.io.serializable; นำเข้า Javax.persistence.column; นำเข้า Javax.persistence.entity; นำเข้า Javax.persistence.id; นำเข้า Javax.persistence.namedQuery; ผู้ใช้ในชั้นเรียนใช้ serializable {ส่วนตัวคงที่สุดท้าย Long SerialVersionUID = 1L; @id id ยาว; @column (name = "name") ชื่อสตริง; @column (name = "ที่อยู่") ที่อยู่สตริง; Public Long getId () {return id; } โมฆะสาธารณะ setId (Long id) {this.id = id; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } สตริงสาธารณะ getAddress () {return address; } โมฆะสาธารณะ setAddress (ที่อยู่สตริง) {this.address = ที่อยู่; -ไม่มีอะไรจะพูด ให้ความสนใจกับคำอธิบายประกอบ @NamedQuery ที่นี่ มันหมายความว่าวิธีการค้นหาชื่อที่เรากำหนดในอินเทอร์เฟซที่เก็บไม่ได้ใช้การใช้งานการสืบค้นเริ่มต้น แต่แทนที่จะใช้คำสั่งแบบสอบถามที่กำหนดเองนี้เพื่อสอบถาม หากไม่มีคำอธิบายประกอบที่นี่จะมีการใช้งานเริ่มต้น
3. เขียนอินเทอร์เฟซที่เก็บข้อมูล
ที่นี่เราจะเขียนอินเทอร์เฟซที่เก็บสองตัวซึ่งใช้สำหรับตัวอย่างเท่านั้นและสามารถรวมเข้ากับหนึ่งในทางปฏิบัติ:
userjparepository
แพ็คเกจ com.example.repository; นำเข้า org.springframework.data.jpa.repository.jparepository; นำเข้า com.example.domain.user; อินเตอร์เฟสสาธารณะ userjparepository ขยาย jparepository <ผู้ใช้ยาว> {} {}อินเทอร์เฟซ UserJParePository ที่นี่ใช้อินเตอร์เฟส JParePository;
ในความเป็นจริง JParePository ใช้อินเทอร์เฟซ pagingandsortingRepository, pagingandsortingRepository อินเตอร์เฟสใช้อินเตอร์เฟส crudrepository และอินเตอร์เฟส crudrepository ใช้อินเตอร์เฟสที่เก็บ
คำอธิบายสั้น ๆ :
อินเทอร์เฟซที่เก็บเป็นอินเทอร์เฟซการระบุตัวตนและว่างเปล่าภายใน
อินเทอร์เฟซ crudrepository กำหนดวิธีการเพิ่มการลบการแก้ไขและการค้นหา
อินเทอร์เฟซ PagingandsortingRepository ใช้สำหรับการเพจและการเรียงลำดับ
เนื่องจากอินเทอร์เฟซ JParePository สืบทอดส่วนต่อประสานทั้งหมดข้างต้นจึงมีวิธีการทั้งหมดที่ประกาศโดยพวกเขา;
นอกจากนี้โปรดทราบว่าการใช้วิธีการค้นหาเป็นตัวอย่างอินเตอร์เฟส JParePository ส่งคืนรายการ PagingandsortingRepository และ Crudrepository returt iterator;
การใช้ประโยชน์
แพ็คเกจ com.example.repository; นำเข้า java.util.list; นำเข้า org.springframework.data.jpa.repository.query; นำเข้า org.springframework.data.repository.Repository; อินเตอร์เฟส userRepository ขยายที่เก็บ <ผู้ใช้ยาว> {รายการ <user> findByNameAndaddress (ชื่อสตริงที่อยู่สตริง); @Query (value = "จากผู้ใช้ u โดยที่ u.name =: name") รายการ <user> findByName1 (@param ("ชื่อ") ชื่อสตริง); @Query (value = "เลือก * จาก #{ #entityName} u โดยที่ u.name =? 1", nativeQuery = true) รายการ <user> findByName2 (ชื่อสตริง); รายการ <user> findByName (ชื่อสตริง);}อินเทอร์เฟซ UserRepository ที่นี่ส่วนใหญ่กำหนดวิธีการสืบค้นบางอย่าง
ตัวอย่างเช่นเราสามารถดำเนินการโดยตรงโดยไม่ต้องกำหนดคำสั่งค้นหาอื่น ๆ ที่นี่ Spring Data JPA จะใช้วิธีการโดยอัตโนมัติตามชื่อแอตทริบิวต์และชื่อวิธีของคลาสเอนทิตี PS: เนื่องจากเราประกาศคำอธิบายประกอบ @NamedQuery ในคลาสเอนทิตีในความเป็นจริงวิธี FindByName จะใช้คำสั่งแบบสอบถามที่มีคำอธิบายประกอบโดยคำอธิบายประกอบ @NamedQuery เพื่อสอบถาม;
นอกจากนี้เมธอด findByName1 ที่นี่ใช้คำสั่ง HQL
เมธอด findByName2 ใช้แบบสอบถามคำสั่ง SQL ดั้งเดิม
4. เขียนบริการ
อินเทอร์เฟซบริการ:
แพ็คเกจ com.example.service; นำเข้า java.util.list; นำเข้า com.example.domain.user; อินเทอร์เฟซสาธารณะ iuserservice {รายการสาธารณะ <user> findall (); โมฆะสาธารณะ SaveUser (หนังสือผู้ใช้); Findone ผู้ใช้สาธารณะ (Long ID); โมฆะสาธารณะลบ (Long ID); รายการสาธารณะ <user> findByName (ชื่อสตริง);}คลาสการใช้งานอินเตอร์เฟส:
แพ็คเกจ com.example.service.impl; นำเข้า java.util.list; นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.cache.annotation.cacheable; org.springframework.transaction.annotation.transactional; นำเข้า com.example.domain.user; นำเข้า com.example.Repository.userRepository; นำเข้า com.example.Repository.userjparepository; @autoWired Userparepository userjparepository; @autowired UserRepository UserRepository; รายการสาธารณะ <user> findall () {return userjparepository.findall (); } รายการสาธารณะ <user> findByName (ชื่อสตริง) {รายการ <erer> userlist1 = userRepository.findByName1 (ชื่อ); รายการ <user> userlist2 = userRepository.findByName2 (ชื่อ); รายการ <user> userlist3 = userrepository.findbynameandDaddress (ชื่อ, "3"); System.out.println ("userlist1:" + userlist1); System.out.println ("userlist2:" + userlist2); System.out.println ("userlist3:" + userlist3); ส่งคืน userrepository.findbyName (ชื่อ); } โมฆะสาธารณะ SaveUser (หนังสือผู้ใช้) {userjparepository.save (หนังสือ); } @Cacheable ("ผู้ใช้") FindOne ผู้ใช้สาธารณะ (Long ID) {System.out.println ("หน้าแคช"); ส่งคืน userjparepository.findone (id); } โมฆะสาธารณะ DELETE (Long ID) {userJParePository.delete (ID); -ไม่มีอะไรจะพูดเกี่ยวกับเรื่องนี้เพียงแค่เรียกใช้วิธีอินเตอร์เฟสที่เก็บ
5. เขียนคอนโทรลเลอร์
ไม่มีอะไรจะพูดเกี่ยวกับคอนโทรลเลอร์เพียงโทรหาบริการ โปรดทราบว่าคอนโทรลเลอร์ที่นี่มีคำอธิบายประกอบโดยใช้คำอธิบายประกอบ @RestController และชื่อเส้นทาง URL นั้นมีชื่อตามสไตล์การพักผ่อน
แพ็คเกจ com.example.web; นำเข้า java.util.list; นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.web.bind.annotation.pathvariable; org.springframework.web.bind.annotation.restcontroller; นำเข้า com.example.domain.user; นำเข้า com.example.service.iuserservice;@restcontroller@requestmapping (value = "/users") ชั้นเรียนสาธารณะ @RequestMapping (value = "/add/{id}/{name}/{address}") ผู้ใช้ Public Adduser (@PathVariable Int ID, @PathVariable String ชื่อ, @PathVariable String address) {ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); user.setId (id); user.setName (ชื่อ); user.setAddress (ที่อยู่); userservice.saveuser (ผู้ใช้); ผู้ใช้ส่งคืน; } @RequestMapping (value = "/ลบ/{id}") โมฆะสาธารณะ deleteBook (@PathVariable ID ID) {UserserVice.Delete (id); } @RequestMapping (value = "/") รายการสาธารณะ <user> getBooks () {return userservice.findall (); } @RequestMapping (value = "/{id}") ผู้ใช้สาธารณะ getUser (@PathVariable ID ID) {ผู้ใช้ผู้ใช้ = UserserVice.Findone (ID); ผู้ใช้ส่งคืน; } @RequestMapping (value = "/search/name/{name}") รายการสาธารณะ <user> getBookByName (@PathVariable ชื่อสตริง) {รายการ <ผู้ใช้> ผู้ใช้ = userserVice.FindByName (ชื่อ); ผู้ใช้ที่ส่งคืน; -6. กำหนดค่าแหล่งข้อมูล
เพิ่มการกำหนดค่าต่อไปนี้ในไฟล์ Application.properties:
Spring.jpa.show-sql = truelogging.level.org.springframework.data = debugspring.jpa.hibernate.ddl-auto = spring.datasource.url = jdbc: mysql: // localhost: 33 06/demospring.datasource.username = rootspring.datasource.password = rootspring.datasource.driver-class-name = com.mysql.jdbc.driver
หากคุณใช้ STS IDE การกำหนดค่าแอตทริบิวต์เหล่านี้จะได้รับแจ้งโดยอัตโนมัติดังนั้นคุณสามารถบันทึกการค้นหา
หากคุณต้องการดูการกำหนดค่าของ Spring.Datasource คุณสามารถอ้างอิงคลาสนี้: DataSourceProperties.java
7. เขียนคลาสเริ่มต้น
มันค่อนข้างง่าย โปรดทราบว่าระดับแพ็คเกจที่คลาสนี้เป็นของควรมากกว่าหรือเท่ากับคลาสอื่น ๆ เพื่อให้แน่ใจว่าสามารถสแกนคำอธิบายประกอบของคลาสอื่นได้
แพ็คเกจ com.example; นำเข้า org.springframework.boot.springapplication; นำเข้า org.springframework.boot.autoconfigure.springbootapplication; นำเข้า org.springframework.cache.annotation.enablecaching; เป็นโมฆะหลัก (สตริง [] args) {springapplication.run (springdatajpaexampleapplication.class, args); -เรียกใช้และทดสอบโปรแกรม
เริ่มต้นวิธีการหลักหรือพิมพ์ลงในแพ็คเกจ JAR เพื่อเรียกใช้
ป้อน URL ต่อไปนี้ในเบราว์เซอร์และทดสอบ:
http: // localhost: 8080/ผู้ใช้/
http: // localhost: 8080/ผู้ใช้/เพิ่ม/100/110/111
http: // localhost: 8080/ผู้ใช้/ลบ/100
http: // localhost: 8080/ผู้ใช้/2
http: // localhost: 8080/ผู้ใช้/ค้นหา/ชื่อ/2
ซอร์สโค้ดโปรแกรม
https://github.com/peterchenhdu/spring-data-jpa-example
การอ้างอิง
http://docs.spring.io/spring-data/jpa/docs/1.11.0.release/reference/html/
http://javabeat.net/spring-data-jpa/
https://spring.io/guides/gs/caching/
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น