JavaRush /Блоги Java /Random-TG /Муқаддима ба Maven, Spring, MySQL, Hibernate ва аввалин б...
Макс
Сатҳи

Муқаддима ба Maven, Spring, MySQL, Hibernate ва аввалин барномаи CRUD (қисми 2)

Дар гурӯҳ нашр шудааст
Нимирӯзи ба хайр. Дар ин мақола ман мехоҳам аввалин вохӯрии худро бо чизҳое ба монанди Maven, Spring, Hibernate, MySQL ва Tomcat дар раванди эҷоди як барномаи оддии CRUD мубодила кунам. Ин қисми дуюми 4 аст. Мақола пеш аз ҳама барои онҳое пешбинӣ шудааст, ки дар ин ҷо аллакай 30-40 сатҳро хатм кардаанд, вале то ҳол берун аз Java-и холис ҳаракат накардаанд ва ҳоло ба ҷаҳони кушода бо ҳамаи ин технологияҳо, чаҳорчӯбаҳо ва дигар калимаҳои ношинос. Ин қисми дуюми мақолаи "Муқаддима ба Maven, Spring, MySQL, Hibernate ва аввалин барномаи CRUD" мебошад. Қисми аввалро тавассути ин пайванд дидан мумкин аст: Муқаддима ба Maven, Spring, MySQL, Hibernate ва аввалин барномаи CRUD (қисми 1)

Мундариҷа:

Хуб, биёед идома диҳем, биёед ҳоло кӯшиш кунем, ки тамоми анбори филмҳоро тасаввур кунем. Дар барномаи хурд ва оддии мо, албатта, шумо метавонед ба таври оддӣ тамоми мантиқро дар контроллер ҷойгир кунед, аммо, тавре ки аллакай қайд карда шуд, беҳтар аст, ки чӣ гуна ҳама чизро дуруст иҷро карданро фавран омӯзед. Аз ин рӯ, биёед якчанд қабатҳоро созем. Мо як DAO-ро барои кор бо додаҳо масъул хоҳем дошт , хидмате , ки дар он ҳама гуна мантиқи дигар вуҷуд дорад ва Назоратчӣ танҳо дархостҳоро коркард мекунад ва усулҳои хидматрасонии заруриро даъват мекунад.

Объекти дастрасии маълумот

Объекти дастрасии додаҳо (DAO) чунин намунаи тарроҳӣ мебошад. Гап дар сари он аст, ки як қабати махсусе эҷод кунад, ки танҳо барои дастрасӣ ба додаҳо масъул хоҳад буд (кор бо пойгоҳи додаҳо ё механизми дигари нигоҳдорӣ). Дар баста daoмо интерфейсеро эҷод мекунем, FilmDAOки дар он усулҳо ба монанди илова кардан, нест кардан ва ғайра мавҷуданд. Ман онҳоро ба таври дигар даъват кардам, аммо онҳо ба амалиёти асосии CRUD мувофиқат мекунанд ( C reate, Read , U pdate, D elete).

Дар ин ҷо бояд қайд кард, ки ба ғайр аз DAO, инчунин як равиш ба монанди Repository вуҷуд дорад, ки онҳо хеле монанданд, ҳарду барои кор бо додаҳо истифода мешаванд. Ман то ҳол нафаҳмидам, ки ин равишҳо кадом хусусиятҳо доранд ва фарқияти байни онҳо чист. Аз ин рӯ, ман шояд дар ин ҷо иштибоҳ кунам ва онро бояд анбор номид, на Дао, ё шояд он чизе дар байни онҳо бошад. Аммо дар аксари мисолҳое, ки ман дидаам ва омӯхтаам, ин DAO номида мешавад, аз ин рӯ, ман эҳтимол онро ҳамин тавр меномам. Ҳамзамон, шояд дар ҷои дигар дар матн ман калимаи репозиторийро истифода хоҳам кард. Дар ҳар сурат, агар ман дар ин ҷо хато карда бошам, маро бубахшед.

package testgroup.filmography.dao;

import testgroup.filmography.model.Film;

import java.util.List;

public interface FilmDAO {
    List<Film> allFilms();
    void add(Film film);
    void delete(Film film);
    void edit(Film film);
    Film getById(int id);
}
Акнун мо ба амалй гардондани он ниёз дорем. Мо ҳоло базаро пайваст намекунем, он ҳанӯз ҳам каме даҳшатнок аст. Барои машқ кардан ва ба он одат кардан, биёед аввал нигоҳдории хотираро тақлид кунем ва бо якчанд филм рӯйхат эҷод кунем. Барои нигоҳ доштани рӯйхат, мо на List, балки -ро истифода мебарем Map, то он барои дарёфти филми мушаххас аз рӯи он id, бе азназаргузаронии тамоми рӯйхат қулай шавад. Барои насл idмо AtomicInteger -ро истифода мебарем . Биёед синф эҷод кунем FilmDAOImpl, ҳама усулҳоро татбиқ кунем ва харитаро пур кунем. Чизе монанди ин.
package testgroup.filmography.dao;

import testgroup.filmography.model.Film;

import java.util.*;

public class FilmDAOImpl implements FilmDAO {
    private static final AtomicInteger AUTO_ID = new AtomicInteger(0);
    private static Map<Integer, Film> films = new HashMap<>();

    static {
        Film film1 = new Film();
        film1.setId(AUTO_ID.getAndIncrement());
        film1.setTitle("Inception");
        film1.setYear(2010);
        film1.setGenre("sci-fi");
        film1.setWatched(true);
        films.put(film1.getId(), film1);

        // + film2, film3, film4, ...
    }
    @Override
    public List<Film> allFilms() {
        return new ArrayList<>(films.values());
    }

    @Override
    public void add(Film film) {
        film.setId(AUTO_ID.getAndIncrement());
        films.put(film.getId(), film);
    }

    @Override
    public void delete(Film film) {
        films.remove(film.getId());
    }

    @Override
    public void edit(Film film) {
        films.put(film.getId(), film);
    }

    @Override
    public Film getById(int id) {
        return films.get(id);
    }
}

Хизмат

Акнун биёед қабати хидматрасониро илова кунем. Аслан, дар ин мисол метавон бидуни он кор кардан бо DAO маҳдуд аст; барнома хеле содда хоҳад буд ва ҳеҷ гуна мантиқи мураккаб дар хидмат нақша надорад. Аммо ногаҳон дар оянда шумо мехоҳед, ки ба лоиҳа ҳама гуна мушкилот ва чизҳои ҷолибро илова кунед, бинобар ин, барои пуррагӣ, бигзоред. Ҳоло он танҳо усулҳоро аз DAO даъват мекунад. Биёед дар баста serviceинтерфейс эҷод кунем FilmService.
package testgroup.filmography.service;

import testgroup.filmography.model.Film;

import java.util.List;

public interface FilmService {
    List<Film> allFilms();
    void add(Film film);
    void delete(Film film);
    void edit(Film film);
    Film getById(int id);
}
Ва татбиқи он:
package testgroup.filmography.service;

import testgroup.filmography.dao.FilmDAO;
import testgroup.filmography.dao.FilmDAOImpl;
import testgroup.filmography.model.Film;

import java.util.List;

public class FilmServiceImpl implements FilmService {
    private FilmDAO filmDAO = new FilmDAOImpl();

    @Override
    public List<Film> allFilms() {
        return filmDAO.allFilms();
    }

    @Override
    public void add(Film film) {
        filmDAO.add(film);
    }

    @Override
    public void delete(Film film) {
        filmDAO.delete(film);
    }

    @Override
    public void edit(Film film) {
        filmDAO.edit(film);
    }

    @Override
    public Film getById(int id) {
        return filmDAO.getById(id);
    }
}
Сохтори лоиҳа ҳоло чунин менамояд:
Муқаддима ба Maven, Spring, MySQL, Hibernate ва аввалин барномаи CRUD (қисми 2) - 1

Назоратчӣ ва Намоишҳо

