JavaRush /Java блогы /Random-KK /Maven, Spring, MySQL, Hibernate және бірінші CRUD қолданб...
Макс
Деңгей

Maven, Spring, MySQL, Hibernate және бірінші CRUD қолданбасына кіріспе (1 бөлім)

Топта жарияланған
Қайырлы күн. Бұл мақалада мен қарапайым CRUD қосымшасын жасау процесінде Maven, Spring, Hibernate, MySQL және Tomcat сияқты нәрселермен алғашқы кездесуіммен бөліскім келеді. Бұл 4-ші бөлімнің бірінші бөлімі. Мақала негізінен мұнда 30-40 деңгейді аяқтаған, бірақ әлі таза Java-дан асып кетпеген және ашық әлемге енді ғана кіре бастаған (немесе бастағалы) адамдарға арналған. барлық осы технологиялар, фреймворктар және басқа да бейтаныс сөздер. Maven, Spring, MySQL, Hibernate және бірінші CRUD қолданбасына кіріспе (1 бөлім) - 1

Мазмұны:

Кіріспе

Мен өзім үшін жаңа технологиялармен және фреймворктермен танысуды олар қолданылған әртүрлі мысалдарды зерделеу арқылы бастадым, өйткені мен әдетте толыққанды қосымшаның мысалын қолдана отырып, оны әрекетте көргенде жақсырақ түсінемін. Әдетте, мұндай мысалдар CRUD қолданбалары болып табылады ( C reate, Read , U pdate, D elete), Интернет әртүрлі дәрежедегі күрделіліктің мысалдарына толы. Мәселе мынада, олар әдетте ол жерде қалай, не және не үшін жасалды, неге анау-мынау тәуелділік қосылды, анау-мынау класс не үшін қажет және т.б. егжей-тегжейлі түсіндірмейді. Көп жағдайда олар соңғы POM файлы бар, сабақтардың соңғы нұсқалары бар толығымен дайын қосымшаны алады және тәжірибелі адамға түсінікті болып көрінетін ұсақ-түйектерге назар аудармай, әрқайсысын жай ғана орындайды. Мен мұндай мысалдардың көбін қарадым және әдетте бәрі қалай жұмыс істейтіні түсінікті, бірақ олардың бұған қалай келгені толық түсініксіз. Сондықтан мен мұндай мысал тәжірибелі әзірлеуші ​​емес, көктем, күту және басқа нәрселермен ешқашан айналыспаған бастаушы позициясынан пайдалы болады деп шештім.
Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 2
Мен мүмкіндігінше егжей-тегжейлі сипаттауға тырысамын (менің түсінігім бойынша) қарапайым Hello World деңгейіндегі нәрседен бастап, CRUD қосымшасын жасаудың бүкіл жолын. Ең алдымен, мен мұны өзім үшін істеймін, өйткені сіз бір нәрсені сипаттауға, айтуға, түсіндіруге тырысқанда, ол сіздің басыңызға әлдеқайда жақсы сіңіп, жүйеленеді. Бірақ егер бұл біреуге пайдалы болса және оларға бірдеңені анықтауға көмектессе, мен өте қуаныштымын. Бұл мысалда Maven , Tomcat , Spring , Hibernate және MySQL көмегімен қарапайым CRUD қолданбасын жасауға тырысайық . Maven , MySQL орнату, идеяның Ultimate нұсқасын пайдалану сияқты алдын ала қадамдар және т.б. Менің ойымша, егжей-тегжейлі сипаттаудың қажеті жоқ, бұл мәселеде ешқандай проблемалар болмауы керек. Айта кету керек, бұл мысалда конфигурация xml қолданбай Java сыныптары (JavaConfig деп аталады) арқылы конфигурацияланатын болады.

Жоба құру

Сондықтан, мен жаңадан келгендіктен, біз ешқандай түсініксіз архетиптерді қолданбаймыз. Көктемгі инициализатор әлі де қорқынышты естіледі. Сондықтан біз ең қарапайым қарапайым Maven жобасын жасаймыз. Менде домендік атау жоқ, сондықтан groupid-де жай ғана жазамын testgroup, ал артефактиде мен атын жазамын, мысалы, filmography(бұл фильмдер тізімі болады). Біз жобаны жасаймыз және Enable auto-importидея оны ұсынған кезде таңдаймыз. Осының арқасында біз POM файлына кез келген өзгертулер енгізген сайын (Project Object Model, бұл файл Maven жобасының бүкіл құрылымын сипаттайды), бәрі бірден жобаға автоматты түрде қолданылады. Кітапханалар жергілікті репозиторийден алынады, егер бізде олар бұрыннан бар болса немесе біз бұрын қарастырылмаған жаңа тәуелділіктерді пайдалансақ, Maven оларды орталық репозиторийден Интернет арқылы жүктеп алады. Maven сонымен қатар дереккөздер мен құжаттаманы жүктеп алу функциясына ие (Көздерді жүктеп алу және/немесе құжаттама). Бұл өте ыңғайлы, егер қандай да бір сыныпта немесе әдісте бірдеңе түсініксіз болса, бастапқы codeқа өтіп, оның ішінде қалай жұмыс істейтінін көруге болады. Бір-екі мәліметтерді қосайық. Бұл веб-қосымша болады және біз Tomcat пайдаланамыз . Қолданбаны Tomcat-қа орналастыру үшін оны соғыс мұрағаты түрінде жіберу керек (Web Application Resource, веб-қосымшаларға арналған арнайы пішім). Мұны істеу үшін POM файлына келесі жолды қосыңыз, осылайша қолданба соғыс мұрағатына жинақталады:
<packaging>war</packaging>
Сондай-ақ сізге веб-көздер үшін арнайы каталог қажет болады, біздің жағдайда jsp беттері және кейбір веб-ресурстар болады . mainКаталог құрайық webapp. mainОны дәл осылай атаған жөн және дәл солай орналасуы керек java, resourcesсебебі бұл Maven каталогының стандартты құрылымы. Біз буманы орнатқаннан кейін warжәне осылайша бұл веб-жоба екенін анықтағаннан кейін, каталог webappавтоматты түрде веб-бағдарлама көздері ретінде белгіленеді (онда көк нүкте болады) және вебке қатысты барлық нәрсе осы қалтада ізделеді. Және бір сәт. Әдепкі бойынша, Maven 1.5 тіл нұсқасын пайдаланады, бірақ мен, мысалы, 1.8 нұсқасын - Java 8 нұсқасын қолданғым келеді (10 немесе 11 алуға болады, бірақ әлі де ол жерден ешқандай мүмкіндіктерді пайдалану жоспарлары жоқ, сондықтан ол 8 болсын. ). Мұны өте оңай шешуге болады, біз Google-да «Maven java 8» сияқты нәрсені жазамыз және Maven қажетті нұсқаға біздің сабақтарымызды құрастыру үшін POM файлына не қосу керектігін көреміз. Нәтижесінде бізде келесілер бар: Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 3

Көктемгі MVC қосылымы

Бір жерден бастау керек. Жоспарға сәйкес, біз дерекқорды қосып, Hibernate режимін қолданамыз, бірақ мұның бәрі әзірше тым қорқынышты болып көрінеді. Алдымен біз қарапайым нәрсе жасауымыз керек. Көктемгі MVC, бұл қазірдің өзінде жақсырақ, біз MVC үлгісімен ұзақ уақыт бойы таныспыз, ол курстың үлкен тапсырмаларының жартысында қолданылған. Осы жерден біз билей бастаймыз. Spring MVC көмегімен веб-қосымшаны жасау үшін бізге Servlet-API қажет, яғни. оның көмегімен сұрау-жауап әрекеті жүзеге асатын нәрсе. Мұны қосуға тырысайық. Біз Google-ге барамыз, Maven репозиторийінен қажетті тәуелділіктерді іздейміз және оларды pom.xml. Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 4«Сыртқы кітапханалар» бөлімінде сіз тек spring-webmvc жүктелгенін ғана емес , сонымен қатар басқа да көптеген нәрселерді көре аласыз. Анау. көктемгі өзек , контекст , бұршақ және т.б. үшін тәуелділіктерді қосымша қосудың қажеті жоқ. бізге қажет нәрсенің бәрі spring-webmvc бірге тартылды .

Бізге шағын ескерту жасау керек. Әдетте, олар бұрыннан қосылғандармен жинақталған болса да, пайдаланылған әрбір кітапхана үшін тәуелділікті бөлек қосу ұсынылады, өйткені бұл кейбір мәселелер мен ақауларды болдырмауға көмектеседі.

Қарапайым мысал. Кейбір API қолданатын тәуелділікті қостық делік және сонымен бірге ол осы API үшін іске асырудың қандай да бір түрін шығарады. Содан кейін біз бірдей API қолданатын тағы бір тәуелділікті қостық және бұл үшін оның кейбір іске асырылуын тартады, бірақ бұл жолы ол басқаша. Осылайша, бізде бір API-нің 2 түрлі іске асырылуы болады. Егер біз өзіміз осы API-нің кейбір әдістерін бір жерде қолданғымыз келсе, онда мәселе туындайды, өйткені жүйе қандай іске қосуды пайдалану керектігін білмейді, ол кездейсоқ таңдайды, мүмкін біз күткенді емес. Егер сіз іске асырудың біреуіне тәуелділікті нақты көрсетсеңіз, оған басымдық беріледі.

Дегенмен, бұл қатаң ұсыныс емес, ол негізінен әртүрлі компаниялардың көптеген әртүрлі кітапханалары пайдаланылатын ірі жобаларға қатысты. POM файлын тым көп жүктемеу үшін біз мұны істемейміз; ешқандай проблемалар күтілмейді. Бірақ соған қарамастан, мұны әлі де есте ұстаған жөн.

Тағы бір ескертпе. providedТәуелділік нені білдіреді javax.servlet-api? Қолдану аясы – тәуелділік ауқымы, providedбұл тәуелділік қолданбаны құрастыру және сынау сатысында қолжетімді болады, бірақ ол мұрағатталмайды. Қолданбаны орналастыру үшін біз Tomcat сервлет контейнерін қолданамыз және оның ішінде мұндай кітапханалар бар, сондықтан оларды сол жерге тасымалдаудың және мұрағатты қажетсіз жүктемемен жүктеудің қажеті жоқ. Болашаққа қарап, дәл сол себепті біз әдеттегі әдіссіз жасаймыз main, өйткені ол Tomcat ішінде бұрыннан бар.

Беттерді және контроллерді жасау

Енді қарапайым нәрсе пісіріп көрейік. Алдымен, қосымша каталог жасайық webapp, мысалы pages, онда біздің көріністер сақталады, яғни. jsp беттерін ашыңыз және бірнеше бет жасаңыз. Бізге болашақта фильмдер тізімі көрсетілетін бет қажет болады, мысалы films.jsp, және мүмкін редакциялау үшін бөлек бет жасай аламыз editPage.jsp. Біз оларды әзірше маңызды ештеңемен толтырмаймыз; тек сынақ үшін біз бір бетте екіншісіне сілтеме жасаймыз. Енді бізге сұраныстарды өңдейтін сынып қажет, яғни. контроллер. Жаңа бума қосып controller, оған класс жасайық FilmController(жалпы, барлығын әртүрлі бумаларға буып алудың қажеті жоқ, бұл қолданба өте шағын және қарапайым болады, бірақ қалыпты жобада көптеген контроллерлер, конфигурация кластары, модельдер болуы мүмкін. , және т. Бұл сыныпта сұрауларға жауап ретінде көзқарастарымызды қайтаратын әдістерді жасаймыз.
package testgroup.filmography.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class FilmController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public ModelAndView allFilms() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("films");
        return modelAndView;
    }

    @RequestMapping(value = "/edit", method = RequestMethod.GET)
    public ModelAndView editPage() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("editPage");
        return modelAndView;
    }
}
Мұның мәні неде? Spring MVC деп аталатын нәрсе бар DispatcherServlet. Бұл негізгі контроллер сияқты, барлық кіріс сұраулар ол арқылы өтеді, содан кейін ол оларды белгілі бір контроллерге береді. Аннотация жай ғана Spring MVC-ге бұл класс контроллер (жақсы, жалпы логикалық) екенін айтады, диспетчер сәйкес әдісті шақыру үшін @Controllerannotationларды тексереді . @RequestMappingАннотация @RequestMappingконтроллер әдістерінің мекенжайларын көрсетуге мүмкіндік береді, олардың көмегімен олар клиентте (шолғышта) қолжетімді болады. Ол сондай-ақ барлық әдістер үшін түбірлік мекенжайды орнату үшін контроллер класына қолданылуы мүмкін. Әдістің allFilms()параметрі value" " күйіне орнатылған , сондықтан ол http://host:port// комбинациясы браузерге енгізілгенде дереу шақырылады (яғни, әдепкі бойынша ол http://localhost:8080/ немесе http болып табылады. ://127.0 .0.1:8080/ ). Параметр сұраудың қандай түріне қолдау көрсетілетінін көрсетеді (GET, POST, PUT, т.б.). Бұл жерде біз тек деректерді қабылдайтындықтан, GET қолданылады. Кейінірек қосу және өңдеу әдістері пайда болғанда, POST сұраулары әлдеқашан болады. (Айтпақшы, әдісті көрсететін annotationның орнына annotationларды және т.б. баламалы түрде қолдануға болады ) ) . Біздің әдістерімізде біз an object жасаймыз және қайтарылуы қажет көріністің атын орнатамыз. method@RequestMapping@GetMapping@PostMapping@GetMapping@RequestMapping(method = RequestMethod.GETModelAndView

Конфигурация

Конфигурацияны орнатуға көшейік. Пакетте configкласс жасайық WebConfig. Онда түрдегі нысанды қайтаратын бір ғана әдіс болады ViewResolver, бұл атау бойынша ұсынуды табу үшін қажетті интерфейс.
package testgroup.filmography.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "testgroup.filmography")
public class WebConfig {

    @Bean
    ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/pages/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}
@ConfigurationSpring бұл класс конфигурация класы және beanқұрамдастардың анықтамалары мен тәуелділіктерін қамтитынын айтады. Бұршақтар көктем басқаратын нысандар болып табылады. Аннотация бұршақты анықтау үшін пайдаланылады @Bean. @EnableWebMvcішінен Spring MVC конфигурациясын импорттауға мүмкіндік береді WebMvcConfigurationSupport. Сіз сондай-ақ, мысалы, WebMvcConfigurerкөптеген әдістер жиынтығы бар интерфейсті іске асыра аласыз және барлығын өз қалауыңыз бойынша теңшей аласыз, бірақ біз оған әлі кірудің қажеті жоқ, стандартты параметрлер жеткілікті. @ComponentScanSpring-ге ол басқаруы керек компоненттерді қайдан іздеу керектігін айтады, яғни. annotationмен белгіленген сыныптар немесе , , @Componentсияқты туындылары . Бұл annotationлар класс бұршағын автоматты түрде анықтайды. Әдісте біз оның орындалуын жасаймыз және ішінде өкілдіктерді қай жерден іздеу керектігін анықтаймыз . Сондықтан, контроллер әдісінде біз " " атауын орнатқан кезде көрініс " " ретінде табылады . Сонымен, бізде конфигурация сыныбы бар, бірақ әзірге бұл жеке класстың бір түрі, ол біздің қолданбамызға ешқандай әсер етпейді. . Бұл конфигурацияны Spring контекстінде тіркеуіміз керек. Ол үшін сізге сынып қажет . Бумада біз оның мұрагерін жасаймыз, айталық AppInitializer , және оның әдістерін жүзеге асырамыз. @Controller@Repository@ServiceviewResolver()webappfilms/pages/films.jspAbstractAnnotationConfigDispatcherServletInitializerconfig
package testgroup.filmography.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}
Соңғы әдіс мекенжайларды тіркейді және конфигурация кластарын тіркеудің тағы 2 әдісі бар. Веб конфигурациялары, онда ViewResolver's және т.б. анықталған жерде орналасады getServletConfigClasses(). Мұның бәрі туралы құжаттамада және әртүрлі нұсқаулықтарда оқыған дұрыс, бірақ біздің жағдайда бұл туралы әлі де тереңдеудің қажеті жоқ, біздікі, WebConfigнегізінен, RootClassesекеуінде де анықталуы мүмкін, тіпті екеуін де бірден анықтауға болады, ол әлі де жұмыс істейді . Тағы бір нәрсе. Пішіннен орыс таңбалары бар мәндерді жіберген кезде, нәтиже сызбалар болған кезде codeтауда қиындықтар туындауы мүмкін. Бұл мәселені шешу үшін сұрауларды алдын ала өңдейтін сүзгіні қосамыз. Біз AppInitializer сыныбына өтіп , әдісті қайта анықтаймыз getServletFilters, онда біз қажетті codeтауды көрсетеміз, ол, әрине, беттердегі және дерекқордағы сияқты барлық жерде бірдей болуы керек:
protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        return new Filter[] {characterEncodingFilter};
    }
Барлығы орнатылған сияқты, сіз оны іске қосып көріңіз және не болатынын көре аласыз. Іске қосу -> Іске қосу -> Конфигурацияларды өңдеу -> Жаңа конфигурация қосу -> Tomcat serverі -> Жергілікті Келесіде орналастыру үшін артефакт таңдау керек. Идеяның өзі кеңес береді Ескерту: орналастыру үшін ешқандай артефактілер белгіленбеген . Түзету түймесін басып , ... таңдаңыз : соғыс жарылды . Немесе Орналастыру -> қосу -> Артефакт -> ... тармағына өтуге болады : соғыс жарылды . Сондай-ақ «Орналастыру» бөліміне өтіп, Applecation контекстік өрісін (бұл қолданба браузерде қолжетімді болатын url мекенжайының бөлігі болады) « » күйіне орнатуыңыз Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 5керек . Содан кейін біздің қосымшамыз http://localhost:8080/ мекенжайында дереу қолжетімді болады (бірақ сіз сол жерде бірдеңені көрсете аласыз, мысалы, " ", содан кейін оны барлық мекенжайларға қосу керек, яғни, мысалы, ол жерде болмайды. " http://localhost:8080/edit" , бірақ ол "http://localhost:8080/filmography/edit" болады ). «Іске қосу» түймесін басып , ол басталғанша күтіңіз. Мен мынаны алдым: бәрі жақсы сияқты, бірақ бір ескерту бар. Өйткені, біздің парақшаларымыз енді жалпыға қолжетімді және мекенжай жолағында жолды жазу арқылы тікелей қол жеткізуге болады. Біз http://localhost:8080/pages/films.jsp сайтына кіреміз , енді біз өз бетімізді контроллердің білмеуінсіз алдық. Бұл өте дұрыс емес, сондықтан біз арнайы каталог жасаймыз . Ішіндегі нәрсе жұртшылықтан жасырылады және оған тек контроллер арқылы қол жеткізуге болады. Біз өз көріністері бар каталогты ( ) ішіне орналастырамыз және сәйкесінше оны префикске қосамыз: /Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 6/filmographyЗнакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 7webappWEB-INFpagesWEB-INFViewResolver
viewResolver.setPrefix("/WEB-INF/pages/");
Енді біз өз бетімізді http://localhost:8080 мекенжайында аламыз , бірақ тікелей http://localhost:8080/WEB-INF/pages/films.jsp арқылы әрекет етсек, 404 қатесін аламыз. Жақсы, тамаша, бізде Ең қарапайым веб-қосымша, олар айтқандай, Hello World. Қазіргі уақытта жоба құрылымы келесідей көрінеді:
Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 8

Үлгі

Бізде қазірдің өзінде көріністер мен контроллер бар, бірақ MVC-де 3-ші әріп бар, сондықтан суретті аяқтау үшін біз үлгі қосамыз. Пакетте modelсыныпты жасайық Film, мысалы, келесі өрістермен: int id, String title(атауы), int year(шығарылған жылы), String genre(жанр) және boolean watched(яғни, сіз бұл фильмді көрдіңіз бе, жоқ па).
package testgroup.filmography.model;

public class Film {
    private int id;
    private String title;
    private int year;
    private String genre;
    private boolean watched;
// + Getters and setters
}
Ерекше ештеңе жоқ, қарапайым сынып, жеке өрістер, алушылар мен орнатушылар. Мұндай класстардың an objectілері POJO(Plain Old Java Object) деп те аталады, жақсы, яғни. «қарапайым java нысаны». Енді осындай нысанды жасап, оны бетте көрсетуге тырысайық. Әзірге біз оны қалай жасау және инициализациялау туралы көп алаңдамаймыз. Оны сынап көру үшін оны тікелей контроллерде жасайық, мысалы, келесідей:
public class FilmController {
    private static Film film;

    static {
        film = new Film();
        film.setTitle("Inception");
        film.setYear(2010);
        film.setGenre("sci-fi");
        film.setWatched(true);
    }
ModelAndViewОсы әдісті пайдаланып, бұл нысанды бізге қосыңыз addObject:
@RequestMapping(method = RequestMethod.GET)
    public ModelAndView allFilms() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("films");
        modelAndView.addObject("film", film);
        return modelAndView;
    }
Енді біз бұл нысанды өз бетімізде көрсете аламыз. «Hello World» орнына films.jspбіз жазамыз ${film}және « » атрибут атауына сәйкес нысан filmосы жерде ауыстырылады. Оны іске қосып, не болғанын көрейік (нысанның анық шығуы үшін сынып Filmқайта анықталды toString()):
Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 9

Үлгі-көрініс-контроллер

Осы кезеңде бізде толыққанды Spring MVC қосымшасы бар сияқты. Әрі қарай қозғалмас бұрын, бәрін қайта қарап, оның қалай жұмыс істейтінін анықтаған дұрыс. Интернетте сіз бұл туралы көптеген суреттер мен диаграммаларды таба аласыз, маған бұл ұнайды:
Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 10
Браузер жолына сұраныс жазғанда, ол қабылданады Dispatcher Servlet, содан кейін ол осы сұрауды пайдалану арқылы өңдеу үшін қолайлы контроллерді табады HandlerMapping(бұл контроллерді таңдауға арналған интерфейс, қол жетімді контроллердің қайсысында мұндай мекенжайды қабылдайтын әдіс бар екенін тексереді) , қолайлы әдісті шақырады және Controllerкөрініс туралы ақпаратты қайтарады, содан кейін диспетчер ViewResolver'a арқылы аты бойынша қалаған көріністі табады, содан кейін үлгі деректері осы көрініске тасымалданады және біз бетті шығыс ретінде аламыз. Солай. Жалғасы бар... Maven, Spring, MySQL, Hibernate және бірінші CRUD қолданбасымен таныстыру (1-бөлім) Maven, Spring, MySQL, Hibernate және бірінші CRUD қолданбасымен таныстыру (2-бөлім) Maven, Spring, MySQL, Hibernate және бірінші CRUD қолданбасы (3-бөлім) Maven, Spring, MySQL, Hibernate және бірінші CRUD қолданбасына кіріспе (4-бөлім)
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION