Spring MVC + Hibernate Menggunakan Maven : Operasi CRUD

Spring Hibenrate Maven CRUD

Mari kita buat sebuah aplikasi jadi yang simpel menggunakan Spring MVC sebagai teknologi web dan Hibernate sebagai teknologi ORM. Dalam pembuatan aplikasi ini kita akan menggunakan Maven untuk mengurus proses build dan manajemen dependensi library serta MySql sebagai basisdatanya.

Goal

Goal kita pada tutorial ini adalah membuat sebuah aplikasi simpel berupa song manager yang bisa melakukan operasi-operasi dasar pada basisdata yaitu
1. Menambahkan data lagu
2. Menghapus data lagu
3. Mengedit data lagu
4. Menampilkan data lagu

Berikut adalah hasil akhirnya

final app

Arsitektur

Untuk arsitektur pada aplikasi ini kita menggunakan arsitektur 3-tier dimana aplikasi dibagi menjadi 3 tier atau 3 layer. Layer-layer tersebut adalah
1. Layer DAO : layer ini digunakan untuk berinteraksi dengan basisdata. Layer ini menggunakan API dari Hibernate dalam proses berinteraksi dengan basisdata.
2. Layer Service : layer yang bertindak sebagai logika bisnis pada aplikasi. Layer ini memanggil layer Dao untuk bekerja.
3. Layer Web / User Interface : merupakan layer yang berinteraksi dengan pengguna. Dibagi lagi menjadi 3 bagian yang merupakan penerapan pola MVC yaitu Model, View dan Controller.

Persiapan

Buatlah sebuah project Maven pada IDE favorit masing-masing. Kalau belum tahu caranya silahkan googling πŸ˜€

Kita membutuhkan sebuah tabel dengan nama lagu. Berikut adalah kode untuk membuatnya

Kelas Entity

Tadi kita sudah membuat sebuah tabel dengan nama lagu. Sekarang kita akan membuat sebuah kelas dengan nama Lagu yang merupakan representasi tabel tadi dalam bentuk kelas Java. Kelas ini yang akan kita gunakan untuk melakukan operasi basisdata.

Perhatikan bahwa @Table(name = “LAGU”) adalah merujuk ke tabel kita yang bernama lagu. Dengan adanya annotation ini Hibernate akan mengetahui tabel mana yang harus dimapping kedalam kelas Lagu. Sedangkan @GeneratedValue(strategy = GenerationType.AUTO) digunakan layaknya auto increment pada basis data.

Konfigurasi

Konfigurasi untuk library apa saja yang kita butuhkan ditulis pada file pom.xml milik Maven yang dapat dilihat dibawah ini

Sedangkan untuk konfigurasi pada Spring MVC dan Hibernate adalah sebagai berikut

Kita juga membutuhkan sebuah file properties untuk konfigurasi pada Hibernate dan DataSource

Layer Dao

Untuk Layer Dao pertama kita akan membuat sebuah interface dengan nama LaguDao kemudian sebuah kelas yang merupakan implementasi dari interface LaguDao dengan nama LaguDaoImpl.

Annotation @Repository menandai bahwa kelas tersebut merupakan sebuah DAO. @Autowired digunakan untuk melakukan dependency injection terhadap objek sessionFactory dari Hibernate.

Layer Service

Sama seperti layer DAO. Kita juga membuat sebuah interface dan kemudian sebuah kelas yang merupakan implementasinya.

@Service digunakan untuk menandai bahwa kelas tersebut adalah sebuah logika bisnis dari aplikasi. @Transactional digunakan untuk keperluan transaki pada basisdata yaitu diantaranya membuka dan menutup session pada Hibernate. Jadi kita tidak perlu membuka dan menutup session Hibernate secara manual, semuanya sudah ditangani oleh Spring.

Pada kelas LaguServiceImpl terlihat bahwa kelas ini dalam melakukan operasinya menggunakan layer DAO.

Spring Controller dan JSP

Sekarang kita masuk ke layer web. Kita buat sebuah controller untuk mengatur request dan response serta beberapa JSP untuk menampilkan halaman web.
Berikut adalah kode untuk controller kita

JSP untuk menampilkan daftar lagu dapat dilihat dibawah ini

Dan berikut berturut-turut adalah JSP untuk form tambah dan form edit

Screenshot

tambah

edit

Download

Source Code aplikasi pada tutorial ini dapat didownload pada Github

Semoga bermanfaat πŸ™‚
aamiin

Facebook Comments
 

Agung Setiawan

Agung Setiawan adalah software engineer di BukaLapak.com, penulis sekaligus pecinta sastra, dan pembaca buku

 
Halo, perkenalkan saya Agung Setiawan.
Saya Software Engineer di BukaLapak.
Simak pemikian saya soal dunia Software Engineering via Twitter di @agungsetiawanmu dan facebook
Blog ini saya update seminggu sekali jadi sering-sering saja mampir
Mau belajar Vim bareng saya?
Belajar ngoding dari nol menggunakan PHP

24 thoughts on “Spring MVC + Hibernate Menggunakan Maven : Operasi CRUD

  1. mas mau tanya q dah ngikutin semua tapi pas di jalankan kok error ghini ya

    Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project crud: Fatal error compiling: invalid target release: 1.7 -> [Help 1]

    To see the full stack trace of the errors, re-run Maven with the -e switch.
    Re-run Maven using the -X switch to enable full debug logging.

    For more information about the errors and possible solutions, please read the following articles:
    [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

  2. pak nanya, naruh file konfigurasi nya itu dimana ya, klo saya pernah bikin yang XML, itu ditaruh di dalam folder web-inf, kalau bentuk anotasi gitu ditaruh nya dimana ya??

  3. pak mau nanya nih, saya udah ngikutin langkah langkahnya dari awal, sampe saya deploy ke tomcat.

    tapi knp file jsp buat edit, delete, update gak ditemukan ya???
    “The requested resource is not available.”
    biasanya ada salah dimana ya pak?

      1. pak saya udah coba bikin ulang tanpa maven, tapi secara struktur file’nya udah sesuai dengan di tutorial. pada saat deploy ada error spt ini pak.

        SEVERE: Exception sending context destroyed event to listener instance of class org.springframework.web.context.ContextLoaderListener

        java.lang.IllegalStateException: BeanFactory not initialized or already closed – call ‘refresh’ before accessing beans via the ApplicationContext

        knp ya pak?

      2. Pak, kok saya run hasilnya The requested resource (/SpringHibernateMaven/) is not available. Saya ambil source code dr github kemudian saya compile dan run hasilnya kaya gitu Pak. Ada salah dimana ya pak?

  4. pak misal contoh diatas kan kelas service return ke dao. (disini kok saya bingung banget ya).
    diatas juga cuma di deklarasiin ‘LaguService laguService;’
    abis itu return ke dao disini. apa iya itu bisa ngereturn pak?

    saya nyoba buat aplikasi sederhana, tapi kena javalang null pointer.

    apakah itu kelebihan kl pake spring?

    1. Kebalik gan, value dari Dao di-return ke Service, trus value dari Service di-return ke Controller. Bingung dimananya gan?

      Iya bisa walaupun cuma dengan

      bukan dengan instantiasi seperti ini

      Kamu nyoba seperti itu di program java “biasa” pasti null pointer karena tidak diinstantiasikan.

      “apakah itu kelebihan kl pake spring?”
      Yes, itu kelebihan pakai Spring, istilah kerennya dinamai Dependency Injection.
      Sebenarnya tetap ada proses instantiasi objek tetapi tidak langsung di situ, proses terjadi di spring Bean Container.

      Tentang dasar Dependency Injection pernah saya tulis disini
      Java : Memahami Dependency Injection

  5. 1. misal arus flownya om misal save data, dari view terus kmn? cz dari contoh yg di serviceimpl dia return ke dao.

    2. ya om saya aga paham. jadi kan misal interface ini nih > LaguService laguService;

    kalo diatas ga dinisialisasikan kan java null pointer, tapi spring nya buat otomatis, misal: ‘LaguService laguService = new LaguServiceImpl();’ kaya begitu bukan om? kan interface ga bisa di inisialisasikan ke interface.

    thx om.

    1. 1. Dari view ke Controller->Service->Dao->Database
      2. Iya bener, harus pakai kelas yang implement Service interface tersebut yang diinisialiasikan.

  6. 1. Thx udah jelas jadinya om. daritadi ane lagi belajar ga kelar2 πŸ˜€
    2. Ya om berarti kl pake spring codingnya jadi ada yg di umpetin ya kurang lebih, tapi objeknya udah di maintain sama si spring.

    Sekali lagi terima kasih banyak atas penjelasannya. Sangat membantu buat yang lagi belajar.

  7. public class Initializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext sc) throws ServletException {
    AnnotationConfigWebApplicationContext ctx=new AnnotationConfigWebApplicationContext();
    ctx.register(WebAppConfig.class);
    ctx.setServletContext(sc);

    Dynamic servlet=sc.addServlet(“dispatcher”, new DispatcherServlet(ctx));
    servlet.addMapping(“/”);
    servlet.setLoadOnStartup(1);
    }

    }

    class ini ga di bahas di tutorialnya ? fungsi class ini apa yah bs bantu jelasin ga kk

  8. kang, HTTP Status 500 – Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.SQLGrammarException: Could not open connection

    error gitu kang, oiya untuk setting db nya dimana ya?
    saya sudah download di github akang, dan bingung untuk setting jdbcnya

  9. misi bang mau tanya, file yg saya download udh bisa running.
    terus saya coba tutorial diatas, tapi kok masih banyak file yang kurang ya, kalo saya bandingin sama yang di github knp ya ?
    mungkin bisa di kasih tau settingan maven nya seperti apa ?

  10. saya ingin tanya gimana caranya biar halaman yg pertama kali di tampilkan di folder jsp/index.jsp?
    soalnya saya coba buat dari awal yg otomatis ada file index.jsp

    trims

  11. Pak, saya mau nanya
    kalo sdh download projek ini di github
    cara utk menjalankannya di eclipse itu gmn pak? soalnya buat belajar pak

Leave a Reply

Your email address will not be published. Required fields are marked *