Биёед ҳоло дар бораи усулҳои контроллер ва пур кардани саҳифаҳо кор кунем. Ҳангоми пур кардани саҳифаҳо, мо ба баъзе техника ниёз дорем. Масалан, барои намоиш додани рӯйхати филмҳо ба мо ҳалқа лозим аст, агар, масалан, мо хоҳем, ки баъзе навиштаҷотро тағир диҳем, вобаста ба параметрҳо ба мо шароит лозим аст ва ғайра. Формати JSP (JavaServer Pages) ба шумо имкон медиҳад, ки замимаҳои codeи javaро истифода баред, ки бо онҳо ҳамаи инро амалӣ кардан мумкин аст. Аммо ман намехоҳам рамзи java-ро бо рамзи HTML дар саҳифа истифода барам. Ин ҳадди аққал хеле зишти мебуд. Хушбахтона, барои ҳалли ин мушкилот як чизи аҷибе вуҷуд дорад, ба монанди JSTL (JavaServer Pages Standard Tag Library) ё JSP Standard Tag Library. Он ба мо имкон медиҳад, ки як қатор барчаспҳои иловагиро дар саҳифаҳои JSP-и худ барои эҳтиёҷоти гуногун истифода барем. Биёед онро ба: пайваст кунем pom.xml:
<dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
</dependency>
Акнун биёед ба контроллер назар андозем. Пеш аз ҳама, биёед эҷоди an objectро аз он ҷо хориҷ кунем Film, ин барои санҷиш анҷом дода шудааст ва ба мо чизи дигаре лозим нест. Биёед хидматро дар он ҷо илова кунем ва усулҳои онро даъват кунем.
public class FilmController {
    private FilmService filmService = new FilmServiceImpl();
Хуб, мувофиқан мо барои ҳар як ҳолат усулҳо эҷод мекунем, илова, нест кардан ва ғайра. Аввалан усули намоиши саҳифаи асосӣ бо рӯйхати филмҳо:
@RequestMapping(method = RequestMethod.GET)
    public ModelAndView allFilms() {
        List<Film> films = filmService.allFilms();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("films");
        modelAndView.addObject("filmsList", films);
        return modelAndView;
    }
Дар ин ҷо чизи нав нест. Мо рӯйхати филмҳоро аз хидмат мегирем ва онро ба модел илова мекунем. Акнун биёед саҳифаи асосиеро созем films.jsp, ки ин усул бармегардонад:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>FILMS</title>
</head>
<body>

<h2>Films</h2>
<table>
    <tr>
        <th>id</th>
        <th>title</th>
        <th>year</th>
        <th>genre</th>
        <th>watched</th>
        <th>action</th>
    </tr>
    <c:forEach var="film" items="${filmsList}">
        <tr>
            <td>${film.id}</td>
            <td>${film.title}</td>
            <td>${film.year}</td>
            <td>${film.genre}</td>
            <td>${film.watched}</td>
            <td>
                <a href="/edit/${film.id}">edit</a>
                <a href="/delete/${film.id}">delete</a>
            </td>
        </tr>
    </c:forEach>
</table>

<h2>Add</h2>
<c:url value="/add" var="add"/>
<a href="${add}">Add new film</a>
</body>
</html>
Биёед ба ин саҳифа бодиққат назар андозем, то бубинем, ки чӣ аст. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - дар ин ҷо ядрои JSTL пайваст шудааст, ки тегҳои асосӣ барои эҷоди давраҳо, шароитҳо ва ғайраро дар бар мегирад. .
  • <table>— барчасп барои сохтани ҷадвал.
  • <tr>- қатори ҷадвал
  • <th>- сарлавҳаи сутун
  • <td>- ҳуҷайраи ҷадвал
Аввалан, мо сатри сарлавҳаи ҷадвалро бо номи сутунҳо месозем. Сипас <c:forEach var="film" items="${filmsList}">, дар як ҳалқа (ки мо онро аз ядрои JSTL гирифтаем) мо аз тамоми элементҳои рӯйхати гузашта ( filmsList) мегузарем, барои ҳар як элемент ( film) сатри нав эҷод мекунем ва ба ҳар як чашмак арзиши мувофиқро менависем. Дар ин ҷо як нукта вуҷуд дорад, ба назар чунин мерасад, ки сабтро film.idфаҳмидан лозим аст film.getId(), яъне. Майдон мустақиман дастрас нест, аммо қабулкунанда даъват карда мешавад. Дар сутуни охирин ( action) мо истинодҳоро барои нест кардан ва таҳрир мекунем (мо ҳоло усулҳои мувофиқро эҷод мекунем). Хуб, дар зер истиноди усули илова кардани филми нав аст. Ин аст, ки он чӣ гуна аст: Минбаъд, биёед усулеро дида бароем, ки саҳифаи таҳрирро барои филми мушаххас бармегардонад:
@RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
    public ModelAndView editPage(@PathVariable("id") int id) {
        Film film = filmService.getById(id);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("editPage");
        modelAndView.addObject("film", film);
        return modelAndView;
    }
Дар ин ҷо чизи нав пайдо шуд - ин шарҳ аст @PathVariable. Он нишон медиҳад, ки ин параметр ( int id) аз сатри суроғаҳо гирифта шудааст. Барои нишон додани ҷойгиршавии ин параметр дар сатри суроғаҳо, конструксия истифода мешавад {id}(дар омади гап, агар номи тағирёбанда ҳамон тавре ки дар ин ҳолат бошад, ба шумо лозим нест, ки онро дар қавс нишон диҳед, балки онро нависед. @PathVariable int id). Ҳамин тавр, дар саҳифаи асосӣ мо барои ҳар як филм истинодҳо додем, ки нишон медиҳанд id:
<a href="/edit/${film.id}">edit</a>
Сипас, ин арзиш ба параметри метод таъин карда мешавад ва мо онро барои гирифтани филми мушаххас аз анбор тавассути хидмат истифода мебарем ва онро ба модел илова мекунем. Ин усули ба даст овардани саҳифаи таҳриркунӣ буд, ҳоло ба мо усули таҳрири худи он лозим аст:
@RequestMapping(value = "/edit", method = RequestMethod.POST)
    public ModelAndView editFilm(@ModelAttribute("film") Film film) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("redirect:/");
        filmService.edit(film);
        return modelAndView;
    }
Дар усул editPageмо атрибутро ба модел илова кардем:
modelAndView.addObject("film", filmService.getById(id));
Ва ҳоло бо ёрии эзоҳ @ModelAttributeмо ин атрибутро ба даст меорем ва мо метавонем онро тағир диҳем. Усули дархост POST, зеро дар ин ҷо мо маълумотро интиқол медиҳем. " redirect:/" маънои онро дорад, ки пас аз иҷрои ин усул мо ба суроғаи " " равона карда мешавем /, яъне. усул иҷро мешавад allFilmsва мо ба саҳифаи асосӣ бармегардем. Акнун биёед худи саҳифаро созем editPage.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Edit</title>
</head>
<body>
<c:url value="/edit" var="var"/>
<form action="${var}" method="POST">
    <input type="hidden" name="id" value="${film.id}">
    <label for="title">Title</label>
    <input type="text" name="title" id="title">
    <label for="year">Year</label>
    <input type="text" name="year" id="year">
    <label for="genre">Genre</label>
    <input type="text" name="genre" id="genre">
    <label for="watched">Watched</label>
    <input type="text" name="watched" id="watched">
    <input type="submit" value="Edit film">
</form>
</body>
</html>
  • <form>- шакл барои ҷамъоварӣ ва фиристодани маълумот бо нишон додани он, ки кӣ онро коркард мекунад ( /edit)
  • <input>— унсурҳои интерфейс барои ҳамкории корбар (тугмаҳо, майдонҳои вуруд ва ғ.)
  • <label>- тамғаи матн
