JavaRush /Java Blog /Random-TK /Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmas...
Макс
Dereje

Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy bilen tanyşlyk (4-nji bölüm)

Toparda çap edildi
Günüňiz haýyrly bolsun! Bu makalada ýönekeý CRUD programmasyny döretmek prosesinde Maven, Bahar, Gibernate, MySQL we Tomcat ýaly zatlar bilen ilkinji duşuşygymy paýlaşmak isleýärin. Bu soňky bölüm. Makala, esasan, bu ýerde eýýäm 30-40 derejäni tamamlan, ýöne entek arassa Java-dan geçip bilmedikler we bu tehnologiýalar, çarçuwalar we beýleki nätanyşlar bilen açyk dünýä girip başlaýanlar üçin niýetlenendir. sözleri. Bu, “Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy” atly makalanyň soňky dördünji bölümi. Öňki bölekleri baglanyşyklara eýerip görmek bolýar:

Mazmuny:

Dizaýn we web çeşmeleri

Programmamyz işleýär, ýöne gözýaşsyz, içgysgynç ýazgylar, ýigrenji baglanyşyklar, boş ak fon bilen seredip bilmersiňiz. Muny düzedip, dürli gözellikleri goşmaly. Muny nädip etmeli? Ilki bilen, diňe sahypalar bilen oýnap, HTML mümkinçiliklerinden peýdalanyp her dürli zatlar edip bilersiňiz . Onlyöne diňe HTML ulanyp, fon, reňk, ululyk, elementleriň tertibi we ş.m. üýtgetjek bolsaňyz. we ş.m. soňunda sahypadan şeýle bir bulaşyklyk edip bilersiňiz welin, soňundan hiç zat edip bilmersiňiz. Mundan başga-da, HTML-iň dizaýn opsiýalary gaty çäklidir. Munuň üçin CSS (Kaskadly stil sahypalary) ulanmak has gowudyr. Soňra dizaýn bilen baglanyşykly hemme zady bir ýerde ýygnap, soňra sahypanyň islenýän elementine ulanyp bolýar. CSS kody göni JSP sahypasynda ýörite bellikde ýazylyp bilner , ýöne ony aýratyn faýla salmak, soňra bolsa zerur sahypalara ulanmak has amatly. Stil we beýleki statiki web çeşmeleri bolan faýllary ýerleşdirmek üçin webapp-yň içinde aýratyn katalog dörederis . Web çeşmelerini yzygiderli çeşmeler bilen bulaşdyrmazlyk üçin ( db.propertiesimiz bar ), geliň, bu kataloga jaň edip , ähli CSS faýllaryny, suratlaryny we ş.m. şol ýere ýerleşdireliň:
Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy (4-nji bölüm) - 1
Bu faýllary ulanmak üçin konfigurasiýada olaryň ýerleşýän ýerini görkezmeli. Geliň, synpymyza geçeliň WebConfig. Ozal bellikleri @EnableWebMvchiç zat düzmezlik üçin ulanýardyk, ýöne adaty konfigurasiýany ulanýardyk. Nowöne indi bir zady düzmek zerurlygy bar. Munuň üçin WebMvcConfigurerkonfigurasiýa usullaryny ýok etmäge mümkinçilik berýän interfeýsi ulanýarys. Bu. deslapky konfigurasiýany ulanyp bileris, ýöne şol bir wagtyň özünde käbir taraplary özümiz üçin düzüp bileris. Bu ýagdaýda addResourceHandlersbize statiki web çeşmeleriniň ýerleşişini görkezýän usul gerek. Diňe şeýle bolsa, tutuş synp şeýle görünýär:

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.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

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

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/res/**").addResourceLocations("/res/");
    }

    @Bean
    ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/pages/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}
Indi sahypamyzda CSS-ni ulanmak üçin ony belligiň içinde baglanyşdyrmaly head:

<head>
    <link href="<c:url value="/res/style.css"/>" rel="stylesheet" type="text/css"/>
</head>
Diňe şu setiri goşuň we mysal üçin bu ýönekeý CSS faýly düzüň:

table {
    border-spacing: 0 10px;
    font:  bold 100% Georgia, serif;
    margin: 40px auto;
    text-shadow: 5px 5px 5px #3F3F7F;
    background: #B1B9D9;
    text-align: center;
    vertical-align: middle;
    width: 50%;
    border: 10px solid blue;
}
Bu bolsa stolumyzy düýpgöter üýtgeder (elbetde samsyk ýaly görünýär, ýöne şuňa meňzeýär): Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy (4-nji bölüm) - 2Dogrusy, CSS hakda jikme-jik gürleşmegiň zerurlygy ýok, hemme zat gaty ýönekeý. Internetde tablisalary we formalary dizaýn etmek üçin köp taýýar wariant tapyp bilersiňiz. Elbetde, dizaýny özüň etmek has gowudyr, dizaýner bolmak hökman däl, ahyrsoňy bu bir hili çylşyrymly sahypa däl. Ilkinji tanyşlykdan birnäçe sagat geçensoňam, şeýle ýönekeý sahypa üçin gaty owadan we tertipli dizaýn döretmek üçin ýeterlik bolar. Mundan başga-da, internet her dürli sapaklardan, mysallardan doly, bir wagtyň özünde HTML, CSS-ni bir ekranda redaktirläp, hemmesiniň nähili bolýandygyny derrew görüp boljak ýörite saýtlar bar. Biraz tejribe bilen hakyky sungaty döredip bilersiňiz. Dogry, bu ýerde-de gaty daşlaşmaly dälsiňiz (elbetde, dizaýner bolmak meýilnamalaryňyz bolmasa), ýogsam dizaýn beýle zat, bu ýerde uzak wagtlap ýapyşyp bilersiňiz. Ilki bilen CSS-e düşünip başlanymda, içim gysdy. Hemme zady, her bir emlägi synap görmek isledim, bir zady öwrüp, onuň bilen gyzyklandym, synag etdim, käbir sahypalaryň sahypalaryny aldym we tanalmazdan öçürdim. Bu oýunjak bilen bir hepde hezil etdim, meni goýberýänçä başga hiç zat etmedim :) Bolýar, umuman aýdanyňda, elbetde, muny artykmaç etmeli däl we düşnüksiz reňkli gudrat döretmeli däl, muny ýönekeý we etmeli tagamly. Bellemeli ýekeje zat. CSS-iň dizaýnyň beýanydygyna , HTML-iň bolsa bellikdigine düşünmeli . CSS-iň üsti bilen düýbünden hemme zady etmäge synanyşmaly dälsiňiz, käbir taraplary etmek gaty kyn bolar, käbirleri bolsa mümkin däl, HTML-de bu goşmaça setirler ýa-da bellikde diňe bir atributlar bilen ýerine ýetirilende. Olary birleşdirmeli, CSS-de her dürli reňk, fon, şrift ýasamaly, meselem, bir-iki sany stol öýjügini birleşdirmeli bolsa, HTML gurallaryny ulanmak has aňsat. Mysal üçin, ine, CSS we HTML bilen birnäçe sagadyň dowamynda sahypalar bilen näme edip bilendigim (bu ýere ýetmek üçin eden bulaşyklygym hakda jikme-jik maglumat bermerin, ahyrynda bolar seredip boljak bu taslamanyň GitHub-a baglanyşyk): Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 4) - 3Elbetde, men ol ýerde hemme zady näderejede başarnykly edendigimi bilemok, ýöne CSS-ni bir hepde öň ilkinji gezek görendigimi göz öňünde tutanymda, gaty gowy çykdy öýdýärin.

Sahypa

Indi hemme zat işleýär, gowy görünýär, ýöne şu wagta çenli tablisada diňe birnäçe ýazgy bar. Onda ýüz film ýa-da müň bar bolsa näme etmeli? Şeýle uzyn sanawdan aýlamak gaty amatly däl. Sanaw, mysal üçin 10 ýazgy sahypasynda görkezilende has amatlydyr. Şol sebäpden, indi sanawy sahypalara bölmegi amala aşyrmaga synanyşarys (käwagt bu “peýjing” ýa-da “paginasiýa” ( iňlis paginasiýasy ) hem diýilýär). Bu dürli ýollar bilen edilip bilner. Mysal üçin, doly sanawy jsp sahypasyna geçirip, zerur mukdarda ýazgylar üçin tablisany döredip bilersiňiz. Ora-da meselem, hyzmatdaky umumy sanawdan zerur ýazgylary çykaryp, bu kiçi sanawy görkezmek üçin jsp sahypasyna iberip bilersiňiz. Elbetde, muny maglumatlar bazasy derejesinde etmek iň gowusydyr. Bu pikir maglumatlar bazasyndan doly sanawy alyp, soňam böleklere bölmek däl-de, başda zerur zatlardan başga zatlara degmezden maglumat bazasyndan almak. Galyberse-de, näme üçin maglumatlar bazasyndan birbada ýüzlerçe ýa-da müňlerçe ýazgylary çykarmaly bolýarys, eger zerur bolan ilkinji onluga girýän bolsa, diňe şu on sanysyny çykarmak has gowudyr. DAO- a gideliň we sahypa belgisi üçin jogapkär boljak usula allFilmsparametr goşalyň int page(hyzmatda, elbetde, bizem şony edýäris). Geliň, bu usulyň durmuşa geçirilişini azajyk üýtgedeliň; öň sanawy tutuşlygyna çykaran bolsak, indi diňe bir bölegini çykararys. setFirstResultUsullar (tablisanyň haýsy hatary bilen başlamaly) we setMaxResults(näçe ýazgy görkezmeli) bu meselede bize kömek eder :

@SuppressWarnings("unchecked")
public List<Film> allFilms(int page) {
    Session session = sessionFactory.getCurrentSession();
    return session.createQuery("from Film").setFirstResult(10 * (page - 1)).setMaxResults(10).list();
}
Bular. eger bu 1-nji sahypa bolsa, 0-dan başlap iň köp 10 ýazgy görkezýäris; bu 5-nji sahypa bolsa, 40-dan başlap 10 ýazgy (maglumatlar bazasyndaky sanlaryň 0-dan başlanýandygyny ýatdan çykarmaň). Mundan başga-da, tablisadaky ýazgylaryň sanyny yzyna gaýtarjak usul dörederis. Pageshli sahypalaryň sanyny bilmek we jsp sahypamyzda olar üçin baglanyşyk döretmek üçin bize gerek bolar:

public int filmsCount() {
     Session session = sessionFactory.getCurrentSession();
     return session.createQuery("select count(*) from Film", Number.class).getSingleResult().intValue();
 }
intŞeýle soragy ulanyp, ýazgylary özleri çykarmazdan, tablisadaky ähli ýazgylaryň sanyny (baha hökmünde) alarys . Indi kontrolleýjä baryp, esasy sahypany filmleriň sanawy bilen yzyna gaýtarýan usulyň üstünde işläliň:

@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView allFilms(@RequestParam(defaultValue = "1") int page) {
    List&ltFilm> films = filmService.allFilms(page);
    int filmsCount = filmService.filmsCount();
    int pagesCount = (filmsCount + 9)/10;
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("films");
    modelAndView.addObject("page", page);
    modelAndView.addObject("filmsList", films);
    modelAndView.addObject("filmsCount", filmsCount);
    modelAndView.addObject("pagesCount", pagesCount);
    return modelAndView;
}
@RequestParamBu ýerde haýyş parametrinden bu bahany alýandygymyzy görkezýän täze düşündiriş peýda boldy . Indi, parametrli bir adrese barsak, mysal üçin http: // localhost: 8080 / ? Page = 4 , şoňa görä 4-nji sahypany alarys. Programma başlanda, http: // localhost: 8080 / parametri bolmazdan bir adrese baranymyzda , birinji sahypany alarys diýip, başlangyç bahany " 1 " diýip belledik . Usulda ähli ýazgylaryň sanyny alýarys, soň bu ýönekeý usul bilen sahypalaryň sanyny hasaplaýarys. Bular. 10 ýazgymyz bar bolsa, bu 1 sahypa, 11 bolsa bar bolsa, bu eýýäm 2-dir. Bu zatlaryň hemmesini modele geçirýäris. Hemmesi üçin bir aýlawda baglanyşyk döretmek üçin sahypalaryň sanyny bilmeli we filmleriň sanyny şol ýerde goýmaly, mysal üçin, bu maglumatlary sahypanyň bir ýerinde görkezmek isleseňiz. Indi galan zat film.jsp-a gitmek we bu konstruksiýany ulanyp her sahypa baglanyşyk goşmak:

<c:forEach begin="1" end="${pagesCount}" step="1" varStatus="i">
    <c:url value="/" var="url">
        <c:param name="page" value="${i.index}"/>
    </c:url>
    <a href="${url}">${i.index}</a>
</c:forEach>
1, 2, 3, ... hasaplaýjy arkaly baglanyşyklar döredýäris we parametrleri indeks bahasy boýunça kesgitleýäris.

Theeri gelende aýtsak, sahypa sahypasy ýaly, sortlamak, süzmek we gözlemek ýaly beýleki aýratynlyklary goşup bilersiňiz. Diňe DAO usulyna dürli parametrleri geçirýäris we zerur ýazgylary zerur tertipde çykarmak üçin maglumatlar bazasyna degişli talap döretmek üçin ulanýarys.

Moreene bir kiçijik degişme goşalyň. Dolandyryja gaýdyp gelýäris. Goşmak, redaktirlemek we aýyrmak usullarynda amal gutarandan soň esasy sahypa "gönükdirme: /" gönükdirýäris . Bu. 50-nji sahypanyň bir ýerinde bolsak we redaktirleme ýazgysyna bassak, ýerine ýetirilenden soň " / " adresine bararys. 1-nji sahypa dolanalyň. Bu gaty amatly däl; nireden gelendigimize dolanmak isleýärin. Geliň, muny ýönekeý çözeliň. Geliň, synpda FilmControllermysal üýtgeýjisini döredeliňint page

private int page;
Usulyň içinde allFilmsparametriň bahasyny bu üýtgeýjä belläris page:

this.page = page;
Bu. Her gezek bu usul ýerine ýetirilende (ýagny sahypalara aýlananymyzda) häzirki sahypanyň bahasy üýtgeýjä ýazylar. Soň bolsa bu bahany şol bir sahypa gönükdirmek üçin usullarymyzda ulanýarys.

modelAndView.setViewName("redirect:/?page=" + this.page);

Netije

Belki şu ýerde gutararys. Netije doly hukukly CRUD programmasy. Elbetde idealdan gaty uzakda (ýöne gaty uzak), ýöne optimizirläp we kämilleşdirip bolýar, kemçilikleri düzedip we işlemegi goşup bolýar. Içerki usullary çig amallar üçin ulanyp bilersiňiz; süzmek, gözlemek, sortlamak; beýleki baglanyşykly tablisalary goşmak; ygtyýarnama we tassyklamak we ş.m. bilen dürli ulanyjylar üçin goldawy durmuşa geçiriň. we ş.m. Göz öňüne getirişiň çägi çäksiz, şonuň üçin gözläň. Bu taslamanyň github-a baglanyşyk . Üns bereniňiz üçin sag boluň. PS Bu, ömrümde makala ýazmak üçin ilkinji synanyşyk, şonuň üçin berk höküm çykarmaň :). Peýdaly çeşmelere dürli baglanyşyk goşmaýandygym üçin ötünç soraýaryn, gynansagam maglumat alýan çeşmelerime baglanyşyklary saklamak endigini ösdürip bilemok. Elbetde, köp harplar üçin ötünç soraýaryn, gysga wagtlyk zehinim däl, muny kimdir biri çözüp biler diýip umyt edýärin. Partshli böleklere baglanyşyklar
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION