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 (3-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 4-nji bölümiň üçünji bölümi. Makala, esasan, bu ýerde eýýäm 30-40 derejäni tamamlan, ýöne entek arassa Java-dan geçmedik we açyk dünýä girip başlaýan (ýa-da başlajak) adamlar üçin niýetlenendir. bu tehnologiýalaryň, çarçuwalaryň we beýleki nätanyş sözleriň hemmesi. Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy (3-nji bölüm) bilen tanyşlykBu, "Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy" atly makalanyň üçünji bölümi. Öňki bölekleri baglanyşyklara eýerip görmek bolýar:

Mazmuny:

Maglumat bazasyny döretmek we birikdirmek

Garaz, maglumatlar bazasynyň üstünde işlemegiň wagty geldi. “Hibernate” -ni birleşdirip , ol ýerde nähili işlemelidigi barada pikir etmezden ozal, maglumatlar bazasynyň özüne seredeliň. Geliň, döredeliň, birleşdireliň, ýasalyň we belligi dolduralyň. DBMS (Maglumatlar bazasyny dolandyryş ulgamy) MySQL ulanarys (elbetde, ilki göçürip almaly we gurmaly). SQL (Strukturalaşdyrylan talap dili) baglanyşyk bazasyndaky maglumatlary döretmek, üýtgetmek we dolandyrmak üçin ulanylýan deklaratiw programma dili. Şeýle maglumat bazalarynda maglumatlar tablisa görnüşinde saklanýar. Programma maglumatlar bazasy bilen nädip aragatnaşyk saklaýar (SQL talaplaryny maglumat bazasyna geçirmek we netijeleri gaýtarmak). Munuň üçin Java-da JDBC (Java DataBase Connectivity) ýaly bir zat bar , ýönekeý söz bilen aýdylanda, maglumatlar bazalary bilen işlemek üçin interfeýsler we synplar toplumy. Maglumat bazasy bilen täsirleşmek üçin bir baglanyşyk döretmeli, munuň üçin bukjanyň java.sqlsynpy bar Connection. Baglanyşygy gurmagyň birnäçe usuly bar, mysal üçin getConnectionsynp usulyny ulanyp bilersiňiz DriverManager. Şeýle-de bolsa, maglumat bazasy bilen özara täsir gönüden-göni amala aşyrylmaýar, sebäbi maglumatlar bazalary köp we olar başga. Şeýlelik bilen olaryň hersi üçin öz JDBC Sürüjisi bar. Bu sürüjini ulanyp, maglumatlar bazasyna birikme döredilýär. Şonuň üçin ilki bilen ünsüňizi sowmazlyk üçin ilki bilen MySQL draýwerini guralyň . Aşakdaky garaşlylygy goşalyň pom.xml:
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.11</version>
</dependency>
Indi maglumat bazasyny döredeliň. Görmek -> Gural Windows -> Maglumat bazasy - maglumat bazasy paneli açylar. Täze (ýaşyl +) -> Maglumat çeşmesi -> MySQL - ulanyjy adyny we parolyny görkezmeli penjire açylar, MySQL guranymyzda belläris (mysal üçin kök we kök ulandym). Port (MySQL 3306 üçin asyl), ady we ş.m. bolşy ýaly goýuň. Baglanyşygy " Synag birikmesi " düwmesini ulanyp synap bilersiňiz. OKMaven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy (3-nji bölüm) bilen tanyşlyk basyň we indi MySQL serwerine birikdik. Indiki maglumatlar bazasyny döredeliň. Munuň üçin açylýan konsolda skript ýazyp bilersiňiz:
CREATE DATABASE test
“Execute” düwmesine basyň we maglumat bazasy taýýar, indi ony birikdirip bilersiňiz. Munuň üçin Maglumat çeşmesiniň häsiýetlerine gaýdyp, Maglumat bazasynyň meýdançasyna maglumat bazasynyň adyny (synag) giriziň, soňra ulanyjy adyny we parolyny täzeden giriziň we OK basyň. Indi stol düzmeli. Grafiki gurallary ulanyp bilersiňiz, ýöne onuň görnüşini görmek üçin ilkinji gezek skript ýazmagyňyz ähtimal:
USE test;

CREATE TABLE films
(
  id int(10) PRIMARY KEY AUTO_INCREMENT,
  title VARCHAR(100) NOT NULL,
  year int(4),
  genre VARCHAR(20),
  watched BIT DEFAULT false  NOT NULL
)
COLLATE='utf8_general_ci';
CREATE UNIQUE INDEX films_title_uindex ON films (title);

INSERT INTO `films` (`title`,`year`,`genre`, watched)
VALUES
  ("Inception", 2010, "sci-fi", 1),
  ("The Lord of the Rings: The Fellowship of the Ring", 2001, "fantasy", 1),
  ("Tag", 2018, "comedy", 0),
  ("Gunfight at the O.K. Corral", 1957, "western", 0),
  ("Die Hard", 1988, "action", 1);
filmsSütünler idwe titleş.m. ady bilen tablisa döredilýär. Her sütün üçin görnüş görkezilýär (gabygyň iň ýokary çykarylyşy).
  • PRIMARY KEY- bu tablisadaky ýazgyny özboluşly kesgitlemek üçin ulanylýan esasy açardyr (bu özboluşlylygy aňladýar)
  • AUTO_INCREMENT- baha awtomatiki usulda dörediler (elbetde nol bolmaz, şonuň üçin muny görkezmeli dälsiňiz)
  • NOT NULL- bu ýerde hemme zat düşnükli, boş bolup bilmez
  • DEFAULT- deslapky bahany belläň
  • COLLATE- kodlamak
  • CREATE UNIQUE INDEX- meýdany özboluşly etmek
  • INSERT INTO- tablisa ýazgy goşuň
Netije şuňa meňzeş alamat: Belki, häzirlikçe web programmamyzdan aýratynlykda oňa birikmäge synanyşmagyňyz gerek. Munuň bilen baglanyşykly käbir meseleler ýüze çyksa, derrew çözeris. Otherwiseogsam, soňrak Gibernate birikdireris , bir zat ederis, düzeris, tinker ederis we bir ýerde bulaşsak, iň bolmanda meseläniň şu ýerde däldigini bileris. mainBaglanyşygy barlamak üçin, wagtlaýyn bir usul döredeliň . Aslynda, ony islendik ýerde, hatda dolandyryjy synpda-da, hatda modelde ýa-da konfigurasiýada hem goýup bilersiňiz, tapawudy ýok, baglanyşyk bilen hemme zadyň gowydygyna göz ýetirip, ony pozup bilersiňiz. Moreöne has seresap bolmak üçin geliň, aýratyn synp döredeliň Main:
package testgroup.filmography;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Main {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/test";
        String username = "root";
        String password = "root";
        System.out.println("Connecting...");

        try (Connection connection = DriverManager.getConnection(url, username, password)) {
            System.out.println("Connection successful!");
        } catch (SQLException e) {
            System.out.println("Connection failed!");
            e.printStackTrace();
        }
    }
}
Bu ýerde hemme zat ýönekeý, baglanyşyk parametrlerini maglumatlar bazamyza düzýäris we baglanyşyk döretmäge synanyşýarys. Geliň, muny başlalyň mainwe göz aýlalyň. Şeýlelik bilen, kadadan çykma, käbir wagt zonasyndaky meseleler we SSL hakda başga duýduryş aldym. Internete göz aýlanyňyzdan soň, munuň adaty bir meseledigine göz ýetirip bilersiňiz we sürüjiniň dürli wersiýalaryny (mysql-connector-java) ulananyňyzda başgaça ant içip biler. Mysal üçin, 5.1.47 wersiýasyny ulananymyzda wagt zolagy sebäpli hiç hili kadadan çykma ýokdugyny synagdan geçirdim, birikme kadaly döredilýär, ýöne SSL duýduryşy henizem açylýar. Käbir beýleki wersiýalary bilen diňe duýduryş däl, SSL bilen baglanyşykly kadadan çykma bar ýalydy. Bolýar, bu many däl. Bu meseläni aýratyn çözmäge synanyşyp bilersiňiz, emma indi bu meselä girip bilmeris. Munuň çözgüdi gaty ýönekeý, url- da goşmaça parametrleri görkezmeli , meselem serverTimezonewagt sebiti bilen baglanyşykly bolsa we useSSLSSL bilen baglanyşykly bolsa:
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=Europe/Minsk&useSSL=false";
Indi wagt guşagyny kesgitledik we SSL-i öçürdik. Againene-de işe girizýäris mainwe voila - Baglanyşyk üstünlikli! Bolýar, nädip baglanyşyk döretmelidigini bildik. Synp Mainesasan öz işini tamamlady, ony pozup bilersiňiz.

ORM we JPA

Gowy tarapdan, has gowy düşünmek üçin maglumatlar bazalary bilen ilkibaşdan hiç hili gyşarnyksyz we başga zatlar bolmazdan tertipleşip başlamak has gowudyr. Şonuň üçin käbir gollanmalary tapyp, ilki bilen JDBC synplary bilen işlemäge, SQL talaplaryny el bilen ýazmaga we ş.m. Geliň, derrew ORM modeline geçeliň . Bu näme many berýär? Elbetde, bu hakda aýratyn okamak ýene-de maslahat berilýär, ýöne gysgaça suratlandyrmaga synanyşaryn. ORM (Obýekt-baglanyşyk kartasy ýa-da obýekt-baglanyşyk kartasy) obýektleri baglanyşyk bazasynyň gurluşlaryna kartalaşdyrmak üçin tehnologiýa. Java obýektimizi tablisanyň hatary hökmünde görkezmek. ORM-iň kömegi bilen SQL skriptlerini ýazmakdan gorkmaly däl we obýektler bilen işlemäge üns bermeli däl. Nädip ulanmaly. Java-da ORM düşünjesini durmuşa geçirýän başga bir ajaýyp zat bar, JPA (Java Persistence API). JPA şeýle spesifikasiýa; obýektlere bildirilýän talaplary beýan edýär, maglumatlar bazasy bilen işlemek üçin dürli interfeýsleri we düşündirişleri kesgitleýär. JPA aslynda düşündiriş, standart. Şol sebäpden, bu çarçuwanyň düýp manysy bolan Gibernate (we iň meşhurlaryndan biri) Hibernate bolup durýar. Gibernate, obýekt bilen baglanyşykly kartalaşdyrmak (ORM) meselelerini çözmek üçin döredilen JPA spesifikasiýasynyň durmuşa geçirilmegi. Bu zatlaryň hemmesini taslamamyz bilen baglanyşdyrmalydyrys. Mundan başga-da, Baharymyzyň gyrada durmazlygy we maglumatlar bazasy bilen bu herekete gatnaşmagy üçin ýene birnäçe modul birikdirmeli, sebäbi Bahar-webmvc garaşlylygyndan alan zatlarymyzyň hemmesi indi ýeterlik däl. Şeýle hem , maglumatlar bazasy bilen işlemek üçin bahar-jdbc , amallary goldamak üçin bahar-tx we Gibernate bilen işlemek üçin bahar-orm gerek bolar . Baglanyşyklary goşalyň pom.xml:
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.3.7.Final</version>
</dependency>
Bu iki baglylyk ýeterlikdir. Gibernate ýadrosy , bahar-jdbc we bahar-tx bahar-orm bilen bilelikde javax.persistence-apigeler .

Edara

FilmŞonuň üçin synp obýektleriniň maglumatlar bazasynda saklanmagyny isleýäris . Munuň üçin synp birnäçe şertleri kanagatlandyrmalydyr. JPA-da munuň üçin Kärhana ýaly bir zat bar . Edara synpy adaty POJO synpy bolup, olar üçin hususy meýdanlar we alyjylar we sazlaýjylar bar. Parametrleri bolmadyk (ýa-da deslapky konstruktor) şahsy däl konstruktor bolmaly we esasy açary bolmaly, ýagny maglumatlar bazasyndaky bu synpyň her ýazgysyny özboluşly kesgitlän bir zat. Şeýle synp üçin ähli talaplar barada aýratyn okap bilersiňiz. FilmJPA belliklerini ulanyp, synpymyzy bir gurama edeliň :
package testgroup.filmography.model;

import javax.persistence.*;

@Entity
@Table(name = "films")
public class Film {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name = "title")
    private String title;

    @Column(name = "year")
    private int year;

    @Column(name = "genre")
    private String genre;

    @Column(name = "watched")
    private boolean watched;

    // + getters and setters
}
  • @Entity- bu synpyň bir birlikdigini görkezýär.
  • @Table- bu guramany görkezmek üçin belli bir tablisany görkezýär.
  • @Id- bu meýdanyň esasy açardygyny görkezýär, ýagny bu emläk her üýtgeşik ýazgyny kesgitlemek üçin ulanylar.
  • @Column- meýdany stol sütünine birleşdirýär. Meýdanyň we tablisanyň sütün atlary birmeňzeş bolsa, olary taşlap bilersiňiz.
  • @GeneratedValue- emläk awtomatiki usulda dörediler; gabygyň içinde nädip görkezip bilersiňiz. Indi dürli strategiýalaryň nähili işleýändigine düşünmeris. Bu ýagdaýda her täze bahanyň öňki bahasyndan 1 köpeljekdigini bilmek ýeterlikdir.