Ҳамин тавр, вақте ки шумо тугмаро пахш мекунед, <input type="submit" value="Edit film">маълумот аз форма ба server фиристода мешавад (майдони ноаён бо арзиш махсус илова карда шудааст id, то server донад, ки кадом сабти пойгоҳи додаҳо бояд нав карда шавад). Дар усул editFilmонҳо ба майдонҳои атрибутҳои мувофиқ таъин карда мешаванд film. Пас аз он мо ба саҳифаи асосӣ бо рӯйхати навшуда бармегардем. Саҳифаи таҳриркунӣ чунин менамояд: Акнун биёед ба илова кардани филмҳои нав ба рӯйхат шурӯъ кунем. Барои ин ба шумо инчунин шакл барои ворид кардан ва пешниҳоди маълумот лозим аст. Шумо метавонед дар саҳифаи асосӣ варақа созед ё саҳифаи алоҳида созед, ба монанди editPage.jsp. Аммо, аз тарафи дигар, шакли иловакунӣ маҳз ҳамон тавре ки барои таҳрир хоҳад буд, яъне. 4 майдони вуруд ва тугмаи ирсол. Пас, чаро саҳифаи нав эҷод кунед, биёед editPage.jsp. Усули гирифтани саҳифа:
@RequestMapping(value = "/add", method = RequestMethod.GET)
    public ModelAndView addPage() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("editPage");
        return modelAndView;
    }
Дар усул, editPageмо ба таври иловагӣ атрибутро барои тағир додани он гузаштем, аммо дар ин ҷо мо танҳо саҳифаро мегирем. Ва усули илова кардан:
@RequestMapping(value = "/add", method = RequestMethod.POST)
    public ModelAndView addFilm(@ModelAttribute("film") Film film) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("redirect:/");
        filmService.add(film);
        return modelAndView;
    }
Азбаски мо атрибутро дар ин ҷо нагузоштем, дар ин ҷо an objectи нав сохта мешавад Film. Хуб, дар ин ҷо аслан чизи нав нест. Инчунин бояд қайд кард, ки мо ҳарду усулро дар " /add" дорем. Ин ба туфайли он имконпазир аст, ки онҳо ба намудҳои гуногуни дархостҳо ҷавоб медиҳанд. Бо пайравӣ аз истиноди саҳифаи асосӣ мо дархости GET мегузорем, ки моро ба addPage. Ва вақте ки дар саҳифаи иловакунӣ мо тугмаи фиристодани маълумотро пахш мекунем, дархости POST дода мешавад ва addFilm. Барои илова кардани филми нав, мо тасмим гирифтем, ки ҳамон саҳифаро барои таҳрир истифода барем. Аммо дар он ҷо маълумот ба суроғаи " /edit" фиристода мешавад:
<c:url value="/edit" var="var"/>
<form action="${var}" method="POST">
    <input type="submit" value="Edit film">
</form>
Мо бояд саҳифаро каме таҳрик диҳем, то он барои илова ва таҳрир дигар хел рафтор кунад. Барои ҳалли ин масъала, мо шартҳоро аз ҳамон китобхонаи асосии JSTL истифода мебарем:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <c:if test="${empty film.title}">
        <title>Add</title>
    </c:if>
    <c:if test="${!empty film.title}">
        <title>Edit</title>
    </c:if>
</head>
<body>
<c:if test="${empty film.title}">
    <c:url value="/add" var="var"/>
</c:if>
<c:if test="${!empty film.title}">
    <c:url value="/edit" var="var"/>
</c:if>
<form action="${var}" method="POST">
    <c:if test="${!empty film.title}">
        <input type="hidden" name="id" value="${film.id}">
    </c:if>
    <label for="title">Title</label>
    <input type="text" name="title" id="title">
    <label for="year">Year</label>
    <input type="text" name="year" id="year">
    <label for="genre">Genre</label>
    <input type="text" name="genre" id="genre">
    <label for="watched">Watched</label>
    <input type="text" name="watched" id="watched">
    <c:if test="${empty film.title}">
        <input type="submit" value="Add new film">
    </c:if>
    <c:if test="${!empty film.title}">
        <input type="submit" value="Edit film">
    </c:if>
</form>
</body>
</html>
Онхое. мо танҳо майдонро тафтиш мекунем film.title. Агар он холӣ бошад, пас он филми нав аст, мо бояд тамоми маълумотро барои он пур кунем ва онро ба рӯйхат илова кунем. Агар ин майдон холӣ набошад, он филм аз рӯйхат аст ва шумо танҳо онро иваз кардан лозим аст. ки. мо ду versionи саҳифаи худро мегирем: Хуб, усули охирини контроллер барои хориҷ кардани филм аз рӯйхат:
@RequestMapping(value="/delete/{id}", method = RequestMethod.GET)
    public ModelAndView deleteFilm(@PathVariable("id") int id) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("redirect:/");
        Film film = filmService.getById(id);
        filmService.delete(film);
        return modelAndView;
    }
Ба фикрам, дар ин чо чизе гуфтан лозим нест, хамаи ин аллакай дида баромада шудааст. Мо аллакай дар саҳифаи асосӣ ба ин суроға пайвандҳо додем. Хуб, дар ин ҷо ҳама чиз омода аст, шумо метавонед онро дубора иҷро кунед ва бубинед, ки ҳама чиз чӣ гуна кор мекунад.

Анбор ва хидмат ҳамчун ҷузъҳои баҳор

Биёед боз як ислоҳи хурде ворид кунем. Гап дар сари он аст, ки ҳоло нигоҳдорӣ ва хидматрасонии мо танҳо синфҳо ҳастанд ва барои истифодаи онҳо мо бояд худамон як an objectи синфӣ созем ( new FilmServiceImpl()). Аммо мо баҳор бо як сабаб пайвастем , пас бигзор вай ин корро худаш назорат кунад. Барои он ки синфҳои худро зери назорати Баҳор гузорем, мо бояд нишон диҳем, ки онҳо ҷузъҳо мебошанд. Барои ин мо онҳоро бо эзоҳҳои махсус қайд мекунем:
@Repository
public class FilmDAOImpl implements FilmDAO {
@Service
public class FilmServiceImpl implements FilmService {
Эзоҳҳо @Repositoryва @Service, инчунин @Controllerаз @Component. Хусусиятҳои мушаххас ва фарқиятҳои ин се эзоҳ чист ва чӣ гуна онҳо аз ҷузъи оддӣ фарқ мекунанд, бояд дар ҳуҷҷатҳо ё дастурҳо алоҳида хонед. Ҳоло, донистани он кифоя аст, ки ин эзоҳҳо ба Баҳор мегӯянд, ки ин синфҳо мутаносибан як анбор ва хидмат мебошанд. Ва акнун ба мо дигар лозим нест, ки худамон an objectҳои мушаххаси ин синфҳоро эҷод кунем:
private FilmService filmService = new FilmServiceImpl();
Ба ҷои ин, шумо метавонед майдонро бо шарҳи махсус қайд кунед ва Баҳор татбиқи мувофиқро интихоб мекунад:
@Autowired
private FilmService filmService;
Эзоҳ @Autowired(автоматӣ ҳатмӣ) ба Баҳор мегӯяд, ки он бояд контексти худро кобед ва дар ин ҷо лӯбиёи мувофиқро иваз кунад. Хеле бароҳат. Агар пештар мо интерфейсҳоро истифода мебурдем, то дар бораи татбиқи мушаххаси усулҳо хавотир нашавем, ҳоло ба мо лозим нест, ки ҳатто дар бораи татбиқи худи интерфейс хавотир шавем ва ҳатто номи онро бидонем. Идея дар он аст, ки дар майдон истифода бурдани автоматикӣ тавсия дода намешавад, беҳтар аст, ки конструктор ё танзимкунандаро истифода баред. Муфассалтар дар ин бора дар ҳуҷҷатҳо хонед. Барои мо, аслан, ин муҳим нест, мо метавонем онро бехатар гузорем. Аммо, азбаски идея мепурсад, мо эҳтиром хоҳем кард, ки ҳама чиз зебо аст ва бидуни ҳеҷ гуна огоҳии зард. Дар синфи контроллер биёед танзимкунанда эҷод кунем ва ба он шарҳ диҳем:
@Controller
public class FilmController {

    private FilmService filmService;

    @Autowired
    public void setFilmService(FilmService filmService) {
        this.filmService = filmService;
    }
FilmDAOВа ба ин монанд, мо дар синф танзимкунанда месозем FilmServiceImpl. Давомаш... Муаррифии 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