Spring Boot Thymeleaf Part 2
Spring Boot Thymeleaf Part 2
Perhatikan field spring.datasource.url silahkan diisi berdasarkan settingan database masingmasing. Pada contoh, port MySQL nya adalah 3306 dan database nya adalah pelatihan.
Pada field spring.datasource.username dan spring.datasource.password silahkan diisi sesuai
dengan settingan database masing-masing.
3. Membuat Package Entity
Package Entity berisi class-class yang akan digunakan untuk memanage (CRUD) data di database
yang sudah kita setting di application.properties. Setiap class di dalam package ini mewakili data
(table, column, join table dll) di database berdasarkan class dan class property yang sudah di anotasi.
Jika class tidak dianotasi, maka maka class tersebut tidak akan tersambung dengan database.
Buat package baru dengan cara klik kanan folder src/main/java di Package Explorer
Nama package bebas, namun usahakan nama package memiliki nama akhir entity untuk
memudahkan kita nantinya, Karena di dalam package ini khusus berisi class yang memiliki entity
di database. Contoh nama: com.dac.aplikasi.pelatihan.entity
java.util.Date;
javax.persistence.Column;
javax.persistence.Entity;
javax.persistence.Id;
javax.persistence.Temporal;
javax.persistence.TemporalType;
java.sql.Connection;
java.sql.ResultSet;
java.sql.SQLException;
java.util.Date;
import javax.sql.DataSource;
import
import
import
import
import
import
org.junit.Assert;
org.junit.Test;
org.junit.runner.RunWith;
org.springframework.beans.factory.annotation.Autowired;
org.springframework.boot.test.context.SpringBootTest;
org.springframework.test.context.junit4.SpringRunner;
import com.dac.aplikasi.pelatihan.entity.Peserta;
Jika tidak ada error maka tampilan sidebar Junit akan menjadi sebagai berikut:
java.util.ArrayList;
java.util.List;
javax.persistence.CascadeType;
javax.persistence.Column;
javax.persistence.Entity;
javax.persistence.GeneratedValue;
javax.persistence.Id;
javax.persistence.OneToMany;
org.hibernate.annotations.GenericGenerator;
java.util.ArrayList;
java.util.Date;
java.util.List;
javax.persistence.Entity;
javax.persistence.GeneratedValue;
javax.persistence.Id;
javax.persistence.JoinColumn;
javax.persistence.JoinTable;
javax.persistence.ManyToMany;
javax.persistence.ManyToOne;
javax.persistence.Temporal;
javax.persistence.TemporalType;
org.hibernate.annotations.GenericGenerator;
Seperti biasa jangan lupa untuk generate Getters and Setters di class ini.
java.util.Date;
org.springframework.data.domain.Page;
org.springframework.data.domain.Pageable;
org.springframework.data.jpa.repository.Query;
org.springframework.data.repository.PagingAndSortingRepository;
org.springframework.data.repository.query.Param;
com.dac.aplikasi.pelatihan.entity.Materi;
com.dac.aplikasi.pelatihan.entity.Sesi;
18. Membuat file yang berisi sql statement untuk keperluan unit testing Entity Sesi dan Materi
Klik kanan folder data yang terletak di src/test/resources/data
New > File
Namakan materi.sql
Isi dengan statement sql sbb:
delete from sesi;
delete from materi;
insert into materi (id, kode, nama)
values ('aa6', 'JF-001', 'Java Fundamental');
insert into materi (id, kode, nama)
values ('aa7', 'JF-002', 'Java Web');
insert into materi (id, kode, nama)
values ('aa8', 'MB-001', 'IOS Fundamental');
insert into materi (id, kode, nama)
values ('aa9', 'MB-002', 'Android Fundamental');
into
into
into
into
into
into
peserta_pelatihan
peserta_pelatihan
peserta_pelatihan
peserta_pelatihan
peserta_pelatihan
peserta_pelatihan
(id_sesi,
(id_sesi,
(id_sesi,
(id_sesi,
(id_sesi,
(id_sesi,
id_peserta)
id_peserta)
id_peserta)
id_peserta)
id_peserta)
id_peserta)
values
values
values
values
values
values
('aa',
('aa',
('aa',
('ab',
('ab',
('ac',
'aa1');
'aa2');
'aa3');
'aa2');
'aa3');
'aa2');
java.sql.Connection;
java.sql.PreparedStatement;
java.sql.ResultSet;
java.text.SimpleDateFormat;
java.util.Date;
javax.sql.DataSource;
org.junit.Assert;
org.junit.Test;
org.junit.runner.RunWith;
org.springframework.beans.factory.annotation.Autowired;
org.springframework.boot.test.context.SpringBootTest;
org.springframework.data.domain.Page;
org.springframework.data.domain.PageRequest;
org.springframework.test.context.jdbc.Sql;
org.springframework.test.context.junit4.SpringRunner;
com.dac.aplikasi.pelatihan.dao.SesiDao;
com.dac.aplikasi.pelatihan.entity.Materi;
com.dac.aplikasi.pelatihan.entity.Peserta;
com.dac.aplikasi.pelatihan.entity.Sesi;
@RunWith(SpringRunner.class)
@SpringBootTest
@Sql(
executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD,
scripts = {"/data/peserta.sql", "/data/materi.sql", "/data/sesi.sql"}
)
public class SesiDaoTest {
@Autowired
private SesiDao sd;
@Autowired
private DataSource ds;
@Test
public void testCariByMateri() {
Materi m = new Materi();
m.setId("aa6");
PageRequest page = new PageRequest(0, 5);
Page<Sesi> hasilQuery = sd.findByMateri(m, page);
Assert.assertEquals(1L, hasilQuery.getTotalElements());
Assert.assertFalse(hasilQuery.getContent().isEmpty());
Sesi s = hasilQuery.getContent().get(0);
Assert.assertNotNull(s);
Assert.assertEquals("Java Fundamental", s.getMateri().getNama());
}
}
@Test
public void testCariBerdasarkanTanggalMulaiDanKodeMateri() throws Exception {
PageRequest page = new PageRequest(0, 5);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date sejak = formatter.parse("2015-01-01");
Date sampai = formatter.parse("2015-01-05");
Page<Sesi> hasil = sd.cariBerdasarkanTanggalMulaiDanKodeMateri(
sejak, sampai, "JF-001", page);
Assert.assertEquals(1L, hasil.getTotalElements());
Assert.assertFalse(hasil.getContent().isEmpty());
Sesi s = hasil.getContent().get(0);
Assert.assertEquals("Java Fundamental", s.getMateri().getNama());
}
@Test
public void testSaveSesi() throws Exception {
Peserta p1 = new Peserta();
p1.setId("aa1");
Peserta p2 = new Peserta();
p2.setId("aa2");
Materi m = new Materi();
m.setId("aa8");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date sejak = formatter.parse("2015-02-01");
Date sampai = formatter.parse("2015-02-03");
Sesi s = new Sesi();
s.setMateri(m);
s.setMulai(sejak);
s.setSampai(sampai);
s.getListPeserta().add(p1);
s.getListPeserta().add(p2);
sd.save(s);
String idSesiBaru = s.getId();
Assert.assertNotNull(idSesiBaru);
System.out.println("ID Baru : " + s.getId());
String sql = "select count(*) from sesi where id_materi='aa8'";
String sqlManyToMany = "select count(*) from peserta_pelatihan "
+ "where id_sesi = ?";
try (Connection c = ds.getConnection()) {
ResultSet rs = c.createStatement().executeQuery(sql);
Assert.assertTrue(rs.next());
Assert.assertEquals(2L, rs.getLong(1));
PreparedStatement ps = c.prepareStatement(sqlManyToMany);
ps.setString(1, idSesiBaru);
ResultSet rs2 = ps.executeQuery();
Assert.assertTrue(rs2.next());
Assert.assertEquals(2L, rs2.getLong(1));
}
}
20. Run unit testing di class SesiDaoTest.java, jika sukses maka akan muncul tampilan sebagai berikut: