حول بيانات الربيع
يستخدم مشروع أعلى في مجتمع الربيع بشكل أساسي لتبسيط وصول البيانات (العلائقية وغير العلائقية). إذا استخدمنا بيانات الربيع لتطوير البرامج ، فيمكننا توفير الكثير من عمليات الوصول إلى البيانات منخفضة المستوى ، مثل كتابة عبارات استعلام البيانات ، وفئات DAO ، وما إلى ذلك. نحتاج فقط إلى كتابة بعض الواجهات المجردة وتحديد العمليات ذات الصلة. سيقوم Spring بإنشاء مثيلات وكيل أثناء التشغيل لتنفيذ العمليات المحددة في واجهتنا.
حول المشروع الفرعي لبيانات الربيع
تحتوي بيانات الربيع على العديد من المشروعات الفرعية ، بالإضافة إلى بيانات الربيع JPA ، وهناك أيضًا المشروعات الفرعية التالية.
المشاع بيانات الربيع
بيانات الربيع mongodb
Redis بيانات الربيع
بيانات الربيع solr
بيانات الربيع gemfire
بقية بيانات الربيع
بيانات الربيع neo4j
حول بيانات الربيع JPA
بيانات الربيع JPA هي مشروع فرعي لبيانات الربيع. يتم استخدامه بشكل أساسي لتبسيط تنفيذ طبقة الوصول إلى البيانات. باستخدام بيانات الربيع JPA ، يمكنك بسهولة تنفيذ الإضافة ، والحذف ، والتعديل ، والترقيم ، والفرز ، إلخ.
مثال ، SPRING BOOT + Spring Data JPA
1. أضف ملف pom.xml
كما هو موضح أدناه:
<؟ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <soph> 0.0.1-snapshot </version> <packaging> جرة </packaging> <name> spring-data-jpa-example </name> <speciped> مشروع تجريبي للبليون الربيعي </description> <parent> <roupiD> org.springframework.boot </groupid> <soph> 1.4.4.Release </version> <repiledpath/> <!-بحث عن الأصل من المستودع-> </parent> <ferties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.utputencoding> utf-8 </pupting.reporting.Reporting.Reporting. <Java.version> 1.7 </java.version> </sperties> <reperencies> <reperence> <roupiD> org.springframework.boot </rougeid> <StifactId> spring-boot-starter-data-jpa </stifactid> </reperency> <spermid> <StifactId> Spring-boot-Starter-Web </stifactid> </sependency> <reperence> <roupiD> org.springframework.boot </rougeid> <Stifactid> spring-boot-starter-test </stifactid> <StifactId> mysql-connector-java </shintifactid> </reperency> <reperence> <roupiD> org.springframework.boot </rougeid> <trifactid> spring-boot-starter-cache </stifactid> <StifactId> Spring-Boot-Maven-Plugin </stifactid> </sultwing> </sults> </build> </project>
من بينها ، ستقوم الوالد النجوي النابض بالثنائي بتحميل جميع التكوينات الافتراضية المطلوبة بواسطة تطبيق SPRING Boot ؛
ستقوم Spring-Boot-Starter-Data-JPA بتنزيل جميع التبعيات المطلوبة بواسطة SPRING DATA JPA ؛
أضف نهر الظهر من نماذج الظهر لأن مشروعنا هو تطبيق ويب ؛
بالإضافة إلى ذلك ، فإن قاعدة البيانات الخاصة بنا هي MySQL ، لذلك مطلوب أيضًا MySQL-Connector-Java ؛
منذ استخدام ذاكرة التخزين المؤقت ، أضف التبعية الأخرى في ذاكرة التخزين المؤقت في الربيع ؛
2. اكتب مستخدم الكيان
package com.example.domain ؛ استيراد java.io.serializable ؛ استيراد javax.persistence.column ؛ استيراد javax.persistence.entity ؛ استيراد javax.persistence.id يقوم المستخدم بتنفيذ Serializable {Private Static Final Long SerialVersionuid = 1L ؛ معرف طويل ؛ column (name = "name") اسم السلسلة ؛ column (name = "address") عنوان السلسلة ؛ Public Long getId () {return id ؛ } public void setId (id long) {this.id = id ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } السلسلة العامة getAddress () {return address ؛ } public void setAddress (عنوان السلسلة) {this.address = العنوان ؛ }}لا يوجد شيء آخر ليقوله. انتبه إلى التعليق التوضيحي لـ NamedQuery هنا. وهذا يعني تقريبًا أن طريقة FindByName التي نحددها في واجهة المستودع لا تستخدم تطبيق الاستعلام الافتراضي ، ولكنه يستخدم بدلاً من ذلك عبارة الاستعلام المخصصة للاستعلام. إذا لم يكن هناك شرح هنا ، فسيتم استخدام التنفيذ الافتراضي.
3. اكتب واجهة المستودع
سنكتب هنا واجهتين مستودعين ، يتم استخدامهما فقط للأمثلة ، ويمكن دمجها في الواجهات الممارسة:
userJparePository
package com.example.repository ؛ استيراد org.springframework.data.jpa.repository.jparepository ؛ استيراد com.example.domain.user ؛ الواجهة العامة userjparository
واجهة userJparePository هنا تنفذ واجهة JParePository ؛
في الواقع ، تقوم JParePository بتنفيذ واجهة PagingandSortingRepository ، وواجهة PagingandSortingRepository ، وتنفيذ واجهة crudrepository ، وواجهة crudrepository تنفذ واجهة المستودع ؛
شرح موجز:
واجهة المستودع هي واجهة تعريف ، وهي فارغة في الداخل ؛
تحدد واجهة crudrepository طرق إضافة وحذف وتعديل والبحث ؛
يتم استخدام واجهة PagingandSortingRepository للترحيل والفرز ؛
نظرًا لأن واجهة JParePository ترث جميع الواجهات المذكورة أعلاه ، فإنها تحتوي على جميع الطرق التي أعلن عنها ؛
لاحظ أيضًا أن أخذ طريقة Findall كمثال ، فإن قائمة واجهة JParePository تُرجع ، و PagingandSortingRepository و Crudrepository.
userrepository
package com.example.repository ؛ import java.util.list ؛ استيراد org.springframework.data.jpa.repository.query UserRepository يمتد مستودع <مستخدم ، long> {list <Ser> findbynameandaddress (اسم السلسلة ، عنوان السلسلة) ؛ QUery (value = "من user u where uthename =: name") قائمة <Serv> findByName1 (param ("name") اسم السلسلة) ؛ QUery (value = "SELECT * from #{ #entityName} u where U.Name =؟ 1" ، nativeQuery = true) list <Sether> findByName2 (اسم السلسلة) ؛ قائمة <Sether> FindByName (اسم السلسلة) ؛}تحدد واجهة UserRepository هنا بشكل رئيسي بعض أساليب الاستعلام ؛
على سبيل المثال ، يمكننا التنفيذ مباشرة دون تحديد بيانات الاستعلام الأخرى هنا. سوف تنفذ Dring Data JPA تلقائيًا الطريقة بناءً على اسم السمة واسم طريقة فئة الكيان ؛ PS: نظرًا لأننا نعلن عن التعليق التوضيحي لـ NamedQuery في فئة الكيان ، في الواقع ، ستستخدم طريقة FindByName بيان الاستعلام المشروع بواسطة التعليق التوضيحي لـ NamedQuery للاستعلام ؛
بالإضافة إلى ذلك ، تستخدم طريقة FindByName1 هنا استعلام عبارة HQL ؛
تستخدم طريقة FindByName2 استعلام عبارة SQL الأصلي ؛
4. اكتب الخدمة
واجهة الخدمة:
package com.example.service ؛ import java.util.list ؛ import com.example.domain.user ؛ public interface iuserservice {public list <Sether> findall () ؛ public void saveUser (كتاب المستخدم) ؛ المستخدم العام FindOne (معرف طويل) ؛ حذف الفراغ العام (معرف طويل) ؛ القائمة العامة <Sether> FindByName (اسم السلسلة) ؛}فئة تنفيذ الواجهة:
package com.example.service.impl ؛ استيراد java.util.list ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.cache.annotation.cachable ؛ org.springframework.transaction.annotation.transactional ؛ استيراد com.example.domain.user userJparePository userJparePository ؛ @autowired userrepository userrepository ؛ القائمة العامة <Sether> findall () {return userJparePository.findall () ؛ } القائمة العامة <Sether> findByName (اسم السلسلة) {List <Ser> userList1 = userRepository.findbyname1 (name) ؛ قائمة <Sether> userList2 = userRepository.findbyname2 (name) ؛ قائمة <Sether> userList3 = UserRepository.Findbynameanddress (الاسم ، "3") ؛ System.out.println ("userList1:" + userList1) ؛ System.out.println ("userList2:" + userList2) ؛ System.out.println ("userList3:" + userList3) ؛ إرجاع userrepository.findbyname (الاسم) ؛ } public void saveUser (كتاب المستخدم) {userJparePository.save (book) ؛ } cachable ("المستخدمون") المستخدم العام FindOne (معرف طويل) {system.out.println ("الصفحات المخزولة") ؛ إرجاع userJparePository.findone (id) ؛ } public void delete (ong id) {userjParePository.Delete (id) ؛ }}لا يوجد شيء يمكن قوله حول هذا الأمر ، فقط استدعاء طريقة واجهة المستودع.
5. كتابة وحدة التحكم
لا يوجد شيء يمكن قوله عن وحدة التحكم ، فقط اتصل بالخدمة. لاحظ أن وحدة التحكم هنا قد تم توضيحها باستخدام شرح RestController ، ويتم تسمية اسم مسار عنوان URL وفقًا للنمط المريح ؛
package com.example.web ؛ import java.util.list ؛ استيراد org.springframework.beans.factory.annotation. org.springframework.web.bind.annotation.restController ؛ استيراد com.example.domain.user ؛ استيراد com.example.service.iuserservice ؛@restController@requestMapping (value = "/user") الفئة العامة usercontroller requestmapping (value = "/add/{id}/{name}/{address}") المستخدم العام addUser (pathvariable int id ، اسم سلسلة pathvarable ، عنوان سلسلة pathvariable) {user user = new user () ؛ user.setId (id) ؛ user.setName (name) ؛ user.setaddress (العنوان) ؛ userService.saveuser (user) ؛ إرجاع المستخدم ؛ } @requestmapping (value = "/delete/{id}") public void deletebook (pathvariable int id) {userservice.delete (id) ؛ } @requestmapping (value = "/") list public list <Sether> getBooks () {return userservice.findall () ؛ } @requestmapping (value = "/{id}") المستخدم العام getUser ( @pathvariable int id) {user user = userService.findone (id) ؛ إرجاع المستخدم ؛ } @requestmapping (value = "/search/name/{name}") القائمة العامة <Sether> getBookByName (name pathvariable name) {list <serve> users = uservice.findbyname (name) ؛ إرجاع المستخدمين ؛ }}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 static void main (string [] args) {springapplication.run (springDatajpaexampleApplication.class ، args) ؛ }}تشغيل واختبار البرنامج
ابدأ الطريقة الرئيسية ، أو اكتبها في حزمة جرة لتشغيلها ؛
أدخل عنوان URL التالي في المتصفح واختبره:
http: // localhost: 8080/user/
http: // localhost: 8080/user/add/100/110/111
http: // localhost: 8080/user/delete/100
http: // localhost: 8080/user/2
http: // localhost: 8080/user/search/name/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 أكثر.