Membuat CRUD Menggunakan Spring Hibernate - II [ Insert ]

 

Pada artikel ini merupakan lanjutan dari artikel : Membuat CRUD Menggunakan Spring Hibernate - I [ Read ]


Berikut adalah cara membuat CRUD menggunakan Spring Hibernate :

1. Tambahkan Method Save pada class BukuDAO.java

public void SaveBuku(Buku buku);


2. Tambahkan method save() pada BukuDAOImpl.java

@Override

public void SaveBuku(Buku buku) {

 hibernateTemplate.save(buku);

}


3. Buat sebuah Controller,  gunakan template dari spring framework.  Klik kanan package “Controller” --> “New” --> “Other” -->”Spring Framework” -->”Simple Form Controller” lalu klik Next 


4. Isikan “Class Name” kemudian pilih package “Controller” lalu klik Finish


5. Edit file SaveController.java

package Controller;

import Dao.BukuDAO;

import Model.Buku;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.ui.ModelMap;

import org.springframework.validation.BindException;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.SimpleFormController;

 

public class SaveController extends SimpleFormController {

 private BukuDAO bukuDAO;

 

 public void setBukuDAO(BukuDAO bukuDAO){

  this.bukuDAO = bukuDAO;

 }

 

 public SaveController() {

  //Initialize controller properties here or

  //in the Web Application Context

 

  setCommandClass(Buku.class);

  setCommandName("save");

  //setSuccessView("read");

  //setFormView("save");

 }

 

 /*@Override

 protected void doSubmitAction(Object command) throws Exception {

 throw new UnsupportedOperationException("Not yet implemented");

 }*/

 //Use onSubmit instead of doSubmitAction

 //when you need access to the Request, Response, or BindException objects

 @Override protected ModelAndView onSubmit( HttpServletRequest request,

 HttpServletResponse response, Object command, BindException errors)throws Exception {

  Buku buku = (Buku) command;

  bukuDAO.SaveBuku(buku);

  ModelMap map = new ModelMap();

  map.addAttribute("allbuku", bukuDAO.getBuku());

  return new ModelAndView("read", map);

 }

}


6. Kemudian buat file .jsp, klik kanan forlder jsp  (/Web Pages/WEB-INF/jsp) “New”-->”JSP” ubah bagian “file name” dengan “Save” lalu klik Finish.  

Isikan file Save.jsp 

<pre>

<%--

 Document : save

 Created on : 03 Des 12, 19:49:32

 Author : FAHMI

--%>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

 <head>

 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

 <title>JSP Page</title>

 </head>

 <body>

 <form:form method="POST" commandName="save">

 <table>

 <tr>

 <td>ID</td>

 <td>:</td>

 <td><input type="text" name="id" value="">

 </td>

 </tr>

 <tr>

 <td>Nama</td>

 <td>:</td>

 <td><input type="text" name="nama" value=""></td>

 </tr>

 <tr>

 <td>Harga</td>

 <td>:</td>

 <td><input type="text" name="harga" value=""></td>

 </tr>

 <tr>

 <td colspan="3"><input type="submit" name="simpan" value="Simpan"></td>

 </tr>

 </table>

 </form:form>

 </body>

</html>

</pre>


7. Tambahkan pada file dispatcher-servlet.xml 

<pre>

<bean name="/save.htm" class="Controller.SaveController">

 <property name="bukuDAO" ref="BukuDAO"/>

 <property name="formView" value="save"/>

 <property name="successView" value="read"/>

 </bean>

</pre>


8. Jalankan klik kanan project pilih “Clean” kemudian “run” lalu ubah url menjadi http://localhost:8084/SpringHibernateCrud/save.htm 



Membuat CRUD Menggunakan Spring Hibernate - I [ Read ]

 

Berikut adalah cara membuat CRUD menggunakan Spring Hibernate :

1. Buat database dan table

1.1. Buat database 

Create Database springcrud;

1.2. Buat table

Create Table buku(

 id int NOT NULL AUTO_INCREMENT PRIMARY KEY,

 nama varchar(100),

 harga varchar(10)

);

1.3. Isi data table

Insert Into `buku`( `nama`, `harga`) VALUES ('ANAK SINGKONG','50000');


2.  Buka Netbeans , lalu klik New Project


3.  Pilih “Java Web” --> “Web Application” lalu klik Next


4. Beri nama “Project Name” lalu klik Next


5. Centang “Enable Contexts and Dependecy Injection” lalu klik Next


6. Centang “Spring Web MVC” dan “Hibernate 3. 2. 5” kemudia perhatikan bagian “Database Connection”, Jika masih belum terhubung maka klik Combobox tersebut dan pilih “New Database Connection”


7. Pilih driver MYSQL(Connector/J Driver) lalu klik Next


8. Isi field “Database” dengan nama database yang telah dibuat, lalu klik “Test Connection” jika “Connection Succeeded” artinya database sudah terhubung, kemudian  klik Finish


9. Klik Finish


10. Setelah itu klik kanan “Source Package” --> “New” --> “Hibernate Reverse Enginneering Wizard..” (Bisa juga “Source Package” --> “New” -->”Other”-->”Hibernate”-->”Hibernate Reverse Enginneering Wizard..”)


11. Beri nama file .reveng lalu klik Next


12. Pilih table yang hendak dihubungkan dengan project, lalu klik Add, setelah itu klik Finish

13. Kemudian membuat pojo, klik kanan “Source Package” --> “New” --> “Hibernate Mapping Files and POJOs from Database..” (bisa juga “Source Package” --> “New” -->”Other”-->”Hibernate”-->”Hibernate Mapping Files and POJOs from Database..”)


14. Centang “EJB 3 Annotations” --> isi “Package” dengan “Model” lalu klik Finish


15. Kemudian buat java interface class untuk dao : BukuDAO ( package Dao )

package Dao;

import Model.Buku;

import java.util.List;

public interface BukuDAO {

    public List<Buku>getBuku();

}


16. Buat java class yang mengimplementasikan BukuDAO di package yang sama

package Dao;

import Model.Buku;

import java.util.List;

import org.hibernate.SessionFactory;

import org.springframework.orm.hibernate3.HibernateTemplate;


public class BukuDAOImpl implements BukuDAO{

 private HibernateTemplate hibernateTemplate;

 public void setSessionFactory(SessionFactory sessionFactory){

 hibernateTemplate = new HibernateTemplate(sessionFactory);

 }

 @Override

 public List<Buku> getBuku() {

 return hibernateTemplate.find("from Buku");

 }

}


17. Buat java class di package Controller : ReadController.java

package Controller;

import Dao.BukuDAO;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.ui.ModelMap;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;

 

public class ReadController implements Controller{

 private BukuDAO bukuDAO;

 

 public void setBukuDAO(BukuDAO bukuDAO){

 this.bukuDAO = bukuDAO;

 }

 @Override

public ModelAndView handleRequest(HttpServletRequest hsr, HttpServletResponse hsr1) throws Exception {

 ModelMap map = new ModelMap();

 map.addAttribute("allbuku", bukuDAO.getBuku());

 return new ModelAndView("readPage", map);

 }

}


18. Buat file .jsp : “readPage.jsp”

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

 <head>

 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

 <title><fmt:message key="title"/></title>

 </head>

 <body>

 <h1>List Produk </h1>

 <table border="1">

 <tr>

 <th>ID</th>

 <th>NAMA</th>

 <th>harga</th>

 <!--th>Action</th-->

 </tr>

 <c:forEach items="${allbuku}" var="buku">

 <tr>

 <td><c:out value="${buku.id}"/></td>

 <td><c:out value="${buku.nama}"/></td>

 <td><c:out value="${buku.harga}"/></td>

 <!--td><a href="update.htm?id=$!{buku.id}">Update</a></td-->

 </tr>

 </c:forEach>

 </table>

 </body>

</html>


19. Tambahkan source code pada file “Dispatcher-servlet.xml

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

 <property name="driverClassName" value="com.mysql.jdbc.Driver"/>

 <property name="url" value="jdbc:mysql://localhost:3306/SpringCrud"/>

 <property name="username" value="root"/>

 <property name="password" value=""/>

 </bean>

 

 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

 <property name="dataSource" ref="dataSource" />

 <property name="mappingResources">

 <list>

 <value>Model/Buku.hbm.xml</value>

 </list>

 </property>

 <property name="hibernateProperties">

 <props>

 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

 <prop key="hibernate.show_sql">false</prop>

 </props>

 </property>

 </bean>

 

 <bean id="BukuDAO" class="Dao.BukuDAOImpl">

 <property name="sessionFactory" ref="sessionFactory"/>

 </bean>

 

 <bean name="/read.htm" class="Controller.ReadController">

 <property name="BukuDAO" ref="BukuDAO"/>

 </bean>


20. Kemudian klik kanan project -> “Clean” -->”Deploy” --> “Run” ganti url dengan “http://localhost:8084/SpringHibernate/read.htm&#8221



Mengatasi Java Memory Leak Apache POI

 


Library POI adalah library yang disediakan oleh apache foundation,  yang dipergunakan untuk membaca dan menulis file format excel.

Berikut adalah cara mengatasi Java memory leak Apache POI :

1. Tambahkan dependency maven pada pom.xml project

<dependency>

        <groupId>org.apache.poi</groupId>

        <artifactId>poi-ooxml</artifactId>

        <version>3.17</version>

</dependency>


2. Tambahkan pada file app.java


Pada source diatas untuk menulis kedalam file excel, dan hanya mampu menulis 200rb data, lebih dari itu memory java akan leak.

3. Untuk mengatasi atau solusi dari sisi code agar memory java tidak leak adalah dengan cara merubah code menjadi :



Keterangan :

Mengubah code Workbook workbook = new XSSFWorkbook(); menjadi SXSSFWorkbook workbook = new SXSSFWorkbook(1000);.

Pada code pertama semua proses di memory, namun pada code ke dua, hanya 1000 baris yang dilakukan di memory, selebihnya akan dijalankan pada disk. Dengan cara ini maka akan mengurangi resiko memory leak pada java, dan mengurangi trial error untuk menaikan kapasitas JVM pada server.


Setup Framework Spring pada Netbeans

 

Berikut adalah cara setup framework Spring pada Netbeans :

1. Buka netbeans. kemudian buatlah project java dengan meng-create java project di netbeans


2. Pilihlah category java application.


3. Berilah nama : cobaApplication.


4. Struktur project


5.Kemudian pilih menu project properties.


6. Setelah itu pilih tab library.


7. Kemudian pilih springframework 3.1.1 RELEASE atau yang lebih tinggi versi.




8. Maka akan tampil pada project.


9. Buat file xml konfigurasi untuk spring. file ini digunakan untuk meload bean komponen dimana nanti  akan membuat bean komponen sendiri.


10. Beri nama file xml : MySpring.xml .


11. lalu klik next 



12. Isi file MySpring.xml tersebut.



13. Buat bean class. class inilah yang akan diload sesuai dengan konfigurasi yang ada di MySpring.xml.  


14. Ketika class bean selesai dibuat, kembali ke main class CobaApplication.java. file tersebut akan ter-create otomatis ketika membuat project pertama kali. pada class tersebut jangan  lalu import package spring berikut.


15. Pada class CobaApplication.java, mengeksekusi bean yang telah dibuat tadi dengan menggunakan framework spring. .

16. Setelah itu jalankan program



Belajar Membuat Web Menggunakan Spring Boot

 


Berikut adalah tahapan membuat web menggunakan Spring boot

1. Konfigurasi Spring Boot

Isikan file pom.xml :

<dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-thymeleaf</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

        </dependency>

    </dependencies>


2. Buat File HTML

Kemudian buat file html sebagai view : index.html. File tersebut dibuat di dalam folder resources/templates. 

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Selamat Datang Spring Boot</title>

</head>

<body>

<h2>Belajar Membuat Web Menggunakan Spring Boot</h2>

</body>

</html>

Untuk menjalankan buka browser : http://localhost:8081/  pada port 8081 disesuaikan pada file application.properties pada folder resources. jika membuat web dinamis, silahkan tambahkan depedensi berikut

<dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-data-jpa</artifactId>

        </dependency>

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <scope>runtime</scope>

        </dependency>

        <dependency>

            <groupId>org.projectlombok</groupId>

            <artifactId>lombok</artifactId>

</dependency>


3. Menambahkan Entitas

@Entity

@Data

public class Mahasiswa {

    @Id

    @GeneratedValue(generator = "uuid2")

    @GenericGenerator(name = "uuid2", strategy = "uuid2")

    private String id;

    @NotNull

    @NotBlank

    @Column(unique = true)

    private String nim;

    @NotNull

    @NotBlank

    private String nama;

    private float ipk;

    @NotNull

    @NotBlank

    private String jurusan;

}


Keterangan : 

  • @Entity : mendeklarasikan bahwa class Mahasiswa adalah berupa entitas yang akan di-mapping ke dalam sebuah tabel dalam database.
  • @Data : menandai class Mahasiswa akan diberikan method getter dan setter
  • @Id, @GeneratedValue(generator = "uuid2"), @GenericGenerator(name = "uuid2", strategy = "uuid2") digunakan untuk field id digunakan sebagai primary di database dengan nilai diisi menggunakan UUID.
  • @Column(unique = true), maksudnya adalah agar field nim dibuat unik pada database
  • @NotNull dan @NotBlank, field yang mendapatkan anotasi itu tidak boleh kosong ataupun NULL.


4. Migrasi Database

Membuat entitas, bisa langsung dibuatkan struktur tabel,  tetapi kali ini akan membuat struktur tabel dengan file sql, Spring Boot dapat melakukan database migrasi menggunakan depedency Flyway. TTambahkan depedency tersebut pada file pom.xml seperti berikut ini

<dependency>

    <groupId>org.flywaydb</groupId>

    <artifactId>flyway-core</artifactId>

</dependency>

Pada file application.properties juga perlu ditambahkan lokasi file sql yang akan dieksekusi, konfigurasi seperti dibawah :

spring.flyway.locations=classpath:db/migration

Keterangan :

file sql terdapat di dalam folder resources/db/migration, tetapi disini bisa mengganti lokasi file sql tersebut dengan mengubah nilai pada spring.flyway.locations=[lokasi file sql]. Jangan lupa menambahkan file sql tersebut pada direktori tersebu.

Format : mengikuti flyway yaitu V<VERSION>__<NAME>.sql. 

Contoh V1.0__init_tables.sql. Kemudian dijalankan maka akan membuatkan schema sesuai dengan file sql dan akan terbentuk tabel flyway_schema_history dalam database.


5. Membuat Controller

Controller dalam aplikasi web merupakan pintu masuk dari request client, tugasnya adalah meneruskan ke model atau mengembalikan request ke client. 

@Controller

public class MahasiswaController {

    @Autowired

    private MahasiswaDao mahasiswaDao;


    @GetMapping("/index")

    public ModelMap getAll(Pageable pageable) {

        return new ModelMap().addAttribute("mahasiswas", mahasiswaDao.findAll(pageable));

    }


    @GetMapping("/")

    public String index() {

        return "redirect:/index";

    }

}


Keterangan :  

  • @Controller, menandai bahwa class MahasiswaController adalah sebuah controller yang akan dilakukan scan oleh Spring
  • @Autowired, untuk meng-inisiasi objek mahasiswaDao.
  • @GetMapping("/index"), method di bawahnya berarti menggunakan http request GET. Sedangkan parameter objek pageable agar support paging.
  • redirect:/index, berarti ketika memanggil pada path "/" maka akan diteruskan ke path "/index" pada browser.


6. Buat Template Thymeleaf

Template Thymeleaf merupakan salah satu template engine yang tersedia pada Spring Boot, karena ketika menggunakan jsp dianggap kurang menarik sehingga menggunakan template engine. File index.html perlu disesuaikan seperti dibawah

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">

<head>

    <meta charset="UTF-8">

    <title>Spring Boot</title>

</head>

<body>

<h2>Web Template Engine Thymeleaf Menggunakan Spring Boot</h2>

<h2>List Mahasiswa</h2>


<table>

    <tr>

        <th>Nim</th>

        <th>Nama</th>

        <th>IPK</th>

        <th>Jurusan</th>

        <th>Action</th>

    </tr>

    <tr th:each="mhs : ${mahasiswas}">

        <td th:text="${mhs.nim}"> </td>

        <td th:text="${mhs.nama}"> </td>

        <td th:text="${mhs.ipk}"> </td>

        <td th:text="${mhs.jurusan}"> </td>

        <td>

            <a href="#">Edit</a> | 

            <a href="#">Hapus</a> | 

            <a href="#">Detail</a>

        </td>

    </tr>

</table>

</body>

</html>


Jalan browser http://localhost:8081 



7. Implementasi Paging

Pada controller yang telah dibuat support untuk paging, kebetulan sudah ada yang membuat untuk kebutuhan tersebut. dan bisa didownload pada link download.  Kemudian tambahkan depedency pada file pom.xml

<dependency>

            <groupId>io.github.jpenren</groupId>

            <artifactId>thymeleaf-spring-data-dialect</artifactId>

            <version>3.4.0</version>

</dependency>

Selain itu,  dibutuh juga untuk mendefiniskan sebuah @Bean untuk melakukan konfigurasi. Tambahkan kode berikut ini pada class yang memiliki anotasi @SpringBootApplication, contoh class DemoThymeleafApplication.

@Bean

    public SpringDataDialect springDataDialect() {

        return new SpringDataDialect();

    }

Lalu tambahkan css bootstrap dan script untuk menampilkan icon paging pada file yang akan diberikan paging, tambahkan menggunakan BootStrapCDN dan script tersebut seperti berikut ini

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

<div class="row">

    <div class="col-sm-6">

    <div sd:pagination-summary="">info</div>

    </div>

    <div class="col-sm-6">

    <nav class="pull-right">

<ul class="pagination" sd:pagination-split="7" sd:pagination="full">

<!-- Pagination created by SpringDataDialect, this content is just for mockup -->

<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">«</span></a></li>

    <li class="active"><a href="#">1 <span class="sr-only">(current)</span></a></li>

</ul>

</nav>

    </div>

</div>

Jjalankan aplikasi yang telah ditambahkan paging pada browser.


Tes untuk menerapkan paging dengan mengetik alamat ini pada browser http://localhost:8081/index?size=1. Pagingnya seharusnya akan berubah


Games Arcade

 

Berikut adalah Games Arcade :

1. Subway Surfers : Link Download


2. Temple Run : Link Download


3. Fruit Ninja® : Link Download


4. Subway Princess Runner : Link Download


5. Join Clash 3D : Link Download


6. Tank Stars : Link Download


7. Sonic Dash - Endless Running : Link Download



8. Stack Ball - Crash Platforms : Link Download


9. Zombie Tsunami : Link Download


10. Color Bump 3D : Link Download


11. Hungry Shark Evolution : Link Download


12. Glow Hockey : Link Download


13. Angry Birds Seasons : Link Download


14. Angry Birds Classic : Link Download


15. Ant Smasher : Link Download


16. Jetpack Joyride : Link Download


17. Block Craft 3D:Building Game : Link Download


18. Paper.io 2 : Link Download


19. Minecraft Trial : Link Download


20. Payback 2 - The Battle Sandbox : Link Download