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

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

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

مواد:

ڊيزائن ۽ ويب وسيلن

اسان جي ايپليڪيشن ڪم ڪري ٿي، پر توهان ان کي ڳوڙها، بورنگ لکت، بدصورت لنڪس، خالي سفيد پس منظر کان سواء نه ڏسي سگهو ٿا. اسان کي هن کي درست ڪرڻ ۽ مختلف خوبصورتي شامل ڪرڻ جي ضرورت آهي. اسان اهو ڪيئن ٿا ڪريون؟ چڱو، سڀ کان پهريان، توهان صرف صفحن سان گڏ راند ڪري سگهو ٿا ۽ HTML جي صلاحيتن کي استعمال ڪندي هر قسم جون شيون ڪري سگهو ٿا . پر جيڪڏھن توھان ڪوشش ڪريو پس منظر، رنگ، سائيز، عناصر جي ترتيب، وغيره کي اڪيلو HTML استعمال ڪندي. ۽ ايئن. پوء آخر ۾ توهان صفحي مان اهڙي گندگي ٺاهي سگهو ٿا ته توهان بعد ۾ اتي ڪجهه به نه ڪري سگهو. ۽ ان کان علاوه، HTML جي ڊيزائن جا اختيار ڪافي محدود آهن. ان لاءِ CSS (Cascading Style Sheets) استعمال ڪرڻ بھتر آھي. پوء ڊزائن سان لاڳاپيل هر شيء هڪ جاء تي گڏ ڪري سگهجي ٿو، ۽ پوء صفحي جي گهربل عنصر تي لاڳو ٿئي ٿو. CSS ڪوڊ سڌو سنئون JSP صفحي تي خاص ٽيگ ۾ لکي سگھجي ٿو ، پر اھو وڌيڪ آسان آھي ته ان کي الڳ فائل ۾ وجھو، ۽ پوءِ ان کي ضروري صفحن تي لاڳو ڪريو. شڪلين ۽ ٻين جامد ويب وسيلن سان فائلون رکڻ لاءِ، اسان webapp اندر هڪ الڳ ڊاريڪٽري ٺاهينداسين . ويب وسيلن کي باقاعده وسيلن سان (جتي اسان وٽ آهي db.properties ) کي غلط استعمال نه ڪرڻ لاءِ ، اچو ته صرف هن ڊاريڪٽري کي ڪال ڪريون ۽ سڀ CSS فائلون، تصويرون وغيره اتي رکون:
Maven، Spring، MySQL، Hibernate ۽ پهرين CRUD ايپليڪيشن جو تعارف (حصو 4) - 1
انھن فائلن کي استعمال ڪرڻ لاءِ اسان کي انھن جي جڳھ کي ترتيب ڏيڻ جي ضرورت آھي. اچو ته پنهنجي ڪلاس ۾ هلون WebConfig. اڳي، اسان تشريح کي استعمال ڪيو @EnableWebMvcڪجھ به ترتيب نه ڏيڻ لاء، پر صرف ڊفالٽ ترتيب استعمال ڪريو. پر هاڻي ڪجهه ترتيب ڏيڻ جي ضرورت آهي. هن کي ڪرڻ لاء، اسان انٽرفيس استعمال ڪندا آهيون WebMvcConfigurer، جيڪو توهان کي ترتيب ڏيڻ جي طريقن کي ختم ڪرڻ جي اجازت ڏئي ٿو. اهو. اسان ڊفالٽ ٺاھ جوڙ استعمال ڪري سگھون ٿا، پر ساڳئي وقت پاڻ لاءِ ڪجھ پهلوئن کي ترتيب ڏيو. ھن حالت ۾ addResourceHandlers، اسان کي ھڪڙي طريقي جي ضرورت آھي جنھن سان اسين جامد ويب وسيلن جي جڳھ کي اشارو ڪندا آھيون. بس صورت ۾، سڄو ڪلاس ختم ٿي وڃي هن طرح نظر اچي ٿو:
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;
    }
}
ھاڻي صفحي تي اسان جي CSS کي استعمال ڪرڻ لاء توھان کي ان کي ڳنڍڻو پوندو ٽيگ جي اندر head:
<head>
    <link href="<c:url value="/res/style.css"/>" rel="stylesheet" type="text/css"/>
</head>
بس هي لڪير شامل ڪريو ۽ ٺاهيو، مثال طور، هي سادي CSS فائل:
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;
}
۽ اهو اسان جي ٽيبل کي مڪمل طور تي تبديل ڪري ڇڏيندو (اهو بيوقوف لڳي ٿو، يقينا، پر اهو هن جهڙو آهي، مثال طور): Maven جو تعارف، اسپرنگ، MySQL، Hibernate ۽ پھرين CRUD ايپليڪيشن (حصو 4) - 2خير، منهنجو خيال آهي ته CSS بابت تفصيل سان ڳالهائڻ جي ڪا ضرورت ناهي، هر شيء بلڪل سادي آهي. انٽرنيٽ تي توهان ٽيبل ۽ فارم ڊزائين ڪرڻ لاء ڪيترائي تيار ڪيل اختيارن ڳولي سگهو ٿا. پر اھو بھتر آھي، يقينا، ٺاھيو پاڻ ٺاھيو، توھان کي ھڪڙو ڊزائنر ٿيڻ جي ضرورت نھ آھي، آخرڪار، ھي ھڪڙي قسم جي پيچيده سائيٽ نه آھي. جيتوڻيڪ پهرين واقفيت کان پوء چند ڪلاڪ اهڙي سادي صفحي لاء ڪافي خوبصورت ۽ صاف ڊيزائن ٺاهڻ لاء ڪافي هوندا. ان کان علاوه، انٽرنيٽ سڀني قسمن جي سبقن، مثالن سان ڀريل آهي، اتي خاص سائيٽون آهن جتي توهان هڪ ئي وقت ۾ HTML، CSS کي هڪ اسڪرين تي ايڊٽ ڪري سگهو ٿا ۽ فوري طور تي ڏسو ته اهو سڀ ڪجهه ڪيئن نظر اچي ٿو. ٿوري مشق سان توهان حقيقي فن ٺاهي سگهو ٿا. سچ، توهان کي هتي تمام گهڻو پري نه وڃڻ گهرجي (جيستائين، يقينا، توهان هڪ ڊزائنر بڻجڻ جو منصوبو نه ڪيو آهي)، ٻي صورت ۾ ڊزائن هڪ اهڙي شيء آهي، توهان تمام گهڻي وقت تائين هتي پڪڙي سگهو ٿا. جڏهن مون پهريون ڀيرو CSS کي سمجهڻ شروع ڪيو، مون کي پڪڙيو ويو. مون چاهيو ٿي ته هر شيءِ، هر ملڪيت، ڪجهه موڙي، ان سان ٽڪرائجي، تجربا ڪيا، ڪجهه سائيٽن جا صفحا ورتا ۽ انهن کي سڃاڻڻ کان ٻاهر ٻيهر ٺاهيو. مون شايد هن رانديڪي سان هڪ هفتي تائين مزو ڪيو هو، ٻيو ڪجهه به نه ڪيو، جيستائين اهو مون کي وڃڻ نه ڏي :) خير، عام طور تي، يقينا، توهان کي ان کان وڌيڪ نه ڪرڻ گهرجي ۽ هڪ ناقابل فهم رنگارنگ معجزو ڪرڻ گهرجي، توهان کي اهو ڪرڻ گهرجي بس ۽ ذائقي سان. صرف هڪ شيء قابل ذڪر آهي. توهان کي سمجهڻ جي ضرورت آهي ته CSS ڊيزائن جي وضاحت آهي ، ۽ HTML مارڪ اپ آهي . توهان کي CSS ذريعي بلڪل سڀ ڪجهه ڪرڻ جي ڪوشش نه ڪرڻ گهرجي؛ ڪجهه پهلو ڪرڻ تمام ڏکيو هوندو، ۽ ڪجهه صرف ناممڪن آهي، جڏهن HTML ۾ اهو ڪجهه اضافي لائينن سان ڪيو ويندو آهي، يا هڪ ٽيگ ۾ صرف هڪ خاصيت سان. توهان کي انهن کي گڏ ڪرڻ جي ضرورت آهي، هر قسم جا رنگ، پس منظر، فونٽ سي ايس ايس ۾ ٺاهيو، ۽ جيڪڏهن، مثال طور، توهان کي ڪجهه ٽيبل سيلن کي گڏ ڪرڻ جي ضرورت آهي، اهو HTML اوزار استعمال ڪرڻ آسان آهي. خير، مثال طور، هتي اهو آهي جيڪو مان ڪجهه ڪلاڪن ۾ صفحن سان ڪري سگهيو آهيان CSS ۽ HTML سان (آئون هتي تفصيل ۾ نه ويندس انهي گندگي جي باري ۾ جيڪو مون هن کي حاصل ڪرڻ لاءِ ڪيو هو، آخر ۾ اتي هوندو. هن پروجيڪٽ جي GitHub ڏانهن هڪ لنڪ جتي توهان ڏسي سگهو ٿا): Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 4) - 3يقينا، مون کي خبر ناهي ته مون اتي هر شيء ڪيتري قابليت سان ڪئي، پر غور ڪيو ته مون پهريون ڀيرو هڪ هفتي اڳ CSS ڏٺو، منهنجو خيال آهي ته اهو تمام سٺو نڪتو.

