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 bagean katelu saka 4. Artikel kasebut utamane kanggo wong-wong sing wis ngrampungake 30-40 tingkat ing kene, nanging durung ngupayakake ngluwihi Jawa murni lan lagi wae diwiwiti (utawa bakal diwiwiti) kanggo mlebu ing jagad terbuka kanthi kabeh teknologi iki, frameworks lan tembung ora pati ngerti. Iki minangka bagean katelu saka artikel "Introduction to Maven, Spring, MySQL, Hibernate and the first CRUD application." Bagean sadurunge bisa dideleng kanthi ngetutake tautan:
- Pambuka kanggo Maven, Spring, MySQL, Hibernate lan aplikasi CRUD pisanan (bagean 1)
- Pambuka kanggo Maven, Spring, MySQL, Hibernate lan aplikasi CRUD pisanan (bagean 2)
Isi:
- Nggawe lan nyambungake database
- ORM lan JPA
- Entitas
- Properti Hibernate
- Konfigurasi hibernate
- Lapisan akses data
Nggawe lan nyambungake database
Inggih, iku wektu kanggo miwiti nggarap database. Sadurunge nyambungake Hibernate lan mikir babagan cara kerjane kabeh, ayo goleki database dhewe, yaiku. Ayo nggawe, nyambung, nggawe lan isi tandha. Kita bakal nggunakake DBMS (Sistem Manajemen Database) MySQL (mesthi, sampeyan kudu ngundhuh lan nginstal dhisik). SQL (Structured Query Language) minangka basa pamrograman deklaratif sing digunakake kanggo nggawe, ngowahi, lan ngapusi data ing basis data relasional. Ing basis data kasebut, data disimpen ing wangun tabel. Kepiye carane aplikasi komunikasi karo database (ngirim pitakon SQL menyang database lan ngasilake asil). Kanggo iki, Jawa duwe perkara kaya JDBC (Java DataBase Connectivity) , sing, kanthi gampang, minangka set antarmuka lan kelas kanggo nggarap database. Kanggo sesambungan karo database, sampeyan kudu nggawe sambungan; kanggo iki, paketjava.sql
duwe kelas Connection
. Ana sawetara cara kanggo nggawe sambungan, contone, sampeyan bisa nggunakake metode getConnection
kelas DriverManager
. Nanging, interaksi karo database ora digawa metu langsung, amarga ana akeh database, lan padha beda. Dadi kanggo saben wong ana Driver JDBC dhewe. Nggunakake driver iki, sambungan menyang database digawe. Mula, luwih dhisik, supaya ora keganggu mengko, ayo nginstal driver MySQL . Ayo ditambahake pom.xml
dependensi ing ngisor iki:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
Saiki ayo nggawe database. View -> Tool Windows -> Database - panel database bakal mbukak. Anyar (ijo +) -> Sumber Data -> MySQL - jendhela bakal mbukak sing sampeyan kudu nemtokake jeneng pangguna lan sandhi, kita nyetel nalika nginstal MySQL (contone, aku nggunakake root lan root). Port (standar kanggo MySQL 3306), jeneng, lsp. ninggalake iku minangka. Sampeyan bisa nyoba sambungan nggunakake tombol " Tes Sambungan ". Klik OK lan saiki kita disambungake menyang server MySQL. Sabanjure, ayo nggawe database. Kanggo nindakake iki, sampeyan bisa nulis skrip ing console sing mbukak:
CREATE DATABASE test
Klik Execute lan database wis siyap, saiki sampeyan bisa nyambungake. Kanggo nindakake iki, bali menyang Data Source Properties lan ketik jeneng database (test) ing kolom Database, banjur ketik jeneng pangguna lan sandhi maneh banjur klik OK. Saiki kita kudu nggawe meja. Sampeyan bisa nggunakake alat grafis, nanging kanggo pisanan, sampeyan kudu nulis skrip kanthi tangan kanggo ndeleng kaya apa:
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);
Tabel digawe kanthi jeneng films
kanthi kolom id
, title
lsp. Kanggo saben kolom, jinis dituduhake (ukuran output maksimal ing kurung).
PRIMARY KEY
- iki minangka kunci utama, digunakake kanggo ngenali rekaman ing tabel kanthi unik (sing nuduhake keunikan)AUTO_INCREMENT
- Nilai bakal digawe kanthi otomatis (mesthi bakal ora nol, dadi sampeyan ora kudu nemtokake iki)NOT NULL
- kene kabeh uga ketok, iku ora bisa kosongDEFAULT
- nyetel nilai standarCOLLATE
- enkodingCREATE UNIQUE INDEX
- nggawe lapangan unikINSERT INTO
- nambah rekaman menyang meja
main
, sementara. Ing asas, sampeyan bisa sijine iku ngendi wae, malah ing kelas controller, malah ing model utawa konfigurasi, iku ora Matter, sampeyan mung kudu nggunakake kanggo mesthekake yen kabeh iku nggoleki karo sambungan lan sampeyan bisa mbusak. Nanging supaya luwih ati-ati, ayo nggawe kelas sing kapisah 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();
}
}
}
Kabeh iku prasaja ing kene, kita nyetel paramèter sambungan menyang database kita lan nyoba kanggo nggawe sambungan. Ayo diluncurake iki main
lan delengen. Dadi, aku entuk pangecualian, sawetara masalah zona wektu, lan sawetara bebaya liyane babagan SSL. Sawise browsing Internet, sampeyan bisa mangerteni sing iki masalah cukup umum, lan nalika nggunakake versi beda saka driver (mysql-konektor-Java), bisa sumpah beda. Contone, aku nemokake kanthi eksperimen yen nggunakake versi 5.1.47 ora ana pangecualian amarga zona wektu, sambungan kasebut digawe kanthi normal, nanging bebaya SSL isih muncul. Kanthi sawetara versi liyane, katon ana pangecualian babagan SSL, lan ora mung bebaya. Oke, dudu titik kasebut. Sampeyan bisa nyoba ngatasi masalah iki kanthi kapisah, nanging saiki ora bakal ditindakake. Solusi kanggo iki kabeh cukup prasaja, sampeyan kudu nemtokake paramèter tambahan ing url , yaiku serverTimezone
, yen masalah karo zona wektu, lan useSSL
yen masalah karo SSL:
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=Europe/Minsk&useSSL=false";
Saiki kita wis nyetel zona wektu lan mateni SSL. Kita miwiti maneh main
lan voila - Sambungan sukses! Inggih, apik, kita ngerti carane nggawe sambungan. Kelas Main
wis rampung tugas, sampeyan bisa mbusak.
ORM lan JPA
Kanthi cara sing apik, kanggo pangerten sing luwih apik, luwih becik miwiti kenal karo database kanthi urutan, saka wiwitan, tanpa hibernasi lan liya-liyane. Mulane, iku bakal dadi apike golek sawetara Panuntun lan pisanan nyoba kanggo nggarap kelas JDBC, nulis pitakon SQL kanthi manual lan ing. Inggih, ayo pindhah menyang model ORM langsung. Apa tegese iki? Mesthi wae, luwih becik maca babagan iki kanthi kapisah, nanging aku bakal nyoba njlèntrèhaké kanthi ringkes. ORM (Object-Relational Mapping utawa object-relational mapping) minangka teknologi kanggo pemetaan obyek menyang struktur basis data relasional, yaiku. kanggo makili obyek Jawa minangka baris tabel. Thanks kanggo ORM, sampeyan ora perlu kuwatir babagan nulis skrip SQL lan fokus nggarap obyek. Carane nggunakake. Jawa nduweni bab gedhe liyane, JPA (Java Persistence API), sing ngetrapake konsep ORM. JPA minangka spesifikasi kasebut; nggambarake syarat kanggo obyek, nemtokake macem-macem antarmuka lan anotasi kanggo nggarap database. JPA sejatine minangka deskripsi, standar. Mulane, ana akeh implementasine khusus, salah sijine (lan salah siji sing paling populer) yaiku Hibernate, sing dadi inti saka kerangka iki. Hibernate minangka implementasi saka spesifikasi JPA sing dirancang kanggo ngatasi masalah pemetaan obyek-relasional (ORM). Kita kudu nyambungake kabeh iki menyang proyek kita. Kajaba iku, supaya Spring kita ora ngadeg ing pinggir lan uga melu ing kabeh gerakan iki karo database, kita kudu nyambungake sawetara modul liyane, amarga kabeh sing kita entuk saka ketergantungan spring-webmvc ora cukup kanggo iki. Kita uga mbutuhake spring-jdbc kanggo nggarap database, spring-tx kanggo ndhukung transaksi, lan spring-orm kanggo nggarap Hibernate. Ayo nambah dependensi menyangpom.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>
Loro dependensi iki cukup. javax.persistence-api
bakal teka bebarengan karo hibernate-inti , lan spring-jdbc lan spring-tx bebarengan karo spring-orm .
Entitas
Dadi, kita pengin obyek kelasFilm
bisa disimpen ing database. Kanggo nindakake iki, kelas kudu nyukupi sawetara syarat. Ing JPA ana Entitas kanggo iki . Kelas entitas minangka kelas POJO biasa , kanthi lapangan pribadi lan getter lan setter kanggo dheweke. Iku kudu konstruktor non-pribadi tanpa paramèter (utawa konstruktor gawan), lan kudu tombol utami, i.e. soko sing unik bakal ngenali saben rekaman kelas iki ing database. Sampeyan uga bisa maca babagan kabeh syarat kanggo kelas kasebut kanthi kapisah. Ayo dadi Film
entitas kelas kita nggunakake anotasi JPA:
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
- nuduhake yen kelas iki minangka entitas.@Table
- nuduhake tabel tartamtu kanggo nampilake entitas iki.@Id
- nuduhake yen kolom iki minangka kunci utama, yaiku. sifat iki bakal digunakake kanggo ngenali saben entri unik.@Column
- nyambungake lapangan menyang kolom tabel. Yen kolom lan jeneng kolom tabel padha, sampeyan bisa ngilangi.@GeneratedValue
- properti bakal digawe kanthi otomatis; sampeyan bisa nemtokake cara ing kurung. Saiki kita ora bakal ngerti kepiye strategi sing beda-beda. Cukup ngerti yen ing kasus iki saben nilai anyar bakal nambah 1 saka sing sadurunge.
Properti Hibernate
Inggih, ayo miwiti nyetel Hibernate kita. Lan pisanan, ayo sijine sawetara informasi, kayata jeneng pangguna lan sandhi, url lan liya-liyane menyang file sing kapisah. Sampeyan bisa, mesthi, nemtokake minangka baris biasa langsung ing kelas, kaya nalika kita mriksa sambungan (String username = "root";
lan banjur liwati menyang cara kanggo nggawe sambungan). Nanging isih luwih bener kanggo nyimpen data statis kasebut ing sawetara property
file. Lan yen, umpamane, sampeyan kudu ngganti database, sampeyan ora kudu ngliwati kabeh kelas lan goleki ngendi digunakake, cukup kanggo ngganti nilai ing file iki sapisan. Ayo nggawe file db.properties ing direktori sumber daya :
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
Inggih, kabeh cetha saka ndhuwur, paramèter kanggo nyambung menyang database, i.e. jeneng kelas driver, url, jeneng pangguna lan sandhi. hibernate.dialect
- sifat iki perlu kanggo nunjukaké kanggo Hibernate versi tartamtu saka basa SQL digunakake. Kasunyatane yaiku ing saben DBMS, kanggo nggedhekake kemampuan, nambah sawetara fungsi utawa ngoptimalake apa wae, biasane rada modernisasi basa kasebut. Akibaté, saben DBMS duwe dialek SQL dhewe. Kaya ing basa Inggris, kayane basa kasebut padha, nanging ing Australia, AS utawa Inggris bakal rada beda, lan sawetara tembung bisa uga duwe makna sing beda. Lan supaya ora ana masalah karo pangerten, sampeyan kudu langsung ngandhani Hibernate apa sing kudu ditindakake. hibernate.show_sql
- thanks kanggo sifat iki, pitakon kanggo database bakal ditampilake ing console. Iki ora perlu, nanging karo bab iki, sampeyan bisa paling ora katon ing apa kedados, digunakake bisa koyone sing Hibernate nindakake sawetara jenis sihir. Ya, mesthi, ora bakal ditampilake kanthi jelas; luwih becik nggunakake sawetara jinis logger kanggo iki, nanging iki bakal ditindakake ing wektu liyane, saiki bakal ditindakake.
Konfigurasi hibernate
Ayo dadi pindhah menyang nyetel konfigurasi.config
Ayo nggawe kelas ing paket 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;
}
}
Ana cukup akeh barang anyar ing kene, mula luwih becik goleki informasi babagan saben item ing macem-macem sumber. Ayo dirembug sedhela ing kene.
- Kita
@Configuration
wis@ComponentScan
ngerti nalika nindakake kelasWebConfig
. @EnableTransactionManagement
- ngidini sampeyan nggunakakeTransactionManager
kanggo ngatur transaksi. Hibernate dianggo karo database nggunakake transaksi; padha dibutuhake kanggo pesawat tartamtu saka operasi kanggo nindakake minangka kabèh siji, i.e. yen metode kasebut duwe masalah karo operasi siji, mula kabeh liyane ora bakal ditindakake, supaya ora kedadeyan kaya ing conto klasik kanthi transfer dhuwit, nalika operasi penarikan dhuwit saka siji akun rampung, nanging operasi nulis kanggo liyane ora bisa, minangka asil dhuwit ilang.@PropertySource
- nyambungake file properti sing bubar digawe.Environment
- kanggo entuk properti sakaproperty
file.hibernateProperties
- cara iki dibutuhake kanggo makili sifat Hibernate minangka obyek PropertiesDataSource
- digunakake kanggo nggawe sambungan menyang database. Iki minangka alternatif kanggo DriverManager , sing digunakake sadurunge nalika nggawe filemain
. Dokumentasi ujar manawaDataSource
luwih becik digunakake. Sing bakal kita tindakake, mesthi, ora lali kanggo maca ing Internet apa prabédan lan kaluwihan. Siji keuntungan utamane yaiku kemampuan kanggo nggawe Kolam Sambungan Database (DBCP).sessionFactory
- kanggo nggawe sesi kanthi bantuan operasi karo obyek entitas sing ditindakake. Ing kene kita nyetel sumber data, sifat Hibernate lan ing paket sing kudu kita goleki kelas entitas.transactionManager
- kanggo ngatur manager transaksi.
DataSource
. Dokumentasi kasebut nyatakake yen nggunakake implementasi standar, yaiku DriverManagerDataSource
, ora dianjurake, amarga iku mung panggantos kanggo pooling sambungan normal lan umume mung cocok kanggo tes lan kuwi. Kanggo aplikasi normal, luwih becik nggunakake sawetara jinis perpustakaan DBCP. Inggih, kanggo aplikasi kita, mesthi, apa sing kita duwe cukup, nanging kanggo ngrampungake gambar, mbok menawa kita isih bakal nggunakake implementasine liyane kaya sing disaranake. Ayo ditambahake pom.xml
dependensi ing ngisor iki:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>9.0.10</version>
</dependency>
Lan ing metode dataSource
kelas HibernateConfig
kita ngganti DriverManagerDataSource
karo BasicDataSource
siji saka paket org.apache.tomcat.dbcp.dbcp2
:
BasicDataSource dataSource = new BasicDataSource();
Ya, kabeh katon wis siyap, konfigurasi wis siyap, sing isih ana yaiku nambahake menyang AppInitializer :
protected Class<?>[] getRootConfigClasses() {
return new Class[]{HibernateConfig.class};
}
Lapisan akses data
Iki wektu kanggo miwiti DAO kita. We menyang kelasFilmDAOImpl
lan pisanan kabeh kita mbusak dhaftar nyoba saka ing kono, kita ora perlu maneh. Ayo nambah pabrik sesi lan ngupayakake.
private SessionFactory sessionFactory;
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
Kanggo miwiti, kita bakal nggawe cara kanggo nampilake kaca kanthi dhaptar film, ing kono kita bakal nampa sesi lan njaluk panjaluk menyang database (narik kabeh cathetan lan nggawe dhaptar):
public List<Film> allFilms() {
Session session = sessionFactory.getCurrentSession();
return session.createQuery("from Film").list();
}
Ana 2 titik ing kene. Pisanan, bebaya ditampilake. Iki amarga kasunyatan sing kita pengin nampa parameterized List<Film>
, nanging cara bali mung List
amarga ing wektu kompilasi ora ngerti apa jinis panjalukan bakal bali. Dadi ide kasebut ngelingake yen kita nindakake konversi sing ora aman, sing bisa nyebabake masalah. Ana sawetara cara sing luwih bener kanggo nindakake iki supaya pitakonan kasebut ora muncul. Sampeyan bisa nggoleki informasi ing Internet. Nanging ayo saiki ora keganggu. Kasunyatane yaiku kita ngerti persis apa jinis sing bakal bali, mula ora ana masalah ing kene, sampeyan mung bisa nglirwakake bebaya kasebut. Nanging, supaya mripatmu ora ngrusak mripat, sampeyan bisa nyelehake anotasi ing ndhuwur metode kasebut @SupressWarning("unchecked")
. Kanthi mengkono, kita jenis marang compiler, matur nuwun, konco, kanggo badhan, nanging aku ngerti apa aku lan duwe kabeh ing kontrol, supaya sampeyan bisa ngendhokke lan ora padha sumelang ing bab cara iki. Kapindho, ide kasebut digarisi abang " from Film
". Iku mung pitakonan HQL (Hibernate Query Language) lan ide ora ngerti apa kabeh bener utawa ana kesalahan. Sampeyan bisa pindhah menyang setelan idea lan kanthi manual nyetel kabeh (katon ing Internet yen kasengsem). Utawa sampeyan mung bisa nambah dhukungan kanggo framework Hibernate, kanggo nindakake iki, klik-tengen ing project, pilih Tambah Dhukungan Framework , mriksa kothak kanggo Hibernate lan klik OK. Sawise iki, paling kamungkinan ing kelas entitas ( Film
) akeh bab uga bakal digarisi abang, contone, ngendi anotasi @Table(name = "films")
bakal nerbitake bebaya Ora bisa mutusake masalah tabel 'film' . Maneh, ora ana sing salah ing kene, iki dudu kesalahan desain, kabeh bakal dikompilasi lan bisa digunakake. Ide kasebut ditekanake amarga ora ngerti apa-apa babagan basis kita. Kanggo ndandani iki, ayo nggabungake ide kasebut karo database. View -> Tool Windows -> Persistense (tab bakal mbukak) -> tombol mouse tengen, pilih Assign Data Sources -> ing Data Source, nemtokake sambungan menyang database banjur klik OK . Nalika kabeh iki didandani, isih ana sing isih ana. Ayo menyang tingkat sing luwih dhuwur, menyang layanan. Ing kelas, FilmServiceImpl
kita menehi tandha allFilms
metode musim semi kanthi anotasi @Transactional
, sing bakal nuduhake manawa metode kasebut kudu ditindakake ing transaksi (tanpa iki, Hibernate ora bakal bisa digunakake):
@Transactional
public List<Film> allFilms() {
return filmDAO.allFilms();
}
Dadi, kabeh wis siyap ing kene, sampeyan ora perlu ndemek apa wae ing pengontrol. Inggih, katon kaya wayahe bebener wis teka, klik Run lan ndeleng apa sing kedadeyan. Lan ing kene, tandha kita, lan wektu iki dipikolehi ora saka dhaptar sing digawe dhewe ing kelas, nanging saka database. Apik, kabeh katon kerjane. Saiki kita nindakake kabeh operasi CRUD liyane kanthi cara sing padha nggunakake metode sesi. Kelas asil katon kaya iki:
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);
}
}
Saiki sing isih ana yaiku aja lali pindhah menyang layanan lan nambah anotasi kanggo metode kasebut @Transactional
. Wis, siap. Sampeyan saiki bisa mbukak lan mriksa. Klik link lan tombol, coba nambah / mbusak / ngowahi entri. Yen kabeh wis rampung kanthi bener, mesthine bisa. Saiki iki aplikasi CRUD lengkap nggunakake Hibernate, Spring, MySQL. Diterusake ... Ngenalake Maven, Spring, MySQL, Hibernate lan aplikasi CRUD pisanan (bagean 1) Ngenalake Maven, Spring, MySQL, Hibernate lan aplikasi CRUD pisanan (bagean 2) Ngenalake Maven, Spring, MySQL, Hibernate lan aplikasi CRUD pisanan (bagean 3) Pambuka kanggo Maven, Spring, MySQL, Hibernate lan aplikasi CRUD pisanan (bagean 4)
GO TO FULL VERSION