تقدم هذه المقالة مثالًا على بناء SPRING BOOT+Spring MVC+JPA لمشروع Maven. تتم مشاركتها معك. التفاصيل كما يلي:
أضف دعم الحذاء الربيعي وتقديم الحزم ذات الصلة:
1. مشروع Maven لا غنى عنه لـ Pom.xml. لإدخال Spring Boot ، يرجى الرجوع إلى الموقع الرسمي:
<Arnal> <roupiD> org.springframework.boot </rougiD> <intifactid> Spring-boot-starter-parent </stifactid> <sophy> 1.5.9 <scope> المقدمة </scope> <!-ترجمة ونشر حزم جرة غير مرغوب فيها-> </remined> <reperency> <roupiD> org.springframework </rougeid> <TrifactId> spring-webmvc </suntifactid> <StifactId> Spring-Boot-Starter-Web </stifactid> </sependency> <!-JPA JAR Package ، تشغيل قاعدة البيانات-> DEPERENCY> <LOUREID> ORG.SPRINGFRAMEWEWORK <roupringid> org.springframework.boot </rougiD> <StifactId> Spring-boot-starter-data-redis </shintifactid> </sependency> <!-mysql driver-> <sepensid> <roughId> org.apache.shiro </rougiD> <StifactId> shiro-core </stifactid> <الإصدار> 1.2.2 </version> </sependency> <sependency> <roupiD> org.apache.shiro </rougeid> -> <redency> <roupeD> org.apache.shiro </rougiD> <intifactid> shiro-ehcache </artifactId> <الإصدار> 1.2.2 </الإصدار> </rEperency> </reperencies> <build> <clupins> <roucid> org.springframeword <StifactId> Spring-boot-maven-plugin </shintifactid> <evelopmentions> <evelop> <irod> <vide> repackage </sivel> </execution>
2. الرمز أعلاه يقدم حذاء الربيع. Spring MVC و JPA ، بالإضافة إلى جرة السائق لقاعدة بيانات MySQL ؛
اكتب فئة بدء التشغيل وقم بتثبيت ملف التكوين:
1. فئة بدء التشغيل كما يلي:
استيراد org.springframework.boot.springapplication ؛ استيراد org.springframework.boot.autoconfigure.enableautoconfiguration ؛ استيراد org.springframework.boot.autoconfigure.springbootapplication ؛ استيراد org.springframework.data.jpa.repository.config.enablejpaauditing ؛ استيراد java.ioException ؛ استيراد com.my.config.commonproperties ؛@string main [] = commonProperties.LoadProperties2System (System.getProperty ("spring.config.location")) ؛ System.GetProperties (). System.getProperties (). setProperty ("app.home" ، loc + "/..") ؛ springapplication.run (application.class ، args) ؛ }}2. ضع ملف التكوين خارج ClassPath لتسهيل التعديل دون إعادة التعبئة. يتم تحويل مشاريع التمهيد الربيعية بشكل عام إلى حزم جرة:
استيراد java.io.file ؛ استيراد java.io.fileinputStream ؛ استيراد java.io.ioException ؛ استيراد java.util.properties ؛ استيراد org.springframework.util.stringutils ؛ public commonproperties {public static final final ppt_keke_home = "app.home" ؛ السلسلة النهائية الثابتة العامة default_app_home = "./" ؛ السلسلة النهائية الثابتة العامة getapphome () {return system.getProperty ("./" ، "./") ؛ } static string static pladProperties2System (موقع السلسلة) يلقي ioException {string configlocation = location ؛ ملف CNF ؛ if (! stringUtils.haslength (location)) {configlocation = "./config" ؛ cnf = ملف جديد (configlocation) ؛ if (! cnf.exists () ||! cnf.isdirectory ()) {configlocation = "../config" ؛ cnf = ملف جديد (configlocation) ؛ }} آخر {cnf = ملف جديد (الموقع) ؛ } file [] arg2 = cnf.listfiles () ؛ int arg3 = arg2.length ؛ لـ (int arg4 = 0 ؛ arg4 <arg3 ؛ ++ arg4) {file file = arg2 [arg4] ؛ if (file.isfile () && file.getName (). endswith (". properties")) {properties ppt = new properties () ؛ fileInputStream fi = جديد fileInputStream (ملف) ؛ armable Arg8 = null ؛ حاول {ppt.load (fi) ؛ System.getProperties (). putall (ppt) ؛ } catch (throwable arg17) {arg8 = arg17 ؛ رمي Arg17 ؛ } أخيرًا {if (fi! = null) {if (arg8! = null) {try {fi.close () ؛ } catch (throwable arg16) {arg8.addsupressed (arg16) ؛ }} آخر {fi.close () ؛ }}}} إرجاع configlocation ؛ } سلسلة ثابتة عامة (فئة <؟> clazz) {package pkg = clazz.getPackage () ؛ سلسلة ver = pkg! = فارغة؟ pkg.getImplementation (): "غير محدد" ؛ إرجاع VER == NULL؟ "غير محدد": ver ؛ }ضع ملف التكوين في مجلد التكوين في دليل حزمة JAR في نفس المستوى ، بما في ذلك تكوين السجل ، ملف Application.yml ، ملفات التكوين الأخرى ، إلخ. ؛
اكتب فئات التكوين التلقائي
تستخدم لمسح الشركة*، بدلاً من ملف تكوين Spring.xml من Spring MVC:
استيراد org.springframework.context.annotation.componentscan ؛ استيراد org.springframework.context.annotation.configuration ؛@configuration@componentscan (basePackages = {"com.my.rs" ، "com.my.service" ، org.springframework.boot.autoconfigure.web.httpmessageConverters ؛ استيراد org.springframework.context.annotation.bean ؛ استيراد org.springframework.context.annotation.configuration ؛ استيراد org.springframework.web.servlet.config.annotation.resourceHandlerRegistry httpmessageConverters customConverters () {return new httpmessageConverters () ؛ } Override public void addresourceHandlers (ResourceHandlerRegistry Recistry) {//registry.addresourceHandler("/* ”) }اكتب RS ، الخدمة ، المستودع
package com.my.rs ؛ import java.util.list ؛ استيراد org.springframework.web.bind.annotation.requestbody ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.antation.requestmethmethd ؛ org.springframework.web.bind.annotation.requestparam ؛ import org.springframework.web.bind.annotation.responsebody ؛ import com.my.entity.user ؛@requestmapp ({"/api/user"}) واجهة عامة {{ requestMapping (value = "/add" ، method = {requestMethod.post}) @recsponsebody user saveUser ( @requestbody user user) ؛ requestMapping (value = "/update" ، method = {requestMethod.post}) ResponseBonder public UperatedUser ( @requestbody user user) ؛ requestmapping (value = "/delete" ، method = {requestMethod.post ، requestMethod.delete}) deleteuser public void (requestparam string [] userids) ؛ requestmapping (value = "/get" ، method = {requestMethod.get}) @responsebody مستخدم public getUser ( @requestparam string userD) ؛ requestmapping (value = "/query/all" ، method = {requestMethod.get}) قائمة عامة <Sether> QueryAll () ؛ requestmapping (value = "/query/byname" ، method = {requestMethod.get}) قائمة عامة <Seter> QueryByName (requestparam اسم سلسلة) ؛ requestmapping (value = "/query/byparentId" ، method = {requestMethod.get}) القائمة العامة <Sether> QueryChildren (@requestparam string parentId) ؛ // لا يوجد استعلام تراجع عن معلمة @requestmapping (value = "/query/page" ، method = {requestMethod.get}) القائمة العامة <Sether> QueryByPage (requestparam int pageno ، @requestparam int pagesize ، requestbody (required = false) user user) ؛} package com.my.rs.impl ؛ import java.util.list ؛ استيراد org.slf4j.logger ؛ استيراد org.slf4j.loggerfactory ؛ استيراد org.springframewework.beans.factory.annotation.autowired org.springframework.web.bind.annotation.restController ؛ import com.my.entity.user ؛ import com.my.rs.userrs ؛ import com.my.service.userservice ؛ restControllerPublic userrsimpl تنطس userrs {public static logger = loggerfactory.getlogger. Autowired uservervice _userservice ؛ Uverride Public User SaveUser (requestbody مستخدم) {try {return _userservice.save (user) ؛ } catch (throwable e) {logger.error (e.getMessage () ، e) ؛ رمي ه ؛ }} Override public updateUser (requestbody user user) {return _userservice.update (user) ؛ } Override public void deleteuser (string [] userIds) {for (string userId: userIds) {_userservice.deleteById (userId) ؛ }} Override Public List <Sether> QueryAll () {return _userservice.queryall () ؛ } Override Public List <Sether> QueryByName (اسم السلسلة) {return _userservice.findbyname (name) ؛ } Override Public List <Sether> QueryChildren (String ParentId) {return _userservice.findbyparentId (parentId) ؛ } Override Public User GetUser (String userId) {return _userservice.findbyid (userId) ؛ } Override Public List <Sether> QueryBypage (int pageno ، int pagesize ، user user) {return null ؛ }} package com.my.service ؛ import java.util.list ؛ استيراد org.springframework.beans.factory.annotation. AUTOWIRES USERREPOSTORY _USERREPOSTORY ؛ القائمة العامة <Sether> findByName (اسم السلسلة) {return _userrepository.findbyname (name) ؛ } القائمة العامة <Sether> findByParentId (String parentId) {return _userRepository.findByParentId (ParentId) ؛ }} package com.my.repository ؛ import java.util.list ؛ import com.my.entity.user ؛ userpository public userrepository يمتد baseRepository <serve> {list <Sether> findbyname (اسم السلسلة) ؛ قائمة <Sether> FindByParentId (String ParentId) ؛}يتبنى ما ورد أعلاه نموذجًا ذو طبقة ، وهو أمر مرهق بعض الشيء ، ولكنه أكثر ملاءمة لتعديل منطق العمل لكل طبقة لاحقًا.
الفصول ذات الصلة JPA هي كما يلي:
package com.my.service ؛ استيراد java.io.serializable ؛ استيراد javax.persistence.entityManager ؛ استيراد javax.transaction.transactional ؛ استيراد org.springframewew Baseservice <e يمتد serializable> {autowired baserepository <e> _baserepository ؛ @autowired entityManager em ؛ public e save (e baseUnit) {return _baserepository.saveandflush (baseUnit) ؛ } update e public e (e baseUnit) {return _baserepository.saveandflush (baseUnit) ؛ } public void deletebyid (string id) {_baserepository.delete (id) ؛ } public java.util.list <e> queryall () {return _baserepository.findall () ؛ } pincial e findbyid (string id) {return _baserepository.getone (id) ؛ }} حزمة com.my.repository ؛ استيراد java.io.serializable ؛ استيراد org.springframework.data.jpa.repository.jparepository ؛ orgion org.springframework.data.repository.norepositorybean ؛ قابل للتسلسل> {}فئة الكيان: تتعلق بحقول قاعدة البيانات ، تحتاج إلى الانتباه إلى التعليق التوضيحي في الفئة الأصل @appedsuperclass
package com.my.entity ؛ import java.util.arraylist ؛ import java.util.list ؛ import javax.persistence. org.hibernate.validator.constraints.email ؛ entity (name = "db_user")@dynamicinsert@dynamicupdatepublic class مستخدم paseUnit { / *** status* / public static incortatus { / *** normal* / enable ، // / ** ** *** / publicative end extatial} -3101319619397064425L ؛ كلمة مرور السلسلة الخاصة ؛ ملح السلسلة الخاصة. / ** حالة الحساب*/ حالة الحساب الخاصة ؛ / ** البريد الإلكتروني المصادقة*/ eMail (message = "user.mail يجب أن يتوافق سمة Email لتنسيق البريد الإلكتروني") سلسلة البريد الإلكتروني الخاصة ؛ / ** رقم الهاتف المحمول*/ سلسلة خاصة Mobileno ؛ / ** رقم المعرف*/ السلسلة الخاصة cardid ؛ ManyTomany (targetentity = rol.class) قائمة خاصة <String> roled ؛ /** كنية. خياري. */ لقب السلسلة الخاصة ؛ السلسلة العامة getCardId () {return cardid ؛ } السلسلة العامة getEmail () {return email ؛ } السلسلة العامة getMobileno () {return mobileno ؛ } السلسلة العامة getNickName () {return labes. } السلسلة العامة getPassword () {return password ؛ } القائمة العامة <string> getroleids () {if (roleIDs == null) {roleids = new ArrayList <> () ؛ } إرجاع الأدوار ؛ } السلسلة العامة getSALT () {return salt ؛ } public accountStatus getStatus () {return status ؛ } public void setCardId (String cardid) {this.cardId = cardId ؛ } public void setemail (string email) {this.email = email ؛ } public void setMobileno (String mobileno) {this.mobileno = mobileno ؛ } public void setNickName (سلسلة لقب) {this.nickName = nablemed ؛ } public void setPassword (سلسلة كلمة مرور) {this.password = password ؛ } setRoleids public void (قائمة <Tring> roledIDs) {this.roleids = robleids ؛ } public void setSalt (سلسلة ملح) {this.salt = salt ؛ } public void setStatus (accountStatus status) {this.status = status ؛ }} package com.my.entity ؛ import java.io.serializable ؛ import java.util.date ؛ import javax.persistence.id ؛ import javax.persistence.mappedsuperClass ؛ import javax.validation.constraints.notnull org.springframework.data.annotation.createdby ؛ استيراد org.springframework.data.annotation. تنفذ قابلة للتسلسى { @ @notnull معرف السلسلة العامة ؛ / ** * معرف الوحدة الأصل */ size (max = 32 ، message = "baseUnit.ParentID طول السمة لا يمكن أن يكون أكبر من 32") سلسلة عامة ؛ / ** نوع الوحدة الأصل*/ Public ParentType ParentType ؛ / *** اسم الوحدة*/ notnull (message = "baseunit.name السمة لا يمكن أن تكون فارغة") اسم السلسلة العامة ؛ @createdby السلسلة العامة createBy ؛ CREATEDDATE التاريخ العام الذي تم إنشاؤه ؛ @lastmodifiedby السلسلة العامة lastModifiedBy ؛ / *** آخر تاريخ تم تحديثه*/ @lastmodifiedDate التاريخ العام lastModifiedDate ؛ السلسلة العامة getId () {معرف الإرجاع ؛ } public void setId (string id) {this.id = id ؛ } / *** احصل على اسم الوحدة** @RETURN المطلوبة* / السلسلة العامة getName () {return name ؛ } / ** * * REGARN UUID ، باستثناء {} و - * / string public getParentId () {return parentId ؛ } Public ParentType getParentType () {return parentType ؛ } السلسلة العامة getStationId () {return STETETYID ؛ } السلسلة العامة getThumbnailid () {return thumbnailid ؛ } السلسلة العامة getCreateby () {return createBy ؛ } public void setCreateBy (String CreateBy) {this.createBy = createBy ؛ } التاريخ العام getCreatedAte () {return createdAte ؛ } public void setCreatedAte (date createdate) {this.createdate = createTate ؛ } / ** * اضبط اسم الوحدة * * param اسم * مطلوب * / public void setName (اسم السلسلة) {this.name = name ؛ } / ** * قم بتعيين معرف الوحدة الأصل * * param parentid * uuid ، باستثناء {} و - * / public void setParentId (String parentId) {this.parentId = parentId ؛ } سلسلة عامة getLastModifiedBy () {return lastModifiedBy ؛ } public void setLastModifiedBy (String lastModifiedBy) {this.lastModifiedBy = lastModifiedBy ؛ } التاريخ العام getLastModifiedDate () {return lastModifiedDate ؛ } public void setLastModifiedDate (Date lastModifiedDate) {this.lastModifiedDate = lastModifiedDate ؛ }}ملف التكوين:
الخادم: المنفذ: 16800 ContextPath:/تسجيل الدخول: التكوين:. com.mysql.jdbc.driver jpa: قاعدة البيانات: mysql show-sql: true hibernate: ddl-auto: update jackson: serialization: indent_output: true
#Hibernate: السلوك المحدد لفئة الكيان التي تحافظ على بنية جدول قاعدة البيانات. التحديث يعني أنه عندما يتغير خصائص فئة الكيان ، سيتم تحديث بنية الجدول. هنا يمكننا أيضا أخذ القيمة إنشاء. هذا الإنشاء يعني أنه تم حذف الجدول الأخير الذي تم إنشاؤه عند بدء التشغيل وتجديد الجدول وفقًا لفئة الكيان. في هذا الوقت ، سيتم مسح البيانات في الجدول السابق ؛ يمكن أن يأخذ أيضًا إنشاء القيمة ، مما يعني أن الجدول يتم إنشاؤه بناءً على فئة الكيان عند بدء التشغيل ، ولكن عند إغلاق SessionFactory ، سيتم حذف الجدول ؛ التحقق من صحة يعني أن فئة الكيان وجدول البيانات متسقة عند بدء التشغيل ؛ لا شيء يعني أنه لا يوجد شيء. #show-sql يعني أن Hibernate يطبع بيان SQL الحقيقي على وحدة التحكم عند التشغيل #Jackson يعني تنسيق سلسلة JSON
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.