صفحو

هاڻي سڀ ڪجهه ڪم ڪري ٿو، اهو سٺو لڳندو آهي، پر ٽيبل ۾ صرف چند رڪارڊ موجود آهن. ڇا جيڪڏهن ان ۾ سؤ فلمون آهن، يا هڪ هزار؟ اهو وڌيڪ آسان آهي جڏهن فهرست ڏيکاريل آهي 10 صفحن جي صفحن ۾، مثال طور. تنهن ڪري، هاڻي اسان ڪوشش ڪنداسين ته فهرست کي صفحن ۾ ورهائڻ تي عمل ڪيو وڃي (ڪڏهن ڪڏهن اهو پڻ سڏيو ويندو آهي "پيجنگ" يا "صفحي" ( انگريزي صفحو )). اهو مختلف طريقن سان ڪري سگهجي ٿو. مثال طور، توهان مڪمل لسٽ کي jsp صفحي ڏانهن منتقل ڪري سگهو ٿا ۽ رڪارڊ جي گهربل تعداد لاءِ اتي ٽيبل ٺاهي سگهو ٿا. يا، مثال طور، توھان خدمت ۾ عام لسٽ مان گھربل رڪارڊ ڪڍي سگھو ٿا، ۽ پوءِ ھن ميني لسٽ کي ڊسپلي لاءِ jsp صفحي ڏانھن موڪليو. پر اهو بهترين آهي، يقينا، اهو ڊيٽابيس جي سطح تي ڪرڻ لاء. خيال اهو ناهي ته ڊيٽابيس مان هڪ مڪمل فهرست وٺو ۽ پوءِ ان کي ٽڪرن ۾ ورهايو، پر شروعاتي طور تي ڊيٽابيس مان گهربل ٽڪرا حاصل ڪرڻ لاءِ هر شيءِ کي ڇهڻ کان سواءِ. آخرڪار، اسان کي هڪ ئي وقت ڊيٽابيس مان سڀ سوين يا هزارين رڪارڊ ڪڍڻ جي ضرورت آهي، جيڪڏهن اسان کي گهربل آهي مٿين ڏهن ۾، اهو بهتر آهي ته صرف هڪ ڏهن کي ڪڍڻ. اچو ته DAO ڏانھن وڃو ۽ طريقي سان allFilmsھڪڙو پيٽرولر شامل ڪريو int page، جيڪو صفحي نمبر لاء ذميوار ھوندو (سروس ۾، يقينا، اسان اھو ئي ڪندا آھيون). ۽ اچو ته هن طريقي جي عمل کي ٿورو تبديل ڪريون؛ جيڪڏهن اڳ ۾ اسان سڄي لسٽ کي ڪڍي ڇڏيو، هاڻي اسان صرف هڪ حصو ڪڍنداسين. setFirstResultطريقا (جنهن جي ٽيبل جي قطار سان شروع ڪجي) ۽ setMaxResults(ڪيترا رڪارڊ ڏيکاريا وڃن) اسان کي هن ۾ مدد ڪندا :
@SuppressWarnings("unchecked")
public List<Film> allFilms(int page) {
    Session session = sessionFactory.getCurrentSession();
    return session.createQuery("from Film").setFirstResult(10 * (page - 1)).setMaxResults(10).list();
}
اهي. جيڪڏهن هي پهريون صفحو آهي، ته اسان وڌ ۾ وڌ 10 ريڪارڊ ڏيکاريون ٿا، 0هين کان شروع ٿي؛ جيڪڏهن اهو 5هين صفحو آهي، ته پوءِ 40هين کان شروع ٿيندڙ 10 رڪارڊس (اهو نه وساريو ته ڊيٽابيس ۾ نمبرنگ 0 کان شروع ٿئي ٿي). اسان اضافي طور تي ھڪڙو طريقو ٺاھينداسين جيڪو ٽيبل ۾ رڪارڊ جو تعداد واپس آڻيندو. اسان کي سڀني صفحن جو تعداد ڄاڻڻ ۽ اسان جي jsp صفحي تي انهن لاء لنڪس ٺاهڻ لاء هن جي ضرورت پوندي.
public int filmsCount() {
     Session session = sessionFactory.getCurrentSession();
     return session.createQuery("select count(*) from Film", Number.class).getSingleResult().intValue();
 }
اهڙي سوال کي استعمال ڪندي، اسان ٽيبل ۾ سڀني رڪارڊن جو تعداد حاصل ڪنداسين ( intقيمت جي طور تي) بغير پاڻ کي رڪارڊ ڪڍڻ کان سواء. ھاڻي اچو ته ڪنٽرولر ڏانھن وڃو ۽ طريقي تي ڪم ڪريو جيڪو فلمن جي فهرست سان مکيه صفحي ڏانھن موٽائي ٿو:
@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;
}
هتي هڪ نئين تشريح ظاهر ٿي آهي @RequestParam، جنهن مان ظاهر ٿئي ٿو ته اسان هي قيمت حاصل ڪري رهيا آهيون درخواست جي پيٽرول مان. ھاڻي، جيڪڏھن اسين پيراميٽر سان ايڊريس ڏانھن وڃون ٿا، مثال طور http://localhost:8080/ ?page=4 ، اسان کي، ان مطابق، چوٿين صفحو ملندو. اسان ڊفالٽ ويليو کي " 1 " تي سيٽ ڪيو ته جيئن ايپليڪيشن شروع ٿئي، جڏهن اسان ڪنهن ايڊريس تي وڃون بغير http://localhost:8080/ parameter ، اسان کي پهريون صفحو ملندو. طريقي سان اسان سڀني رڪارڊن جو تعداد حاصل ڪندا آهيون، پوء هن سادي طريقي سان اسان صفحن جي تعداد کي ڳڻپ ڪندا آهيون. اهي. جيڪڏهن اسان وٽ 10 رڪارڊ آهن، اهو 1 صفحو آهي، ۽ جيڪڏهن 11 آهن، ته اهو اڳ ۾ ئي 2 آهي. خير، اسان هن سڄي شيء کي ماڊل ڏانهن منتقل ڪريون ٿا. توھان کي ھڪڙي چڪر ۾ انھن مڙني لاءِ لنڪس ٺاھڻ لاءِ صفحن جو تعداد ڄاڻڻ جي ضرورت آھي، ۽ فلمن جو تعداد صرف ان صورت ۾ ھجڻ گھرجي، مثال طور، جيڪڏھن توھان چاھيو ٿا ته ھن معلومات کي صفحي تي ڪٿي ڏيکاريو. هاڻي باقي رهي ٿو films.jsp ڏانهن وڃو ۽ هن تعمير کي استعمال ڪندي هر صفحي تي لنڪ شامل ڪريو:
<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، ... ذريعي لنڪ ٺاهيندا آهيون ۽ انڊيڪس ويليو ذريعي پيٽرول سيٽ ڪريو.

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

اچو ته ھڪڙو وڌيڪ ننڍڙو رابطو شامل ڪريو. اسان ڪنٽرولر ڏانهن واپس وڃو. طريقن کي شامل ڪرڻ، تدوين ڪرڻ ۽ حذف ڪرڻ ۾، آپريشن مڪمل ٿيڻ کان پوءِ، اسان مکيه صفحي ڏانھن ريڊائريڪٽ ڪريون ٿا "redirect:/" . اهو. جيڪڏهن اسان 50هين صفحي تي ڪٿي آهيون ۽ ايڊٽ داخل ٿيڻ تي ڪلڪ ڪريو، پوءِ عمل ڪرڻ کان پوءِ اسان ايڊريس تي وينداسين " / "، يعني. اچو ته صفحي 1 ڏانھن واپس وڃو. اهو تمام آسان ناهي؛ مان واپس وڃڻ چاهيان ٿو جتان اسان آيا آهيون. اچو ته ان کي بلڪل سادو حل ڪريون. اچو ته ڪلاس ۾ FilmControllerهڪ مثال متغير ٺاهيوint page
private int page;
طريقي جي اندر allFilmsاسين هن متغير کي پيٽرولر جي قيمت تفويض ڪنداسين page:
this.page = page;
اهو. هر دفعي هن طريقي تي عمل ڪيو ويندو آهي (يعني جڏهن اسان صفحن ذريعي نيويگيٽ ڪندا آهيون)، موجوده صفحي جي قيمت متغير ڏانهن لکيو ويندو. ۽ پوءِ اسان هي قدر استعمال ڪريون ٿا اسان جي طريقن ۾ ساڳئي صفحي ڏانهن واپس ريڊيو ڪرڻ لاءِ.
modelAndView.setViewName("redirect:/?page=" + this.page);

نتيجو

اسان شايد هتي ختم ڪنداسين. نتيجو هڪ مڪمل CRUD ايپليڪيشن آهي. اهو يقيني طور تي مثالي کان پري آهي (تمام پري)، پر اهو بهتر ۽ بهتر ٿي سگهي ٿو، ڪيڙا مقرر ڪيا ويا ۽ ڪارڪردگي شامل ڪئي وئي. توهان استعمال ڪري سگهو ٿا تعمير ٿيل طريقا crud آپريشن لاء؛ شامل ڪريو فلٽرنگ، ڳولا، ترتيب ڏيڻ؛ ٻيا لاڳاپيل جدول شامل ڪريو؛ اختيار ۽ تصديق، وغيره سان مختلف استعمال ڪندڙن لاءِ سپورٽ لاڳو ڪريو. ۽ ايئن. تخيل جي گنجائش لامحدود آهي، تنهنڪري ان لاءِ وڃو. هن پروجيڪٽ جي github سان ڳنڍيو . توهان جي توجه لاء مهرباني. PS هي منهنجي زندگي ۾ هڪ مضمون لکڻ جي پهرين ڪوشش آهي، تنهنڪري سختي سان فيصلو نه ڪريو :). مان معافي وٺان ٿو ته مفيد وسيلن ۾ ڪي به مختلف لنڪ شامل نه ڪيا ويا آهن؛ بدقسمتي سان، مان اڃا تائين انهن ذريعن جي لنڪ محفوظ ڪرڻ جي عادت پيدا نه ڪري سگهيو آهيان جن مان معلومات حاصل ڪريان ٿو. ۽، يقينا، مان ڪيترن ئي خطن لاء معافي وٺان ٿو، اختصار منهنجي ڏات نه آهي، مون کي اميد آهي ته ڪو ماڻهو هن کي سنڀاليندو. سڀني حصن لاء لنڪس
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION