JavaRush /Blog Jawa /Random-JV /Pambuka kanggo Maven, Spring, MySQL, Hibernate lan aplika...
Макс
tingkat

Pambuka kanggo Maven, Spring, MySQL, Hibernate lan aplikasi CRUD pisanan (bagean 4)

Diterbitake ing grup
sugeng sonten. Ing artikel iki aku pengin nuduhake ketemu pisanan karo bab kaya Maven, Spring, Hibernate, MySQL lan Tomcat ing proses nggawe aplikasi CRUD prasaja. Iki minangka bagéan pungkasan. Artikel kasebut utamane kanggo wong-wong sing wis ngrampungake 30-40 level ing kene, nanging durung ngupayakake ngluwihi Jawa murni lan lagi wae diwiwiti (utawa bakal diwiwiti) kanggo mlebu ing jagad terbuka kanthi kabeh teknologi, kerangka kerja lan liyane sing ora dingerteni. tembung. Iki minangka bagean kaping papat pungkasan saka artikel "Introduction to Maven, Spring, MySQL, Hibernate and the first CRUD application." Bagean sadurunge bisa dideleng kanthi ngetutake tautan:

Isi:

Desain lan sumber daya web

Aplikasi kita bisa digunakake, nanging sampeyan ora bisa ndeleng tanpa nangis, prasasti sing mboseni, tautan sing ala, latar mburi putih kosong. Kita kudu ndandani iki lan nambah kaendahan sing beda. Kepiye carane nindakake iki? Inggih, pisanan kabeh, sampeyan mung bisa muter-muter karo kaca lan nindakake kabeh limo iku nggunakake kemampuan HTML . Nanging yen sampeyan nyoba ngganti latar mburi, werna, ukuran, susunan unsur, etc nggunakake HTML piyambak. lan liya-liyane. banjur ing pungkasan sampeyan bisa nggawe kekacoan metu saka kaca sing ora bisa nggawe metu apa ana mengko. Kajaba iku, opsi desain HTML cukup winates. Luwih becik nggunakake CSS (Cascading Style Sheets) kanggo iki . Banjur kabeh sing ana gandhengane karo desain bisa diklumpukake ing sak panggonan, banjur ditrapake menyang unsur kaca sing dikarepake. Kode CSS bisa ditulis langsung ing kaca JSP ing tag khusus, nanging luwih trep kanggo dilebokake ing file sing kapisah, banjur mung ditrapake ing kaca sing dibutuhake. Kanggo nyelehake file kanthi gaya lan sumber daya web statis liyane, kita bakal nggawe direktori kapisah ing webapp . Supaya ora mbingungake sumber daya web karo sumber daya biasa (ing ngendi kita duwe db.properties ), ayo nelpon direktori iki lan nyelehake kabeh file CSS, gambar, lan liya-liyane ing kana:
Pambuka kanggo Maven, Spring, MySQL, Hibernate lan aplikasi CRUD pisanan (bagean 4) - 1
Kanggo nggunakake file kasebut, kita kudu nemtokake lokasi ing konfigurasi. Ayo menyang kelas kita WebConfig. Sadurunge, kita nggunakake anotasi @EnableWebMvckanggo ora ngatur apa-apa, nanging mung nggunakake konfigurasi standar. Nanging saiki ana perlu kanggo ngatur soko. Kanggo nindakake iki, kita nggunakake antarmuka WebMvcConfigurer, sing ngidini sampeyan ngganti cara konfigurasi. Iku. kita bisa nggunakake konfigurasi gawan, nanging ing wektu sing padha ngatur sawetara aspèk kanggo awake dhewe. Ing kasus iki addResourceHandlers, kita butuh cara sing nuduhake lokasi sumber daya web statis. Yen ngono, kabeh kelas katon kaya iki:
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;
    }
}
Saiki kanggo nggunakake CSS kita ing kaca sampeyan kudu ngubungake menyang ing tag head:
<head>
    <link href="<c:url value="/res/style.css"/>" rel="stylesheet" type="text/css"/>
</head>
Cukup tambahake baris iki lan gawe, contone, file CSS prasaja iki:
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;
}
Lan iki bakal rampung ngganti tabel kita (katon bodho, mesthi, nanging kaya iki, contone): Pambuka kanggo Maven, Spring, MySQL, Hibernate lan aplikasi CRUD pisanan (bagean 4) - 2Inggih, aku ora perlu kanggo pirembagan rinci babagan CSS, kabeh iku cukup prasaja. Ing Internet sampeyan bisa nemokake akeh pilihan siap kanggo ngrancang tabel lan formulir. Nanging luwih apik, mesthine, kanggo nggawe desain dhewe, sampeyan ora perlu dadi desainer, sawise kabeh, iki dudu sawetara situs sing rumit. Malah sawetara jam sawise kenalan pisanan bakal cukup kanggo nggawe desain sing cukup ayu lan apik kanggo kaca prasaja. Kajaba iku, Internet kebak kabeh jinis pelajaran, contone, ana situs khusus sing bisa nyunting HTML, CSS ing layar siji lan langsung ndeleng apa sing katon. Kanthi latihan sethithik sampeyan bisa nggawe seni nyata. Bener, sampeyan uga ora kudu digawa menyang kene (kajaba, mesthine, sampeyan duwe rencana dadi desainer), yen desain kaya ngono, sampeyan bisa macet ing kene nganti suwe. Nalika aku wiwit ngerti CSS, aku macet. Aku wanted kanggo nyoba kabeh, saben property, bengkong soko, tinkered karo, experimented, njupuk kaca saka sawetara situs lan remade wong liwat pangenalan. Aku mbokmenawa seneng-seneng karo dolanan iki sajrone seminggu, ora nindakake apa-apa, nganti aku lunga :) Inggih, umume, mesthine, sampeyan ora kudu ngluwihi lan nggawe keajaiban warna-warni sing ora bisa dingerteni, sampeyan kudu nindakake kanthi gampang lan kanthi rasa. Ing bab mung worth kang lagi nyimak. Sampeyan kudu ngerti yen CSS minangka gambaran saka desain , lan HTML minangka markup . Sampeyan ora kudu nyoba nindakake kabeh liwat CSS; sawetara aspek bakal angel banget ditindakake, lan sawetara mung ora mungkin, nalika ing HTML iki rampung karo sawetara garis ekstra, utawa malah mung siji atribut ing tag. Sampeyan kudu nggabungake, nggawe kabeh warna, latar mburi, font ing CSS, lan yen, contone, sampeyan kudu nggabungake sawetara sel tabel, luwih gampang nggunakake alat HTML. Contone, ing kene aku bisa nindakake kaca-kaca sajrone sawetara jam ngutak-atik CSS lan HTML (Aku ora bakal njlèntrèhaké rinci ing kene babagan kekacoan sing daklakoni kanggo nggayuh iki, ing pungkasan bakal ana link menyang GitHub proyek iki ngendi sampeyan bisa ndeleng): Pambuka kanggo Maven, Spring, MySQL, Hibernate lan aplikasi CRUD pisanan (bagean 4) - 3Mesthi, Aku ora ngerti carane competently aku nindakake kabeh ana, nanging considering sing aku pisanan weruh CSS minggu sadurunge, Aku iku ternyata cukup apik.

Paginasi

Saiki kabeh bisa digunakake, katon apik, nanging mung sawetara cathetan ing meja nganti saiki. Apa yen ana satus film, utawa sewu? Ora trep banget kanggo nggulung dhaptar sing dawa banget. Luwih trep yen dhaptar ditampilake ing kaca 10 entri, contone. Mulane, saiki kita bakal nyoba ngleksanakake pamisah dhaptar menyang kaca (kadhangkala iki uga disebut "paging" utawa "pagination" ( pagination Inggris )). Iki bisa ditindakake kanthi cara sing beda-beda. Contone, sampeyan bisa nransfer dhaptar lengkap menyang kaca jsp lan nggawe tabel ana kanggo jumlah cathetan sing dibutuhake. Utawa, contone, sampeyan bisa narik metu cathetan sing dibutuhake saka dhaftar umum ing layanan, banjur ngirim mini-dhaptar iki menyang kaca jsp kanggo tampilan. Nanging paling apik, mesthi, kanggo nindakake iki ing tingkat database. Ide iki ora kanggo njupuk dhaptar lengkap saka database lan banjur break menyang bêsik, nanging pisanan njaluk Piece dibutuhake saka database tanpa ndemek kabeh liyane. Sawise kabeh, kenapa kita kudu narik kabeh atusan utawa ewu cathetan saka database bebarengan, yen sing kita butuhake ana ing sepuluh ndhuwur, luwih apik kanggo narik metu mung sepuluh iki. Ayo menyang DAO lan nambah allFilmsparameter kanggo cara int page, kang bakal tanggung jawab kanggo nomer kaca (ing layanan, mesthi, kita nindakake padha). Lan ayo ngganti implementasine metode iki sethithik, yen sadurunge kita narik kabeh dhaptar, saiki kita bakal narik bagean kasebut. setFirstResultCara (baris tabel sing bakal diwiwiti) lan setMaxResults(pira cathetan sing bakal ditampilake) bakal mbantu kita :
@SuppressWarnings("unchecked")
public List<Film> allFilms(int page) {
    Session session = sessionFactory.getCurrentSession();
    return session.createQuery("from Film").setFirstResult(10 * (page - 1)).setMaxResults(10).list();
}
Sing. yen iki kaca 1st, kita nampilake maksimal 10 cathetan, wiwit saka 0; yen iki kaca 5th, banjur 10 cathetan wiwit 40th (aja lali sing nomer ing database wiwit saka 0). Kita uga bakal nggawe cara sing bakal ngasilake jumlah cathetan ing tabel. Kita butuh iki supaya bisa ngerti jumlah kabeh kaca lan nggawe tautan ing kaca jsp:
public int filmsCount() {
     Session session = sessionFactory.getCurrentSession();
     return session.createQuery("select count(*) from Film", Number.class).getSingleResult().intValue();
 }
Nggunakake pitakon kasebut, kita bakal entuk nomer kabeh cathetan ing tabel (minangka intnilai) tanpa narik cathetan kasebut. Saiki ayo menyang pengontrol lan nggarap metode sing ngasilake kaca utama kanthi dhaptar film:
@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;
}
A anotasi anyar wis katon ing kene @RequestParam, sing nuduhake yen kita entuk nilai iki saka parameter panyuwunan. Saiki, yen kita pindhah menyang alamat kanthi parameter, contone http: // localhost: 8080/ ?page=4 , kita bakal entuk, miturut, kaca kaping 4. Kita nyetel nilai standar kanggo " 1 " supaya nalika aplikasi diwiwiti, nalika kita pindhah menyang alamat tanpa parameter http: // localhost: 8080 / , kita entuk kaca pisanan. Ing cara kita entuk nomer kabeh cathetan, banjur kanthi cara prasaja iki kita ngetung jumlah kaca. Sing. yen kita duwe 10 cathetan, iki 1 kaca, lan yen ana 11, banjur iki wis 2. Inggih, kita nransfer kabeh iki kanggo model. Sampeyan kudu ngerti nomer kaca kanggo nggawe pranala kanggo kabeh ing siklus, lan supaya nomer film ana mung ing kasus, contone, yen sampeyan pengin nuduhake informasi iki nang endi wae ing kaca. Saiki sing isih ana yaiku pindhah menyang films.jsp lan nambah pranala menyang saben kaca kanthi nggunakake konstruksi iki:
<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>
Kita nggawe pranala kanthi counter 1, 2, 3, ... lan nyetel parameter kanthi nilai indeks.

Miturut cara, kanthi cara sing padha karo pagination, sampeyan bisa nambah fitur liyane, kayata ngurutake, nyaring, lan nggoleki. Kita mung ngliwati macem-macem paramèter menyang metode DAO lan digunakake kanggo mbentuk pitakon sing cocog kanggo database supaya bisa narik cathetan sing dibutuhake ing urutan sing dibutuhake.

Ayo nambah siji tutul cilik. Kita bali menyang controller. Ing cara nambah, ngowahi lan mbusak, sawise operasi rampung, kita pangalihan menyang kaca utama "pangalihan:/" . Iku. yen kita ana ing endi wae ing kaca 50th lan klik sunting entri, banjur sawise eksekusi kita bakal pindhah menyang alamat " / ", i.e. Ayo bali menyang kaca 1. Iki ora trep banget; Aku pengin bali menyang ngendi asale. Ayo dirampungake kanthi gampang. FilmControllerAyo nggawe variabel conto ing kelasint page
private int page;
Ing cara allFilmskita bakal nemtokake nilai parameter kanggo variabel iki page:
this.page = page;
Iku. Saben cara iki dieksekusi (yaiku nalika kita navigasi liwat kaca), nilai kaca saiki bakal ditulis menyang variabel. Banjur kita nggunakake nilai iki ing cara kita kanggo pangalihan bali menyang kaca sing padha.
modelAndView.setViewName("redirect:/?page=" + this.page);

Kesimpulan

Kita mbokmenawa bakal mungkasi kene. Asil punika aplikasi CRUD lengkap. Iku mesthi adoh saka becik (adoh banget), nanging bisa optimized lan apik, kewan omo tetep lan fungsi ditambahake. Sampeyan bisa nggunakake cara sing dibangun kanggo operasi crud; nambah nyaring, nggoleki, ngurutake; nambah tabel liyane sing gegandhengan; ngleksanakake dhukungan kanggo macem-macem pangguna kanthi wewenang lan otentikasi, lsp. lan liya-liyane. Cakupan kanggo imajinasi ora ana watesan, mula goleki. Link menyang github proyek iki . Matur nuwun kawigatosanipun. PS Iki minangka upaya pisanan ing uripku kanggo nulis artikel, mula aja ngadili kanthi ketat :). Nyuwun pangapunten amarga ora nambah pranala sing beda menyang sumber daya sing migunani; sayangé, aku isih ora bisa ngembangake kebiasaan nyimpen pranala menyang sumber sing aku entuk informasi. Lan, mesthi, aku njaluk ngapura kanggo akeh huruf, singkatan dudu bakatku, muga-muga ana sing bisa ngatasi iki. Pranala menyang kabeh bagean
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION