Artikel ini memperkenalkan contoh membangun boot musim semi+Spring MVC+JPA untuk proyek Maven. Itu dibagikan dengan Anda. Dengan rincian sebagai berikut:
Tambahkan Dukungan Spring Boot dan perkenalkan Paket Terkait:
1. Proyek Maven sangat diperlukan untuk pom.xml. Untuk pengenalan boot musim semi, silakan merujuk ke situs web resmi:
<partent> <groupid> org.springframework.boot </groupid> <ArtifactId> Spring-boot-starter-parent </arttifactid> <version> 1.5.9.release </version> </tentrup> <sependencies> <dependency> <groupid> javax.servlet </groupid> <t Artifactid> <groupid> javax.servlet </groupid> <t Artifactid> <scope> disediakan </opope> <!-kompilasi dan publikasikan paket JAR yang tidak diinginkan-> </dependency> <dependency> <Groupid> org.springframework </groupid> <ArtifactId> Spring-Webmvc </artifactid> </grouppen> <dep dependency> <groupid> org.springfr.springfr. <ArTifactId> Spring-Boot-starter-Web </artifactid> </ganden> <!-paket jar jPA, mengoperasikan database-> <dependency> <groupid> org.springframework.boot </groupid> <ArTifactid> <Tripe-boot-starter-data-jpa </groupid> <Artifactid> <artfactid> <tartif-boots-starter-data-jpa </groupid> <groupid> org.springframework.boot </proupid> <ArtiFacTId> Spring-boot-starter-data-redis </arttifactid> </dependency> <!-driver mysql-> <groupid> </ArtifactId> <t Artifactid> MySQL-Connector-Connector-Connector-Connector-Connector-Connector-Connector-Connector-Connector-Connector-Connector-Connector-Connector <groupId> org.apache.shiro </groupid> <ArtifactId> shiro-core </arttifactid> <version> 1.2.2 </version> </dependency> <dependency> <groupid> org.apache.shiro </groupid> <Artifactid> Shiro-spring </arttifache.hiro </groupid> <t Artifactid> Shiro-spring </arttifache.hiro </groupId> <Artifactid> Shiro-spring </arttifacheD> <coAcAing> <coACH> <CROVERACE> <ArtifACHTID> -> <dependency> <GroupId> org.apache.shiro </groupId> <ArTifactId> Shiro-ehcache </stifactid> <version> 1.2.2 </version> </dependency> </dependencies> <build> <surtid> <sroupid> org.springframework.boot </groupid> <srotifc> <sroupid> org.springframework.boot </groupid> <srotifc> <Executions> <Execution> <ject> <eals> RECKAGE </ject> </ject> </execution> </executions> </plugin> </lugin> <finalname> Nama </finalname> </bangun>
2. Kode di atas memperkenalkan boot musim semi. Spring MVC dan JPA, serta toples driver untuk database MySQL;
Tulis kelas startup dan instal file konfigurasi:
1. Kelas startup adalah sebagai berikut:
impor org.springframework.boot.springapplication; impor org.springframework.boot.autoconfigure.enableAutoconfiguration; impor org.springframework.boot.autoconfigure.springboot aplikasi; org.springframework.data.jpa.repository.config.enableJPaauditing; impor java.io.ioexception; import com.my.config.commonproperties;@springbootApplication@enableautoconFiguration@enableJpaauditingpublic {enableautoconFiguration@enableJPAauditingPublic {enableautoconFiguration {enableJpAauditingPublic {enableAutoconFiguration {enableJpAauditingPublic {enableAutoconFiguration {enableJpAauditingPublic IoException {string loc = CommonProperties.LoadProperties2system (System.getProperty ("spring.config.location")); System.getProperties (). SetProperty ("Application.Version", CommonProperties.GetVersion (Application.class)); System.getProperties (). SetProperty ("app.home", loc + "/.."); Springapplication.run (application.class, args); }}2. Tempatkan file konfigurasi di luar ClassPath untuk memfasilitasi modifikasi tanpa pengemasan ulang. Proyek boot musim semi umumnya dibuat menjadi paket toples:
impor java.io.file; import java.io.fileInputStream; impor java.io.ioException; import java.util.properties; impor org.springframework.util.stringutils; public final class commonproperty {public static final string ppt_key_app_home = "home =" string final statis publik default_app_home = "./"; string final statis publik getApphome () {return system.getProperty ("./", "./"); } public string static loadProperties2system (Lokasi String) melempar ioException {string configLocation = location; File cnf; if (! stringutils.haslength (lokasi)) {configLocation = "./config"; cnf = file baru (configLocation); if (! cnf.exists () ||! cnf.isdirectory ()) {configLocation = "../config"; cnf = file baru (configLocation); }} else {cnf = file baru (lokasi); } File [] arg2 = cnf.listFiles (); int arg3 = arg2.length; untuk (int arg4 = 0; arg4 <arg3; ++ arg4) {file file = arg2 [arg4]; if (file.isfile () && file.getName (). endswith (". Properties")) {properties ppt = new properties (); FileInputStream fi = FileInputStream baru (file); Arg8 yang dapat dilemparkan = null; coba {ppt.load (fi); System.getProperties (). Putall (ppt); } catch (throwable arg17) {arg8 = arg17; lempar arg17; } akhirnya {if (fi! = null) {if (arg8! = null) {coba {fi.close (); } catch (Throwable arg16) {arg8.addsuppressed (arg16); }} else {fi.close (); }}}} return configLocation; } public static string getVersion (class <?> clazz) {package pkg = clazz.getPackage (); String ver = pkg! = Null? pkg.getImplementationVersion (): "tidak terdefinisi"; return ver == null? "tidak terdefinisi": ver; }Tempatkan file konfigurasi di folder konfigurasi direktori paket JAR di level yang sama, termasuk konfigurasi log, file application.yml, file konfigurasi lainnya, dll.;
Tulis kelas konfigurasi otomatis
Digunakan untuk memindai perusahaan*, bukan file konfigurasi Spring MVC MVC:
impor org.springframework.context.annotation.componentscan; impor org.springframework.context.annotation.configuration;@configuration@componentscan (Basepackages = {"com.my.rs", "com.my.service", "com.my.repository", "com.my.service", "com.my.repository" org.springframework.boot.autoconfigure.web.httpmessageConverters; impor org.springframework.context.annotation.bean; impor org.springframework.context.annotation.onfigurasi; Impor org.springframework.web.servlet.config.annotation.resourceHandlerRegistry; impor org.springframework.web.servlet.config.annotation.webmvcconfigerapter; HttpMessageConVERTERS CustomConVerters () {return httpMessageConVerters baru (); } @Override public void addResourceHandlers (ResourceHandLerRegistry Registry) {//registry.addResourceHandler("/** ") // .AdResourcelocations (" ClassPath:/Meta-Inf/Resources/** "); }Tulis RS, Layanan, Repositori
Paket com.my.rs; impor java.util.list; impor org.springframework.web.bind.annotation.requestbody; impor org.springframework.web.bind.annotation.Requestmapping; impor org.spramework.web.bind.annotation.annotation.notation.notation.notation.notation.notation.notation.notation.notation.notation.notation.notation.reotation.reotation.notation.notation.notation.ruotation.ruotation.ruotation.notation.notation.ruotation.ruotation.notation.notation.notation.reotation.reotation.notation.notation.notation.notation.reotation.reotation.notation.notation.notation.reotation.reotation.ruTody org.springframework.web.bind.annotation.requestparam; impor org.springframework.web.bind.annotation.responseBody; import com.my.entity.user; @RequestMapping ({"/API/pengguna"}) Interface Publik USERRS {{"/API/USER") @RequestMapping (value = "/add", Method = {requestMethod.post}) @ResponseBody pengguna publik SaveUser (@RequestBody pengguna pengguna); @RequestMapping (value = "/update", Method = {requestMethod.post}) @ResponseBody Public User UpdateAser (@RequestBody pengguna pengguna); @RequestMapping (value = "/delete", Method = {requestMethod.post, requestMethod.delete}) public void deleteUser (@RequestParam string [] userIds); @RequestMapping (value = "/get", method = {requestMethod.get}) @ResponseBody pengguna publik getUser (@RequestParam String userId); @RequestMapping (value = "/query/all", method = {requestMethod.get}) Daftar publik <User> queryAll (); @RequestMapping (value = "/query/byname", method = {requestMethod.get}) Daftar publik <User> queryByName (@RequestParam Name String); @RequestMapping (value = "/query/byparentId", method = {requestMethod.get}) Daftar publik <User> queryChildren (@RequestParam String ParentId); // tidak ada parameter pagination kueri @RequestMapping (value = "/query/page", method = {requestMethod.get}) Daftar publik <User> queryBypage (@RequestParam int pageno, @RequestParam int pagesze, @requestbody (wajib = false) pengguna);} Paket com.my.rs.impl; impor java.util.list; impor org.slf4j.logger; impor org.slf4j.loggerFactory; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.weB.binde.notation org.springframework.web.bind.annotation.RestController; import com.my.entity.user; import com.my.rs.userrs; com.my.service.userservice; @RestControllerPublic kelas USERRSIMPL IMPLEMENSI USERRS {Public Static static logger = LOGGERCY USERRSIMPL IMPLEMENSI USERRS {Public Static Static Logger = @Autowired UserService _Userservice; @Override Public User SaveUser (@RequestBody pengguna pengguna) {coba {return _userservice.save (user); } catch (throwable e) {logger.error (e.getMessage (), e); lempar e; }} @Override Public User UpdateAser (@RequestBody pengguna pengguna) {return _Userservice.update (pengguna); } @Override public void deleteUser (string [] userIds) {for (string userid: userIds) {_userservice.deletebyId (userId); }} @Override Daftar publik <User> queryAll () {return _userservice.queryAll (); } @Override Daftar publik <User> querybyname (nama string) {return _userservice.findbyname (name); } @Override Daftar Publik <User> queryChildren (String ParentId) {return _Userservice.findbyparentId (parentId); } @Override pengguna publik getUser (string userId) {return _userservice.findbyId (userId); } @Override Daftar publik <User> QueryByPage (int pageno, int pageSize, pengguna pengguna) {return null; }} Paket com.my.service; impor java.util.list; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.stereotype.service; import com.my.entity.user; impor com.my.repository.userreporyl; BASESERVICE <User> {@Autowired userrepository _userrepository; Daftar Publik <User> findByName (nama string) {return _userrepository.findbyName (name); } Daftar Publik <User> findByParEnd (string parentId) {return _userrepository.findbyparentId (parentId); }} Paket com.my.repository; import java.util.list; import com.my.entity.user; antarmuka publik userrepository memperluas Baserepository <User> {List <user> findByName (string name); Daftar <User> findByparentId (string parentId);}Di atas mengadopsi model berlapis, yang agak rumit, tetapi lebih nyaman untuk memodifikasi logika bisnis setiap lapisan nanti.
Kelas terkait JPA adalah sebagai berikut:
Paket com.my.service; impor java.io.serializable; impor javax.persistence.entityManager; impor javax.transaction.transactional; impor org.springframework.baserpository. BASESERVICE <e memperluas serializable> {@autowired baserepository <e> _baserepository; @Autowired EntityManager EM; publik e save (e baseunit) {return _baserepository.saveandflush (baseunit); } Public e Update (e baseUnit) {return _baserepository.Saveandflush (baseunit); } public void deletebyId (string id) {_baserepository.delete (id); } public java.util.list <E> queryAll () {return _baserepository.findall (); } public e findById (string id) {return _baseRepository.getOne (id); }} Paket com.my.repository; impor java.io.serializable; impor org.springframework.data.jpa.repository.jparepository; org.springframework.data.repository.norepositorybean; @norepositoryorybeanpublic everpository Serializable> {}Kelas Entitas: Terkait dengan Bidang Basis Data, Anda perlu memperhatikan anotasi di kelas induk @MappedSuperclass
Paket com.my.entity; impor java.util.arraylist; impor java.util.list; impor javax.persistence.entity; impor javax.persistence.manytomany; import org.hibernate.annotations.dynamicinsert; impor org.hibernate.annotations.dypingate. org.hibernate.validator.constraints.Email;@Entity(name = "db_user")@DynamicInsert@DynamicUpdatepublic class User extends BaseUnit { /** * Account status*/ public static enum AccountStatus { /** * Normal*/ Enable, // /** * Disable */ Disable } private static final long serialVersionUID = -3101319619397064425L; kata sandi string pribadi; garam string pribadi; / ** Status Akun*/ Status Private AccountStatus; / ** Email Otentikasi*/ @email (message = "User.email Atribut harus mematuhi format email") email string pribadi; / ** Nomor Ponsel*/ Private String Mobileno; / ** Nomor ID*/ Private String CardID; @Manytomany (targetEntity = role.class) Daftar pribadi <string> RoleID; /** Nama panggilan. Opsional. */ nama panggilan string pribadi; Public String getCardId () {return cardid; } public String geteMail () {return email; } public String getMobileno () {return mobileno; } public string getNickName () {return nickname; } public string getPassword () {return kata sandi; } Daftar Publik <String> getRoleIds () {if (roleIds == null) {roleIds = ArrayList baru <> (); } return roleIDS; } public string getSalt () {return garam; } public accountstatus getStatus () {status pengembalian; } 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 (nickname string) {this.nickname = nickName; } public void setPassword (kata sandi string) {this.password = kata sandi; } public void setRoleIDS (Daftar <String> roleIds) {this.RoleIDS = roleIds; } public void setSalt (string garam) {this.salt = garam; } public void setStatus (status accountstatus) {this.status = status; }} Paket com.my.entity; impor java.io.serializable; impor java.util.date; impor javax.persistence.id; impor javax.persistence.mappedSuperclass; impor javax.validation.constraints.notnull; impor javax.validation.constraTize. org.springframework.data.annotation.createdby; impor org.springframework.data.annotation.createdDate; impor org.springframework.data.annotation Serializable {@id @notnull ID string publik; / ** * ID unit induk */ @size (maks = 32, pesan = "baseunit.parentid panjang atribut tidak dapat lebih besar dari 32") Public String ParentID; / ** Jenis unit induk*/ Public ParentType ParentType; / *** Nama unit*/ @notnull (pesan = "baseunit.name Atribut tidak dapat kosong") Nama string publik; @Createdby public string createBy; @CreatedDate Tanggal publik dibuat; @LastModifiedBy Public String LastModifiedBy; / *** Tanggal Terakhir yang Diperbarui*/ @LastModifiedDate Tanggal Publik LastModifiedDate; string publik getId () {return id; } public void setId (string id) {this.id = id; } / *** Dapatkan nama unit** @return diperlukan* / public string getName () {return name; } / ** * * @return uuid, tidak termasuk {} dan - * / public string getParentId () {return parentId; } public ParentType getParentType () {return ParentType; } public String getStationId () {return stationID; } public string getthumbnailid () {return thumbnailid; } public String getCreateBy () {return createBy; } public void setCreateBy (String createBy) {this.createBy = createBy; } tanggal publik getCreateDate () {return createdate; } public void setCreateDate (tanggal dibuat) {this.createdate = createdate; } / ** * Atur nama unit * * @param nama * diperlukan * / public void setName (nama string) {this.name = name; } / ** * Setel ID unit induk * * @param ParentId * uuid, tidak termasuk {} dan - * / public void setParentId (string parentId) {this.parentId = parentid; } public String getLastModiedBy () {return lastmodiedBy; } public void setLastModifiedBy (String lastModifiedBy) {this.lastModiedBy = lastModifiedBy; } tanggal publik getLastModiedDate () {return lastmodiedDate; } public void setLastModiedDate (tanggal lastmodiedDate) {this.lastModiedDate = lastModiedDate; }}File Konfigurasi:
Server: Port: 16800 ContextPath:/Logging: config: ./config/logback.xml Spring: http: multipart: diaktifkan: false dataSource: url: jdbc: mysql: //127.0.0.1: 3308/db? UseUnicode = true & characterencoding: uSwordername: uSwordername: uSwords/u usireName: uSwords/characterencoding: uSworder: uSword12.127. com.mysql.jdbc.driver JPA: Database: mysql show-sql: true hibernate: ddl-auto: update jackson: serialisasi: indent_output: true
#hibernate: Perilaku spesifik kelas entitas yang mempertahankan struktur tabel basis data. Pembaruan berarti bahwa ketika properti perubahan kelas entitas, struktur tabel akan diperbarui. Di sini kita juga dapat mengambil nilainya. Ini membuat berarti bahwa tabel terakhir yang dihasilkan dihapus saat startup dan meregenerasi tabel sesuai dengan kelas entitas. Pada saat ini, data dalam tabel sebelumnya akan dihapus; Ini juga dapat mengambil nilai create-drop, yang berarti bahwa tabel dihasilkan berdasarkan kelas entitas saat startup, tetapi ketika sessionFactory ditutup, tabel akan dihapus; Validasi berarti bahwa kelas entitas dan tabel data konsisten saat startup; Tidak ada yang berarti tidak ada yang dilakukan. #show-sql berarti hibernate mencetak pernyataan sql nyata di konsol saat mengoperasikan #Jackson berarti format output JSON string
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.