Assalamu'alaykum Warahmatullahi Wabarakatuh.
Spring merupakan sebuah framework (kerangka kerja) yang digunakan untuk membangun sebuah aplikasi Enterprise. Spring termasuk framework yang lightweight (ringan) untuk mendukung secara penuh dalam pengembangan aplikasi Enterprise siap pakai.
Spring dapat digunakan untuk melakukan pengaturan deklarasi manajemen transaksi, remote access dengan menggunakan RMI atau layanan web lainnya, fasilitas mailing, dan beragam opsi untuk pengaturan data ke database. Spring juga memungkinkan kita menggunakan hanya modul-modul tertentu sehingga kita tidak usah menggunakan semua modul spring dalam aplikasi apabila tidak diperlukan.
Fitur-fitur dari Spring Framework :
- Transaction Management : Spring framework menyediakan sebuah layer abstrak yang generik untuk manajemen transaksi, sehingga memudahkan para developer dalam melakukan manajemen transaksi.
- JDBC Exception Handling : layer abstrak JDBC menawarkan exception yang bersifat hierarki sehingga memudahkan penanganan error.
- Integration with Hibernate, JDO, and iBatis : Spring menawarkan layanan integrasi terbaik dengan Hibernate, JDO dan iBatas
- AOP Framework : Spring merupakan framework AOP Terbaik yang pernah ada.
- MVC Framework : Spring hadir dengan framework aplikasi web MVC, yang dibangun di atas inti Spring. Spring merupakan framework yang sangat fleksibel dalam pengaturan strategi interface, dan mengakomodasi beberapa teknologi view seperti JSP, Velocity, Tiles, iText, dan POI.
Arsitektur Spring :
- Spring AOP
Salah satu komponen utama Spring adalah AOP Framework, AOP framework digunakan untuk :
- Untuk menyediakan layanan Enterprise, terutama sebagai pengganti EJB. Layanan terpenting dalam layanan ini adalah untuk mendekralitf manajemen transaksi, yang telah disediakan dalam abstraksi spring transaction.
- Untuk memungkinkan pengguna dalam menerapkan AOP dalam penggunaan OOP.
- Spring ORM
Spring ORM berhubungan dengan akses database dan menyediakan lapisan layer terintegrasi dengan ORM yang populer termasuk JDO, Hibernate dan iBatis.
- Spring Web
Merupakan bagian dari modul pengembangan Web Spring termasuk Spring Web MVC.
- Spring DAO
DAO (Data Access Object) mendukung standarisasi akses data yang menggunakan teknologi seperti JDBC, Hibernate dan JDO.
- Spring Context
Paket ini didasari pada paket beans untuk menambah dukungan sumber pesan dan untuk pola desain Observer, dan kemampuan untuk mendapatkan sumber daya yang konsisten dengan menggunakan API.
- Spring Web MVC
Menyediakan implementasi MVC untuk aplikasi web.
- Spring Core
Paket Spring Core ini merupakan komponen paling penting dari Spring Framework.
Komponen ini menyediakan fitur Dependency Injection. BeanFactory memisahkan dependensi seperti inisialisasi, pembentukan dan akses object dari logika program anda.
Langsung saja, saya akan menjelaskan cara-cara membuat CRUD menggunakan Spring Java :
1. Tulislah di alamat URL anda "start.spring.io" untuk membuat project aplikasi. Karena project saya laboratorium maka saya menulis laboratorium di Artifact saya. Ketik Web, JPA dan MySQL di Search Dependencies. Pilih versi 1.4.7. -> klik Generate Project.
2. Di folder Downloads compress file laboratorium -> Cut -> Paste di folder mana saja.
3. Akfifkan Apache dan Mysql di Xampp Controlpanel.
4. Buka aplikasi NetBeans -> File -> New Project -> Java Application -> Next -> Beri nama project anda. Kalau project saya "laboratorium".
5. Jika belum ada file m2 silahkan download terlebih dahulu -> copy -> paste.
6. Di folder Source Package buatlah packgae-package seperti yang ada dibawah ini.
7. Pada package com.rafqa.laboratorium.entity buat kelas Karyawan dan Pelanggan.
Srcipt Karyawan.java
package com.rafqa.laboratorium.entity;
import javax.persistence.*;
import org.hibernate.annotations.CollectionId;
import org.hibernate.annotations.GenericGenerator;
/**
*
* @author rafqa
*/
@Entity
@Table (name = "tbl_Karyawan")
public class Karyawan {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid",strategy = "uuid2")
private String id;
@Column( nullable = false, length = 20)
private String nama;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
}
Script Pelanggan.java
package com.rafqa.laboratorium.entity;
import javax.persistence.*;
import org.hibernate.annotations.CollectionId;
import org.hibernate.annotations.GenericGenerator;
/**
*
* @author rafqa
*/
@Entity
@Table (name = "tbl_Pelanggan")
public class Pelanggan {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid",strategy = "uuid2")
private String id;
@Column(nullable = false, length = 20)
private String nama;
@Column (nullable = false, length = 20)
private String alamat;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getAlamat() {
return alamat;
}
public void setAlamat(String alamat) {
this.alamat = alamat;
}
}
8. Di package com.rafqa.laboratorium.dao -> klik kanan -> interfaces -> KaryawanDao dan buat juga langkah yang sama pada PelanggamDao.
KaryawanDao.java
package com.rafqa.laboratorium.dao;
import com.rafqa.laboratorium.entity.Karyawan;
import java.io.Serializable;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
*
* @author rafqa
*/
public interface KaryawanDao extends PagingAndSortingRepository<Karyawan, String>{
}
PelangganDao.java
package com.rafqa.laboratorium.dao;
import com.rafqa.laboratorium.entity.Pelanggan;
import java.io.Serializable;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
*
* @author rafqa
*/
public interface PelangganDao extends PagingAndSortingRepository<Pelanggan, String>{
}
9. Buat class PelangganHTMLController pada package com.rafqa.laboratorium.controller.
package com.rafqa.laboratorium.controller;
import java.sql.Date;
import java.text.SimpleDateFormat;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.rafqa.laboratorium.dao.PelangganDao;
import com.rafqa.laboratorium.entity.Pelanggan;
/**
*
* @author rafqa
*/
@Controller
@RequestMapping("/pelanggan")
public class PelangganHtmlController {
@Autowired
private PelangganDao pd;
@RequestMapping("/list")
public void daftarPelanggan(Model m) {
m.addAttribute("daftarPelanggan", pd.findAll());
}
@RequestMapping("/hapus")
public String hapus(@RequestParam("id") String id) {
pd.delete(id);
return "redirect:list";
}
@RequestMapping(value = "/form", method = RequestMethod.POST)
public String form(@Valid Pelanggan p,
BindingResult errors) {
if (errors.hasErrors()) {
return "/pelanggan/form";
}
pd.save(p);
return "redirect:list";
}
@RequestMapping(value = "/form", method = RequestMethod.GET)
public String form(@RequestParam(value = "id",
required = false) String id, Model m) {
m.addAttribute("pelanggan", new Pelanggan());
if (id != null && !id.isEmpty()) {
Pelanggan p = pd.findOne(id);
if (p != null) {
m.addAttribute("pelanggan", p);
}
}
return "/pelanggan/form";
}
}
10. Buat kelas LaboratoriumApplication pada package com.rafqa.laboratorium.
package com.rafqa.laboratorium;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class LaboratoriumApplication {
public static void main(String[] args) {
SpringApplication.run(LaboratoriumApplication.class, args);
}
}
11.
package com.rafqa.laboratorium;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration (classes = LaboratoriumApplication.class)
public class LaboratoriumApplicationTests {
@Test
public void contextLoads() {
}
}
12. Di folder Other Sources klik src/main/resources -> klik <default packages> di application properties buat database aplikasi laboratorium.
spring.datasource.url=jdbc:mysql://localhost/db_laboratorium
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.generate-ddl=true
13. Klik folder Project Files -> klik pom.xml -> ubah versi spring seperti gambar dibawah ini.
14. Buat database db_laboratorium -> compile aplikasinya -> run
15. Maka tabel-tabel dari database laboratorium akan terisi sendiri.
16. Ketikkan localhost:8080/pelanggan/list
17. Tambah Data Pelanggan maka akan muncul form isi data seperti gambar dibawah ini.
18. Di aksi klik hapus -> muncul kotak dialog "apakah anda yakin ingin menghapus data ini"?
20. Maka data akan terhapus.