В этой статье представлен пример строительства Spring Boot+Spring MVC+JPA для проекта Maven. Это совместно с вами. Детали следующие:
Добавьте поддержку Spring Boot и введите связанные пакеты:
1. Проект Maven необходим для pom.xml. Для введения Spring Boot, пожалуйста, обратитесь к официальному веб -сайту:
<parent> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-parent </artifactid> <sersive> 1.5.9.Release </version> </parent> <Depective> <Depective> <groupid> javax.servlet </GroupId> <TrifActId> javax.servlet-Apactid> <cracpe> предоставлен </scope> <!-Компилируйте и публикуйте нежелательные пакеты JAR-> </DEPECENDIEN> <Dependency> <groupid> org.springframework </GroupId> <StrifactId> spring-webmvc </artifactid> </gependency> <Depeication> <groupId> org.spramework.boot </Group> <Depeication> <groupid> org.spramework.boot </Group> <strifactid> Spring-Boot-Starter-web </artifactid> </deperency> <!-JPA-пакет JAR, управление базой данных-> <Depected> <groupid> org.springframework.boot </GroupId> <Artifactid> Spring-boot-starter-data-jpa </artifactid> </ytelecty> <pegredice> <pery-boot-starter-jpa </artifactid> </artifactid> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--mysql driver--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId> org.apache.shiro </GroupId> <ArtifactId> shiro-core </artifactId> <serse> 1.2.2 </version> </dependency> <dehyed> <groupid> org.apache.shiro </GroupId> <strifactid> shiro-spring </artifactid> <seriate> 1.2.2 </verse> </repring> </repring> </repring> </repring> <//repring> </respring> </repring> </repring> </repring> </repring> </repring> </! -> <Depective> <groupId> org.apache.shiro </GroupId> <ArtifactId> shiro-ehcache </artifactid> <serse> 1.2.2 </version> </dependency> </depertion> <broad> <bricins> <groupid> org.springframework.boot </GroupD> <Effusion> <geal> <goot> переупаковка </gule> </oal> </execution> </receforments> </plugin> </plugins> <finalName> name </finalName> </build>
2. Приведенный выше код представляет Spring Boot. Spring MVC и JPA, а также JAR для драйвера для базы данных MySQL;
Запишите класс запуска и установите файл конфигурации:
1. Класс стартапов выглядит следующим образом:
Импорт org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.enableautoconfiguration; импорт org.springframework.boot.autoconfigure.springbootapplication; импорт org.springframework.data.jpa.repository.config.enablejpaauditing; импорт java.io.ioexception; import com.my.config.commonproperties;@Springbootapplication@entableAutoconfiguration@ensablejpauditingpublic application {public static void main (string] arous) 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. Поместите файл конфигурации за пределами пути класса, чтобы облегчить модификацию без переупаковки. Проекты Spring Boot, как правило, превращаются в пакеты JAR:
Импорт java.io.file; импорт java.io.fileinputStream; импорт java.io.ioexception; импорт java.util.properties; импорт org.springframework.util.stringutils; public final Class CommonProperties {public Static String pppt_key_home = "app.home"; публичная статическая конечная строка default_app_home = "./"; public Static Final String getApphome () {return System.getProperty ("./", "./"); } public Static String LoadProperties2System (LOCE LOCE) THRES IOEXCEPTE {String configlocation = location; Файл CNF; if (! stringutils.haslength (location)) {configlocation = "./config"; CNF = новый файл (configlocation); if (! cnf.exists () ||! cnf.isdirectory ()) {configlocation = "../config"; CNF = новый файл (configlocation); }} else {cnf = new File (location); } File [] arg2 = cnf.listfiles (); int arg3 = arg2.length; for (int arg4 = 0; arg4 <arg3; ++ arg4) {file file = arg2 [arg4]; if (file.isfile () && fail.getName (). Endswith (".. Properties")) {Properties ppt = new Properties (); FileInputStream fi = new FileInputStream (file); Бросаемый arg8 = null; try {ppt.load (fi); System.getProperties (). Putall (ppt); } catch (бросаемый arg17) {arg8 = arg17; бросить arg17; } наконец {if (fi! = null) {if (arg8! = null) {try {fi.close (); } catch (throwable arg16) {arg8.addsuppressed (arg16); }} else {fi.close (); }}}} return configlocation; } public Static String getVersion (class <?> clazz) {package pkg = clazz.getPackage (); Строка ver = pkg! = Null? pkg.getimplementationVersion (): «не определен»; вернуть ver == null? «Не определены»: ver; }Поместите файл конфигурации в папку конфигурации каталога пакета JAR на том же уровне, включая конфигурацию журнала, файл Application.yml, другие файлы конфигурации и т. Д.;
Записать классы автоматической конфигурации
Используется для сканирования компании*вместо файла конфигурации Spring MVC Spring.xml:
импорт org.springframework.context.annotation.componentscan; import org.springframework.context.annotation.configuration;@configuration@componentscan (basepackages = {"com.my.rs", "com.my.service", "com.my.repository"}) org.springframework.boot.autoconfigure.web.httpmessageconverters; import org.springframework.context.annotation.bean; импорт org.springframework.context.annotation.nantation. org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/** * Preconfiguration* */@Configurationpublic class MyConfiguration extends WebMvcConfigurerAdapter{ @Bean public HttpMessageConverters customConverters() { return new HttpMessageConverters(); } @Override public void addresourceHandlers (Реестр ресурсов-рудка) {//registry.addresourcehandler("/** ") // .адрузирселокации (" classpath:/meta-inf/** "); }Напишите RS, Service, Repository
пакет com.my.rs; import java.util.list; import org.springframework.web.bind.annotation.requestbody; import org.springframework.web.bindtation.requestmapping; импорт org.springframework.web.bindation.requestmathd; org.springframework.web.bind.annotation.requestparam; import org.springframework.web.bind.annotation.responsebody; import com.my.entity.user; @Requestmapping ({"/api/user"}) public userrs {@Requestmapping (value = ", addSeThod {value =", addStodeStom @Responsebody public user saveUser (пользователь пользователя @Requestbody); @Requestmapping (value = "/update", method = {requestMethod.post}) @Responsebody public usementUser (@Requestbody пользователь пользователя); @Requestmapping (value = "/delete", method = {requestMethod.post, requestMethod.delete}) public void deleteUser (@RequestParam string [] userIds); @Requestmapping (value = "/get", method = {requestMethod.get}) @Responsebody public user getUser (@RequestParam String userId); @Requestmapping (value = "/Query/all", method = {requestMethod.get}) public list <user> Queryall (); @Requestmapping (value = "/Query/byname", method = {requestMethod.get}) public <user> QueryByName (@RequestParam String name); @Requestmapping (value = "/Query/byparentId", method = {requestMethod.get}) public list <uster> QueryChildren (@RequestParam String parentId); // Нет параметра страхового запроса @RequestMapping (value = "/Query/page", method = {requestMethod.get}) Общедоступный список <user> QueryBypage (@RequestParam int pageno, @RequestParam int pageSize, @Requestbody (обязательный = false) пользователь);};};};};};};}; пакет com.my.rs.impl; import java.util.list; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.beans.factory.annotation.autowired; import org.springforkwork.web.bindation.antation.requestoby; org.springframework.web.bind.annotation.restcontroller; import com.my.entity.user; import com.my.rs.userrs; импорт com.my.service.userservice; @restcontrollerpublic class userrsimpl emplomsire userrs {public static logger = usersimplesmplements {public static loggercfortory. @Autowired userservice _userservice; @Override public user saveUser (пользователь пользователя @Requestbody) {try {return _userservice.save (user); } catch (throwable e) {logger.error (e.getMessage (), e); бросить E; }} @Override public User UpdateUser (@Requestbody пользователь пользователя) {return _userservice.update (user); } @Override public void deleteUser (string [] userIds) {for (String userId: userIds) {_UserService.deleteByid (userId); }} @Override public list <user> Queryall () {return _userservice.queryall (); } @Override public list <user> QueryByName (String name) {return _UserService.findbyName (name); } @Override public list <uster> Querychildren (String parentid) {return _userservice.findbyparentid (parentid); } @Override public user getUser (string userid) {return _userservice.findbyid (userid); } @Override public list <user> QueryBypage (int pageno, int pagesize, пользователь пользователь) {return null; }} пакет com.my.service; import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stepoly.service; импорт com.my.entity.user; импорт com.my.repository.userRepository; @Autowired userRepository _userRepository; public list <user> findbyname (string name) {return _userRepository.findbyname (name); } public List <user> findByparentId (String parentId) {return _userRepository.findbyparentId (parentId); }} пакет com.my.repository; import java.util.list; import com.my.entity.user; public userRepository extends baserepository <user> {list <user> findbyname (string name); Список <user> findByparentId (String parentId);}Вышеуказанное принимает многослойную модель, которая немного громоздкой, но более удобно изменить бизнес -логику каждого уровня позже.
Связанные с JPA классы следующие:
Пакет com.my.service; импорт java.io.serializable; импорт javax.persistence.entitymanager; импорт javax.transaction.transactional; импорт org.springframework.beans.factory.annotation.autowired; BaseService <E расширяет serializable> {@autowired baserepository <e> _baserepository; @Autowired entitymanager em; public 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); }} пакет com.my.repository; import java.io.serializable; импорт org.springframework.data.jpa.repository.jparepository; импорт org.springframework.data.repository.norepositorybean; Serializable> {}Класс объектов: связанный с полями базы данных, вам необходимо обратить внимание на аннотацию в родительском классе @mappedsuperclass
пакет com.my.entity; import java.util.arraylist; import java.util.list; импорт javax.persistence.entity; import javax.persistence.manytomany; импорт org.hibernate.annotation.dynamicinsert; импорт org.hibernate.annotations.dynamicupdate; импорт. org.hibernate.validator.constraints.email; @entity (name = "db_user")@dynamicinsert@dynamicupdatepublic class Пользователь Extens BaseUnit { / *** Статус учетной записи* / public static enum accessultatus { / *** Нормально* enable, // ** ** -3101319619397064425L; Private String Password; частная струнная соль; / ** Статус учетной записи*/ Статус частной учетной записи; / ** Электронная почта аутентификации*/ @email (message = "user.email Атрибут должен соответствовать формату электронной почты") Private String Email; / ** Номер мобильного телефона*/ частная строка Mobileno; / ** Идентификационный номер*/ частная строка Cardid; @Manytomany (targetentity = role.class) частный список <string> Roleids; /** Прозвище. Необязательный. */ private String pickname; public String getCardid () {return cardid; } public String getEmail () {return Email; } public String getMobileno () {return mobileno; } public String getNickName () {return chicname; } public String getPassword () {return пароль; } public List <string> getRoleids () {if (roleids == null) {roleids = new ArrayList <> (); } return Roleids; } public String 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 (String Nickname) {this.nickName = никнам; } public void setPassword (String password) {this.password = password; } public void setRoleids (list <string> roleids) {this.roleids = roleids; } public void setsalt (String Salt) {this.salt = salt; } public void setStatus (accountstatus status) {this.status = status; }} пакет com.my.entity; import java.io.serializable; import java.util.date; импорт javax.persistence.id; import javax.persistence.mappedsuperclass; импорт javax.validation.constraints.notnull; импорт javax.validation.constraints.size; org.springframework.data.annotation.createdby; import org.springframework.data.annotation.createddate; импорт org.springframework.data.annotation.lastmodifiedby; импорт org.springframework.dataNatation.lastmoditemedby; Serializable {@id @notnull public String id; / ** * Идентификатор родительского блока */ @size (max = 32, message = "baseunit.parentid Длина атрибута не может быть больше 32") открытая строка Parentid; / ** Тип родительской единицы*/ public parenttype parentype; / **! @Createdby public String createby; @Createddate public date clevateate; @Lastmodifiedby public String lastmodifiedby; / *** Последняя обновленная дата*/ @lastmodifieddate public date lastmodifieddate; public String getId () {return id; } public void setId (String id) {this.id = id; } / *** Получить имя единицы** @return требуется* / public String getName () {return name; } / ** * * * @return uuid, исключая {} и - * / public String getParentId () {return parentId; } public parteStype 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; } public date getCreatedAte () {return cantureTate; } public void setCreatedAte (дата создан) {this.createdate = censueTate; } / ** * Установите имя единицы * * @param name * обязательно * / public void setname (string name) {this.name = name; } / ** * Установить идентификатор родительского блока * * @param parentid * uuid, исключая {} и - * / public void setParentid (String parentId) {this.parentid = parentId; } public String getLastModifiedBy () {return LastModifiedBy; } public void setlastModifiedby (String lastModifiedBy) {this.lastmodifiedby = lastmodifiedby; } public Date getLastModifiedDate () {return LastModifiedDate; } public void setlastModifiedDate (дата LastModifiedDate) {this.lastmodifiedDate = LastModifiedDate; }}Файл конфигурации:
Сервер: порт: 16800 ContextPath:/журнал: config: ./config/logback.xml Spring: http: Multipart: включен: False DataSource: URL: JDBC: MySQL: //127.0.0.1: 3306/db? USEUNICODE = TRUE & HARTICODING = UTF-8 USERNAME: ROOTASSCLAMSCLAMCLAMSCLAMEMCLAMEMCLAMEMCLAMEMCLAMSCLAMEMCLEMCLENCLENCLINCLINGENCODING = uTF-8: 1234. com.mysql.jdbc.driver jpa: база данных: mysql show-sql: true hibernate: ddl-auto: обновление Jackson: serialization: indent_output: true
#hibernate: конкретное поведение класса сущности, поддерживающее структуру таблицы баз данных. Обновление означает, что при изменении свойств класса объектов структура таблицы будет обновлена. Здесь мы также можем взять ценность создать. Это создание означает, что последняя сгенерированная таблица была удалена при запуске и регенерирует таблицу в соответствии с классом сущности. В настоящее время данные в предыдущей таблице будут очищены; Он также может потребовать значения Create-Drop, что означает, что таблица генерируется на основе класса сущности при запуске, но когда сеанс-фактор будет закрыт, таблица будет удалена; проверка означает, что класс объектов и таблица данных согласованы при запуске; Никто не означает, что ничего не сделано. #Show-SQL означает Hibernate Prints Real SQL оператора на консоли при работе #Jackson означает форматированный выход json string
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.