JavaRush /جاوا بلاگ /Random-SD /Maven جو تعارف، اسپرنگ، MySQL، Hibernate ۽ پھرين CRUD ايپ...
Макс
سطح

Maven جو تعارف، اسپرنگ، MySQL، Hibernate ۽ پھرين CRUD ايپليڪيشن (حصو 2)

گروپ ۾ شايع ٿيل
منجهند جو سلام. هن آرٽيڪل ۾ آئون هڪ سادي CRUD ايپليڪيشن ٺاهڻ جي عمل ۾ Maven، Spring، Hibernate، MySQL ۽ Tomcat جهڙين شين سان منهنجي پهرين ملاقات کي حصيداري ڪرڻ چاهيان ٿو. هي 4 جو ٻيو حصو آهي. مضمون بنيادي طور تي انهن لاءِ آهي جيڪي اڳي ئي هتي 30-40 ليول مڪمل ڪري چڪا آهن، پر اڃا تائين خالص جاوا کان ٻاهر نه ويا آهن ۽ صرف شروعات ڪري رهيا آهن (يا شروع ٿيڻ وارا آهن) کليل دنيا ۾ داخل ٿيڻ لاءِ. اهي سڀ ٽيڪنالاجيون، فريم ورڪ ۽ ٻيا اڻ واقف لفظ. هي مضمون جو ٻيو حصو آهي "Introduction to Maven, Spring, MySQL, Hibernate and the first CRUD application." پهريون حصو هن لنڪ تي عمل ڪندي ڏسي سگهجي ٿو: Maven جو تعارف، اسپرنگ، MySQL، Hibernate ۽ پهرين CRUD ايپليڪيشن (حصو 1)

مواد:

خير، اچو ته اڳتي وڌون، اچو ته هاڻي ڪوشش ڪريون ته فلمن جي هڪ مڪمل ذخيري کي ترتيب ڏيو. اسان جي ننڍڙي ۽ سادي ايپليڪيشن ۾، يقينا، توهان صرف بيوقوف طور تي ڪنٽرولر ۾ سڀني منطق کي درست ڪري سگهو ٿا، پر، جيئن اڳ ۾ ئي ذڪر ڪيو ويو آهي، اهو بهتر آهي ته فوري طور تي سکڻ لاء هر شي کي صحيح طريقي سان ڪيئن ڪجي. تنهن ڪري، اچو ته ڪيترائي پرت ٺاهي. اسان وٽ ڊيٽا سان ڪم ڪرڻ لاءِ ذميوار DAO هوندو، هڪ خدمت ، جتي هر قسم جا ٻيا منطق هوندا، ۽ ڪنٽرولر صرف درخواستن تي عمل ڪندو ۽ ضروري خدمت جي طريقن کي ڪال ڪندو.

ڊيٽا جي رسائي آبجیکٹ

ڊيٽا جي رسائي آبجیکٹ (DAO) اهڙي نموني نموني آهي. نقطي هڪ خاص پرت ٺاهڻ آهي جيڪا ڊيٽا تائين رسائي جي ذميواري هوندي (ڊيٽابيس يا ٻي اسٽوريج ميڪانيزم سان ڪم ڪرڻ). پيڪيج ۾ daoاسان هڪ انٽرفيس ٺاهينداسين FilmDAOجنهن ۾ طريقا هوندا جهڙوڪ شامل ڪرڻ، ختم ڪرڻ، وغيره. مون انھن کي ٿورڙو مختلف سڏيو، پر اھي بنيادي CRUD عملن سان ملن ٿا ( C reate، Read ، U pdate، D elete).

هتي اها ڳالهه نوٽ ڪرڻ جي قابل آهي ته DAO کان علاوه، اتي پڻ آهي هڪ اهڙي طريقي سان مخزن جي طور تي، اهي تمام گهڻيون نظر اچن ٿيون، ٻئي ڊيٽا سان ڪم ڪرڻ لاء استعمال ٿيندا آهن. مون اڃا تائين اهو معلوم نه ڪيو آهي ته انهن طريقن ۾ ڪهڙا خاصيتون آهن ۽ انهن جي وچ ۾ ڪهڙو فرق آهي. تنهن ڪري، مون کي هتي غلط ٿي سگهي ٿو ۽ ان کي هڪ مخزن سڏيو وڃي، ۽ هڪ Tao نه، يا ٿي سگهي ٿو ته ان جي وچ ۾ ڪجهه آهي. پر اڪثر مثالن ۾ جيڪي مون ڏٺا ۽ پڙهيا آهن، ان کي 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 جو تعارف، اسپرنگ، MySQL، Hibernate ۽ پھرين CRUD ايپليڪيشن (حصو 2) - 1

ڪنٽرولر ۽ ڏيک

اچو ته ھاڻي ڪنٽرولر طريقن تي ڪم ڪريون ۽ صفحن کي ڀرڻ. جڏهن صفحا ڀرڻ، اسان کي ڪجهه ٽيڪنالاجي جي ضرورت پوندي. مثال طور، فلمن جي لسٽ کي ظاهر ڪرڻ لاء، اسان کي لوپ جي ضرورت آهي، جيڪڏهن، چئو، اسان ڪجهه لکت کي تبديل ڪرڻ چاهيون ٿا، پيٽرولن تي منحصر ڪري، اسان کي شرطن جي ضرورت آهي، وغيره. JSP (JavaServer Pages) فارميٽ توهان کي جاوا ڪوڊ داخل ڪرڻ جي اجازت ڏئي ٿو جنهن سان اهو سڀ ڪجهه لاڳو ڪري سگهجي ٿو. پر مان پيج تي 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>
هاڻي اچو ته ڪنٽرولر تي هڪ نظر وٺو. سڀ کان پهريان، اچو ته اتان کان اعتراض جي تخليق کي هٽائي ڇڏيو 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">فارم مان ڊيٽا سرور ڏانهن موڪلي ويندي (هڪ پوشيده فيلڊ کي قيمت سان خاص طور تي شامل ڪيو ويو آهي idته جيئن سرور ڄاڻي ٿو ته ڊيٽابيس ۾ ڪهڙي رڪارڊ کي اپڊيٽ ڪرڻ جي ضرورت آهي). طريقي سان 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;
    }
جيئن ته اسان هتي وصف منظور نه ڪيو آهي، هتي هڪ نئون اعتراض ٺاهيو ويندو Film. خير، هتي بنيادي طور تي ڪا نئين شيء ناهي. اهو پڻ قابل ذڪر آهي ته اسان وٽ " /add" تي موجود ٻئي طريقا آهن. اهو ممڪن آهي انهي حقيقت جي ڪري ته اهي مختلف قسم جي درخواستن جو جواب ڏين ٿا. مکيه صفحي تي لنڪ جي پيروي ڪندي اسان هڪ GET درخواست ڪريون ٿا، جيڪا اسان کي addPage. ۽ جڏهن شامل ڪرڻ واري صفحي تي اسان ڊيٽا موڪلڻ لاءِ بٽڻ دٻايو، پوسٽ جي درخواست ڪئي وئي، ۽ 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. جيڪڏهن اهو خالي آهي، پوء اها هڪ نئين فلم آهي، اسان کي ان لاء سڀني ڊيٽا کي ڀرڻ گهرجي ۽ ان کي لسٽ ۾ شامل ڪرڻ گهرجي. جيڪڏهن هي فيلڊ خالي نه آهي، پوء اها فهرست مان هڪ فلم آهي ۽ توهان کي صرف ان کي تبديل ڪرڻ جي ضرورت آهي. اهو. اسان کي اسان جي صفحي جا ٻه نسخو ملن ٿا: خير، فهرست مان فلم کي هٽائڻ لاء آخري ڪنٽرولر طريقو:
@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;
    }
مان سمجهان ٿو ته هتي ڪنهن به ڳالهه تي تبصرو ڪرڻ جي ضرورت ناهي، اهو سڀ ڪجهه اڳ ۾ ئي غور ڪيو ويو آهي. اسان اڳ ۾ ئي مکيه صفحي تي هن ايڊريس جا لنڪ ٺاهيا آهن. خير، هتي هر شي تيار ٿي لڳي، توهان ان کي ٻيهر هلائي سگهو ٿا ۽ ڏسو ته هر شي ڪيئن ڪم ڪري ٿي.

مخزن ۽ خدمت بهار جي اجزاء جي طور تي

اچو ته هڪ وڌيڪ ننڍڙي اصلاح ڪريون. حقيقت اها آهي ته هاڻي اسان جي اسٽوريج ۽ خدمت صرف ڪلاس آهن، ۽ انهن کي استعمال ڪرڻ لاء اسان کي پنهنجو پاڻ کي طبقاتي اعتراض ٺاهڻو پوندو ( new FilmServiceImpl()). پر اسان وٽ بهار هڪ سبب سان ڳنڍيل آهي ، تنهن ڪري هن کي هن معاملي کي پاڻ سنڀالڻ ڏيو. اسان جي طبقن کي بهار جي ڪنٽرول هيٺ رکڻ لاء، اسان کي اهو ظاهر ڪرڻو پوندو ته اهي اجزاء آهن. هن کي ڪرڻ لاء، اسان انهن کي خاص تشريح سان نشان لڳايو:
@Repository
public class FilmDAOImpl implements FilmDAO {
@Service
public class FilmServiceImpl implements FilmService {
تشريحون @Repository۽ @Service، گڏو گڏ @Controllerمان نڪتل آهن @Component. انهن ٽنهي تشريحن جون خاص خاصيتون ۽ فرق ڪهڙيون آهن ۽ اهي هڪ سادي جزو کان ڪيئن مختلف آهن، انهن کي دستاويزن يا گائيڊز ۾ الڳ الڳ پڙهڻ گهرجي. هينئر تائين، اهو ڄاڻڻ ڪافي آهي ته اهي تشريحون بهار کي ٻڌائين ٿيون ته اهي ڪلاس هڪ مخزن ۽ هڪ خدمت آهن، ترتيب سان. ۽ ھاڻي اسان کي انھن طبقن جون ٺوس شيون پاڻ ٺاھڻ جي ضرورت ناھي:
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