Her bir emläk üçin başga-da köp zatlary görkezip bilersiňiz, mysal üçin nol däl ýa-da üýtgeşik bolmaly, deslapky bahany, iň uly ululygy we ş.m. kesgitläp bilersiňiz. Bu klasa esaslanýan tablisa döretmek zerur bolsa, bu peýdaly bolar; Gibernate-de bu mümkinçilik bar. Alreadyöne eýýäm tablisany özümiz döretdik we ähli häsiýetleri düzdük, onsuz edip bileris. Kiçijik bellik.Gibernate resminamalary bellikleri meýdanlarda däl-de, alyjylarda ulanmagy maslahat berýär. Şeýle-de bolsa, bu çemeleşmeleriň arasyndaky tapawut gaty inçe we ýönekeý programmamyzda munuň hiç hili täsiri bolmaz. Mundan başga-da, köp adam her niçigem bolsa meýdanlaryň üstünde bellikler goýýar. Şonuň üçin geliň, muny şeýle goýalyň, has arassa görünýär.

Gibernate häsiýetleri

Geliň, Gibernate gurup başlalyň. Ilki bilen, ulanyjy ady we parol, url we başga bir zat ýaly käbir maglumatlary aýratyn faýla goýalyň. String username = "root";Elbetde, baglanyşygy barlanymyzda edişimiz ýaly ( soň bolsa birikmäni döretmek usulyna geçirdik) edişimiz ýaly gönüden-göni synpda adaty setir hökmünde kesgitläp bilersiňiz . Emma şeýle statiki maglumatlary käbir faýlda saklamak has dogry property. Mysal üçin, maglumat bazasyny üýtgetmeli bolsaňyz, ähli synplardan geçip, nirede ulanylýandygyny gözlemeli dälsiňiz, bu faýlyň bahasyny bir gezek üýtgetmek ýeterlikdir. Resurslar katalogynda db.properties faýly döredeliň :
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?serverTimezone=Europe/Minsk&useSSL=false
jdbc.username=root
jdbc.password=root

hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
hibernate.show_sql=true
Dogrusy, hemme zat ýokardan düşnükli, maglumat bazasyna birikmegiň parametrleri, ýagny sürüjiniň synp ady, url, ulanyjy ady we paroly. hibernate.dialect- bu häsiýet, SQL diliniň haýsy wersiýasynyň ulanylýandygyny Gibernate görkezmek üçin zerurdyr. Hakykat, her DBMS-de mümkinçilikleri giňeltmek, käbir funksiýalary goşmak ýa-da bir zady optimizirlemek üçin adatça dili birneme döwrebaplaşdyrýarlar. Netijede, her DBMS-iň öz SQL şiwesi bar. Iňlis diline meňzeýär, dil birmeňzeş ýaly, ýöne Awstraliýada, ABŞ-da ýa-da Angliýada birneme üýtgeşik bolar we käbir sözleriň dürli manylary bolup biler. Düşünmek bilen baglanyşykly haýsydyr bir kynçylykdan gaça durmak üçin Gibernate-yň anyk näme bilen iş salyşmalydygyny gönüden-göni aýtmaly. hibernate.show_sql- bu häsiýetiň kömegi bilen maglumatlar bazasyndaky talaplar konsolda görkeziler. Bu hökman däl, ýöne bu zat bilen iň bolmanda bolup geçýän zatlara seredip bilersiňiz, ýogsam Gibernate haýsydyr bir jadylaýan ýaly bolup biler. Elbetde, görkezmek düýbünden düşnükli bolmaz, munuň üçin haýsydyr bir ýazgy ýazgysyny ulanmak has gowudyr, ýöne bu başga bir zat, häzirlikçe eder.

Gibernate konfigurasiýasy

Sazlamany düzmäge geçeliň. Bukjada configsynp döredeliň HibernateConfig:
package testgroup.filmography.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;
import java.util.Properties;

@Configuration
@ComponentScan(basePackages = " testgroup.filmography")
@EnableTransactionManagement
@PropertySource(value = "classpath:db.properties")
public class HibernateConfig {
    private Environment environment;

    @Autowired
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }

    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
        properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
        return properties;
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
        dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
        dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
        dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
        return dataSource;
    }

    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan("testgroup.filmography.model");
        sessionFactory.setHibernateProperties(hibernateProperties());
        return sessionFactory;
    }

    @Bean
    public HibernateTransactionManager transactionManager() {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(sessionFactory().getObject());
        return transactionManager;
    }
}
Bu ýerde täze zatlar gaty köp, şonuň üçin her bir element hakda dürli çeşmelerden maglumat gözlemek iň gowusydyr. Geliň, bu ýerde gysgaça geçeliň.
  • Sapagy haçan @Configurationedendigimize düşündik .@ComponentScanWebConfig
  • @EnableTransactionManagement- amallary dolandyrmak üçin ulanmaga mümkinçilik berýär TransactionManager. Gibernate amallar arkaly maglumat bazasy bilen işleýär; belli bir amallar toplumynyň bitewi ýerine ýetirilmegi üçin zerur. usul haýsydyr bir amalda kynçylyk çekýän bolsa, beýlekileriň hemmesi ýerine ýetirilmez, şonuň üçin pul geçirilmegi bilen nusgawy mysaldaky ýaly bolmaz, bir hasapdan pul çykarmak amallary gutaranda, ýöne başga birine hat ýazmak işi netije bermedi, netijede pul ýitdi.
  • @PropertySource- ýaňy-ýakynda döreden häsiýetler faýlymyzy birleşdirmek.
  • Environment- bir faýldan häsiýet almak üçin property.
  • hibernateProperties- Gibernate häsiýetlerini häsiýetler obýekti hökmünde görkezmek üçin bu usul zerurdyr
  • DataSource- maglumat bazasyna baglanyşyk döretmek üçin ulanylýar. Bu , öň döredenimizde ulanan DriverManager- iň alternatiwasy main. Resminamalarda DataSourceulanmak maksadalaýyk diýilýär. Elbetde, tapawudyň we artykmaçlygyň nämedigini internetde okamagy ýatdan çykarmarys. Esasanam bir peýdasy, maglumatlar bazasyna birikmek howuzyny (DBCP) döretmek ukybydyr.
  • sessionFactory- guramanyň obýektleri bilen amallaryň amala aşyrylýan sessiýalaryny döretmek. Bu ýerde maglumat çeşmesini, Gibernate häsiýetlerini we haýsy paketde gurama synplaryny gözlemelidigimizi kesgitleýäris.
  • transactionManager- geleşik dolandyryjysyny düzmek.
Bu barada kiçijik bellik DataSource. Resminamalarda adaty durmuşa geçirmegiň ulanylmagy DriverManagerDataSourcemaslahat berilmeýär diýilýär adaty birikdiriş basseýniniň çalyşmagy we adatça diňe synaglar we şuňa meňzeşler üçin amatly. Adaty bir programma üçin haýsydyr bir DBCP kitaphanasyny ulanmak maksadalaýyk. Elbetde, ýüz tutmagymyz üçin elbetde ýeterlik zadymyz ýeterlik, ýöne suraty tamamlamak üçin, belki-de maslahat berlişi ýaly başga bir durmuşa geçiriş ulanarys. Aşakdaky garaşlylygy goşalyň pom.xml:
<dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-dbcp</artifactId>
            <version>9.0.10</version>
</dependency>
dataSourceSynp usulynda bolsa ony paketden biri bilen HibernateConfigçalyşýarys : DriverManagerDataSourceBasicDataSourceorg.apache.tomcat.dbcp.dbcp2
BasicDataSource dataSource = new BasicDataSource();
Dogrusy, hemme zat taýyn ýaly, konfigurasiýa taýyn, galan zat ony AppInitializer- e goşmak :
protected Class<?>[] getRootConfigClasses() {
        return new Class[]{HibernateConfig.class};
    }

Maglumatlara giriş gatlagy

Ahyry DAO-dan başlamagyň wagty geldi. Sapaga girýäris FilmDAOImplwe ilki bilen synag sanawyny şol ýerden pozýarys, indi bize zerurlyk ýok. Sessiýa zawodyny goşalyň we üstünde işläliň.
private SessionFactory sessionFactory;

    @Autowired
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
Ilki bilen, filmleriň sanawy bolan sahypany görkezmegiň usulyny dörederis, onda sessiýa alarys we maglumatlar bazasyna haýyş ederis (ähli ýazgylary çykaryp, sanaw düzeris):
public List<Film> allFilms() {
        Session session = sessionFactory.getCurrentSession();
        return session.createQuery("from Film").list();
    }
Bu ýerde 2 bal bar. Ilki bilen duýduryş görkezildi. Munuň sebäbi parametrleşdirilen almak isleýändigimiz bilen baglanyşykly List<Film>, ýöne usul diňe Listkompil wagtynda haýyşyň haýsy görnüşine gaýdyp geljekdigi belli bolmanlygy sebäpli gaýdyp gelýär. Şeýlelik bilen pikir, kynçylyklara sebäp bolup biljek howply öwrülişik edýändigimizi duýdurýar. Munuň ýaly sorag ýüze çykmazlygy üçin muny etmegiň ýene birnäçe dogry usuly bar. Internetde maglumat gözläp bilersiňiz. Let'söne indi munuň bilen gyzyklanalyň. Hakykat, haýsy görnüşiň yzyna gaýtaryljakdygyny anyk bilýäris, şonuň üçin bu ýerde hiç hili mesele ýüze çykmaz, duýduryşy äsgermezlik edip bilersiňiz. , Öne, gözüňiz gözüňe degmezligi üçin, usulyň üstünde düşündiriş asyp bilersiňiz @SupressWarning("unchecked"). Şeýle etmek bilen, düzüjä aýdýarys, aladaňyz üçin dost, sag bolsun aýdýaryn, ýöne näme edýändigimi bilýärin we hemme zady gözegçilik astynda saklaýaryn, şonuň üçin bu usul barada alada edip bilmersiňiz. Ikinjiden, pikir gyzyl reňkde " from Film". Diňe HQL (Gibernate Talap Dili) soragy we pikir hemme zadyň dogrudygyna ýa-da ýalňyşlygynyň bardygyna düşünmeýär. Pikir sazlamalaryna baryp, hemme zady el bilen düzedip bilersiňiz (gyzyklanýan bolsaňyz internete serediň). Ora-da diňe Gibernate çarçuwasyna goldaw goşup bilersiňiz, muny amala aşyrmak üçin taslama sag basyň, Çarçuwaly goldaw goşuň saýlaň, Gibernate üçin gutujygyny belläň we OK basyň. Ondan soň, subýekt synpynda ( Film) köp zadyň gyzyl reňk bilen çyzylmagy ähtimal, mysal üçin düşündiriş stoluň “filmlerini” çözüp bolmaz diýen@Table(name = "films") duýduryş berer . Againene-de bu ýerde ýalňyşlyk ýok, bu dizaýn ýalňyşlygy däl, hemme zat düzüler we işlär. Bu pikir biziň bazamyz hakda hiç zat bilmeýändigi üçin nygtalýar. Muny düzetmek üçin ideýany maglumatlar bazasy bilen birleşdireliň. Görmek -> Gural Windows -> Dowamlylyk (bir tab açylar) -> syçanyň sag düwmesi, Maglumat çeşmesinde Maglumat çeşmelerini bellemek -> saýlaň , maglumat bazasyna birikmäni görkeziň we OK basyň . Bularyň hemmesi düzedilende, henizem bir zat galdy. Has ýokary derejä, hyzmata geçeliň. Synpda baharyň usulyny amalda ýerine ýetirilmelidigini görkezýän bellik bilen belleýäris (bu bolmasa, Gibernate işlemekden ýüz öwürer):Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy (3-nji bölüm) bilen tanyşlykFilmServiceImplallFilms@Transactional
@Transactional
public List<Film> allFilms() {
    return filmDAO.allFilms();
}
Şeýlelik bilen, bu ýerde hemme zat taýyn, kontrolda hiç zada degmek hökman däl. Dogrusy, hakykat pursady gelen ýaly, Işlet düwmesine basyň we nämeleriň bolýandygyny görüň. Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy (3-nji bölüm) - 4Ine, bu biziň alamatymyz we bu gezek synpda özümiziň düzen sanawymyzdan däl-de, maglumat bazasyndan alyndy. Gowy, hemme zat işleýän ýaly. Indi beýleki CRUD amallarynyň hemmesini sessiýa usullaryny ulanyp edýäris. Alnan synp şuňa meňzeýär:
package testgroup.filmography.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import testgroup.filmography.model.Film;

import java.util.List;

@Repository
public class FilmDAOImpl implements FilmDAO {
    private SessionFactory sessionFactory;

    @Autowired
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    @Override
    @SuppressWarnings("unchecked")
    public List<Film> allFilms() {
        Session session = sessionFactory.getCurrentSession();
        return session.createQuery("from Film").list();
    }

    @Override
    public void add(Film film) {
        Session session = sessionFactory.getCurrentSession();
        session.persist(film);
    }

    @Override
    public void delete(Film film) {
        Session session = sessionFactory.getCurrentSession();
        session.delete(film);
    }

    @Override
    public void edit(Film film) {
        Session session = sessionFactory.getCurrentSession();
        session.update(film);
    }

    @Override
    public Film getById(int id) {
        Session session = sessionFactory.getCurrentSession();
        return session.get(Film.class, id);
    }
}
Indi galan zat, gulluga gitmegi we usullara düşündiriş goşmagy ýatdan çykarmaly däl @Transactional. Ine, taýýar. Indi ylgap, barlap bilersiňiz. Salgylara we düwmelere basyň, ýazgylary goşmaga / pozmaga / redaktirlemäge synanyşyň. Hemme zat dogry ýerine ýetirilen bolsa işlemeli. Indi bu “Gibernate”, “Bahar”, “MySQL” -ni ulanyp, doly hukukly CRUD programmasy. Dowam etmek üçin ... Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy (1-nji bölüm) Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy bilen tanyşdyrmak (2-nji bölüm) Maven, Bahar, MySQL, Gibernate we the ilkinji CRUD programmasy (3-nji bölüm) Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy (4-nji bölüm)
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION