Tentang data pegas
Proyek teratas dalam komunitas musim semi terutama digunakan untuk menyederhanakan akses data (relasional & non-relasional). Jika kami menggunakan data pegas untuk mengembangkan program, kami dapat menyimpan banyak operasi akses data tingkat rendah, seperti menulis pernyataan kueri data, kelas DAO, dll. Kami hanya perlu menulis beberapa antarmuka abstrak dan menentukan operasi terkait. Spring akan membuat instance proxy selama operasi untuk mengimplementasikan operasi yang ditentukan dalam antarmuka kami.
Tentang Subproyik Data Musim Semi
Data pegas memiliki banyak sub-proyek, di samping data pegas JPA, ada juga sub-proyek berikut.
Data Spring Commons
Data Spring MongoDB
Data Spring Redis
Solr data pegas
Gemfire data pegas
Istirahat data pegas
Data pegas neo4j
Tentang Data Spring JPA
Data Spring JPA adalah sub-proyek data pegas. Ini terutama digunakan untuk menyederhanakan implementasi lapisan akses data. Menggunakan JPA data pegas, Anda dapat dengan mudah menerapkan penambahan, penghapusan, modifikasi, pagination, penyortiran, dll.
Contoh, Spring Boot + Spring Data JPA
1. Tambahkan file pom.xml
Seperti yang ditunjukkan di bawah ini:
<? Xml Version = "1.0" encoding = "UTF-8"?> <Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <ModelVersion> 4.0.0 </ModelVersion> <groupdid> com.example </groupid </groupid> </ModelVersion> <groupdid> Com.example </Groupcing </groupid> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-data-jpa-example</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.4.RELEASE</version> <RelativePath/> <!-Pencarian Orangtua dari Repositori-> </parents> <properties> <proyate.build.sourceencoding> UTF-8 </project.build.sourceencoding> <poject.outporting.outputEncoding> UTF-8 </project.report.outportencoding> UTF-8 </project.report.outputencoding> JAGIONS. </ Properties> <Dependencies> <dependency> <GroupId> org.springframework.boot </groupid> <ArTifactId> Spring-boot-starter-data-jpa </arttifactid> </dependency> <sendeptid> org.springframework. </Dependency> <dependency> <GroupId> org.springframework.boot </groupid> <t Artifactid> tes musim semi-boot-starter </arttifactid> <scope> test </sePope> </dependency> </gruptid> </gruptid </scopeD> <ArtiFAct> <TREPENENSIONTIF> <TRUPTIF> </ARTORFA </Groupid> <ArTtifacTID> MySQLency> <GroupId> org.springframework.boot </groupid> <ArTifactId> spring-boot-starter-cache </arttifactid> </dependency> </dependencies> <build> <builgin> <sroupid> org. </ Build> </joy Project>
Di antara mereka, orang tua boot-boot-starter akan memuat semua konfigurasi default yang diperlukan oleh aplikasi boot pegas;
Spring-boot-starter-data-JPA akan mengunduh semua dependensi yang diperlukan oleh Spring Data JPA;
Tambahkan Spring-Boot-Starter-Web karena proyek kami adalah aplikasi web;
Selain itu, basis data kami adalah MySQL, jadi ketergantungan MySQL-Connector-Java juga diperlukan;
Karena cache digunakan, tambahkan ketergantungan cache pegas-boot-starter lain;
2. Pengguna Tulis Entitas
Paket com.example.domain; impor java.io.serializable; impor javax.persistence.column; impor javax.persistence.entity; import javax.persistence.id; import javax.persistence.namedQuery;@entity@namedQuery (name = "user.findbyname" name u u uStity; Pengguna mengimplementasikan serializable {private static final long serialversionuid = 1l; @ID ID Panjang; @Column (name = "name") nama string; @Column (name = "Alamat") Alamat String; publik long getId () {return id; } public void setId (Long ID) {this.id = id; } public string getName () {return name; } public void setName (name string) {this.name = name; } public String getAddress () {alamat kembali; } public void setAddress (Alamat String) {this.address = alamat; }}Tidak ada lagi yang bisa dikatakan. Perhatikan anotasi @NamedQuery di sini. Secara kasar berarti bahwa metode FindByName yang kami definisikan di antarmuka repositori tidak menggunakan implementasi kueri default, tetapi sebaliknya menggunakan pernyataan kueri khusus ini untuk kueri. Jika tidak ada anotasi di sini, implementasi default akan digunakan.
3. Tulis antarmuka repositori
Di sini kita akan menulis dua antarmuka repositori, yang hanya digunakan untuk contoh, dan dapat digabungkan menjadi satu dalam praktik:
Userjparepository
Paket com.example.repository; impor org.springframework.data.jpa.repository.jparepository; import com.example.domain.user; antarmuka publik userjparepository memperluas jparepository <user, long> {}Antarmuka pengguna UserJParepository di sini mengimplementasikan antarmuka JParepository;
Faktanya, JParePository mengimplementasikan antarmuka PagingAndSorttingRepository, antarmuka PagingAndSortingRepository mengimplementasikan antarmuka crudrepository, dan antarmuka crudrepository mengimplementasikan antarmuka repositori;
Penjelasan singkat:
Antarmuka repositori adalah antarmuka identifikasi, dan kosong di dalam;
Antarmuka crudrepository mendefinisikan metode penambahan, menghapus, memodifikasi dan mencari;
Antarmuka pagingandsorttingRepository digunakan untuk paging dan penyortiran;
Karena antarmuka JParepository mewarisi semua antarmuka di atas, ia memiliki semua metode yang dinyatakan oleh mereka;
Perhatikan juga bahwa mengambil metode FindAll sebagai contoh, Daftar Pengembalian Antarmuka JParePository, PagingandSortingRepository dan CrudRepository Return Iterator;
Userrepository
Paket com.example.repository; import java.util.list; impor org.springframework.data.jpa.repository.query; impor org.springframework.data.repository.repository; impor org.springframework.data.repository. USErrepository memperluas repositori <user, long> {list <user> findByNeAndaddress (nama string, alamat string); @Query (value = "from user u where u.name =: name") Daftar <User> findByName1 (@param ("name") name string); @Query (value = "SELECT * from #{ #entityName} u di mana u.name =? 1", nativeQuery = true) Daftar <User> findByName2 (string name); Daftar <User> findByName (nama string);}Antarmuka userrepository di sini terutama mendefinisikan beberapa metode kueri;
Misalnya, kami dapat mengeksekusi secara langsung tanpa mendefinisikan pernyataan kueri lain di sini. Data pegas JPA akan secara otomatis mengimplementasikan metode berdasarkan nama atribut dan nama metode kelas entitas; PS: Karena kami mendeklarasikan anotasi @NamedQuery di kelas entitas, pada kenyataannya, metode FindByName akan menggunakan pernyataan kueri yang dianotasi oleh anotasi @NamedQuery untuk meminta permintaan;
Selain itu, metode FindByName1 di sini menggunakan kueri pernyataan HQL;
Metode FindByName2 menggunakan kueri pernyataan SQL asli;
4. Layanan Tulis
Antarmuka Layanan:
paket com.example.service; import java.util.list; import com.example.domain.user; antarmuka publik iuserservice {daftar publik <user> findAll (); public void saveUser (buku pengguna); Pengguna Public FindOne (Long ID); public void delete (Long ID); Daftar Publik <User> findByName (nama string);}Kelas Implementasi Antarmuka:
Paket com.example.service.impl; impor java.util.list; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.sache.service. com.example.domain.user; import com.example.repository.userrepository; import com.example.repository.userjparepository; import com.example.service.iuserService;@service@transactionalpublic userServerImply mengimplementasikan iuserservice {@autowired private userserverServeryPository; @Autowired private userrepository userrepository; Daftar Publik <User> findAll () {return userjparepository.findall (); } Daftar Publik <User> findByName (nama string) {Daftar <User> userList1 = userrepository.findbyname1 (name); Daftar <User> userList2 = userrepository.findbyname2 (name); Daftar <User> userList3 = userrepository.findbyNeAndaddress (name, "3"); System.out.println ("UserList1:" + UserList1); System.out.println ("UserList2:" + UserList2); System.out.println ("UserList3:" + UserList3); return userrepository.findbyname (name); } public void saveUser (buku pengguna) {userjparepository.save (buku); } @Cacheable ("Users") Public User FindOne (Long ID) {System.out.println ("Halaman Cache"); kembalikan userjparepository.findone (id); } public void delete (Long ID) {userjparepository.delete (id); }}Tidak ada yang bisa dikatakan tentang ini, panggil saja metode antarmuka repositori.
5. Tulis Pengontrol
Tidak ada yang bisa dikatakan tentang controller, hubungi saja layanan. Perhatikan bahwa pengontrol di sini dijelaskan menggunakan anotasi @RestController, dan nama jalur URL dinamai sesuai dengan gaya yang tenang;
Paket com.example.web; impor java.util.list; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.web.bind.annotation.pathvariable; impor org.springframework.web.bind.annotation.notation.notasi. org.springframework.web.bind.annotation.RestController; import com.example.domain.user; import com.example.service.iuserservice;@restcontroller@requestmapping (value = "/users") USerController kelas publik {@autowired private iuserservice service; @RequestMapping (value = "/add/{id}/{name}/{address}") Public User AddUser (@PathVariable int ID, @PathVariable Name String, @PathVariable String Address) {user user = new User (); user.setid (id); user.setname (name); user.setAddress (alamat); UserserService.SaveUser (pengguna); Pengguna Kembali; } @RequestMapping (value = "/delete/{id}") public void deleteBook (@pathvariable int id) {UsusService.Delete (id); } @RequestMapping (value = "/") Daftar Publik <User> getBooks () {return userservice.findall (); } @RequestMapping (value = "/{id}") pengguna publik getUser (@pathvariable int id) {user user = userservice.findone (id); Pengguna Kembali; } @RequestMapping (value = "/Search/Name/{name}") Daftar publik <User> getBookByName (@pathvariable name string) {Daftar <User> Users = userService.findbyName (name); Pengguna yang kembali; }}6. Mengkonfigurasi DataSource
Tambahkan konfigurasi berikut ke file 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
Jika Anda menggunakan IDE STS, konfigurasi atribut ini akan diminta secara otomatis, sehingga Anda dapat menyimpan pencarian.
Jika Anda ingin melihat konfigurasi spring.datasource, Anda dapat merujuk ke kelas ini: DataSourceProperties.java
7. Tulis kelas startup
Itu relatif sederhana. Perhatikan bahwa level paket yang dimiliki kelas ini harus lebih besar dari atau sama dengan kelas lain untuk memastikan bahwa anotasi kelas lain dapat dipindai.
package com.example;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cache.annotation.EnableCaching;@SpringBootApplication@EnableCachingpublic class SpringDataJpaExampleApplication { public static void main (string [] args) {springApplication.run (springDatajPaexampleApplication.class, args); }}Jalankan dan uji program
Mulai metode utama, atau ketik ke dalam paket JAR untuk dijalankan;
Masukkan URL berikut di browser dan uji:
http: // localhost: 8080/pengguna/
http: // localhost: 8080/pengguna/add/100/110/111
http: // localhost: 8080/user/delete/100
http: // localhost: 8080/pengguna/2
http: // localhost: 8080/pengguna/pencarian/nama/2
Kode Sumber Program
https://github.com/peterchenhdu/spring-data-jpa-example
Referensi
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/
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.