noprianto
noprianto
. 7 min read

Operasi CRUD Menggunakan Spring Boot JDBC

Bismillah,
Jika pada tulisan yang lalu saya sudah mengenalkan framework Spring dan Spring Boot, serta telah membuat CRUD menggunakan JDBC biasa tanpa framework kemudian JDBC dengan framework Hibernate. Pada kesempatan ini akan saya coba membuat CRUD memanfaatkan Spring JDBC.

Seperti yang telah kita ketahui bahwa ketika develop aplikasi menggunakan Spring Boot, konfigurasi aplikasi akan sangat diminimalkan. Misalkan konfigurasi database untuk username, password, port, dan nama database serta masalah datasource yang telah disediakan oleh Spring Boot. Berikut ini adalah point-point yang akan kita bahas ke depan

Konfigurasi Spring Boot

Pada point ini sudah pernah dibahas pada postingan saya sebelumnya, saya akan menggunakan IntelliJ IDEA untuk membuat konfigurasi Spring Boot tersebut. Library yang kita butuhkan adalah JDBC API, MySQL Driver, dan Lombok.

  • JDBC API; menyediakan jembatan untuk mengakses database melalui aplikasi
  • MySQL Driver; Driver yang dibutuhkan aplikasi Java, karena DBMS MySQL
  • Lombok; menyediakan method setter dan getter

Setelah library-library dibutuhkan telah ditambahkan file pom.xml isinya kurang lebih seperti di bawah ini

...
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
...

Persiapan Database

Selanjutnya kita membutuhkan struktur database yang akan kita gunakan untuk menjalankan operasi CRUD, database yang akan digunakan adalah menggunakan MySQL. Silakan gunakan struktur database seperti di bawah ini

CREATE DATABASE IF NOT EXISTS akademik;

USE akademik;

CREATE TABLE IF NOT EXISTS mahasiswa(
nim VARCHAR(10) NOT NULL,
nama VARCHAR(50) NOT NULL,
ipk FLOAT(4,2) NOT NULL,
jurusan VARCHAR(25) NOT NULL,
PRIMARY KEY(nim)
)ENGINE=InnoDB;

INSERT INTO mahasiswa VALUES('075410099','Noprianto',4.00,'Teknologi Informasi');
INSERT INTO mahasiswa VALUES('075410100','Noureen Akhlema Shannum',4.00,'Pendidikan Bahasa Inggris');
INSERT INTO mahasiswa VALUES('075410101','Uwais Al-Qarny',3.99,'Teknik Sipil');

Untuk struktur tabel sebenarnya dapat digenereate ketika aplikasi startup, yang terpenting disipakan dulu databasenya. Selain struktur database di atas, kita juga butuh konfigurasi database agar aplikasi kita dapat terkoneksi dengan database. Konfigurasi tersebut terdapat di dalam folder resources pada file application.properties, isinya adalah sebagai berikut

spring.datasource.username=root
spring.datasource.password=
spring.datasource.url=jdbc:mysql://localhost:3306/akademik?useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.initialization-mode=never

Fungsi konfigurasi Spring Boot secara umum untuk melakukan koneksi ke database, terdapat property spring.datasource.initialization-mode=never berfungsi agar ketika aplikasi startup akan mencari file schema*.sql dan data*.sql. File schema biasanya berisi DDL(Data Definition Language) seperti create, alter, dan yang lain, sedangkan file data adalah berisi tentang operasi DML(Data Manipulation Language) seperti insert, update, delete, dan yang lain. Nilai yang terdapat pada spring.datasource.initialization-mode adalah sebagai berikut

  • never; berarti tidak menjalankan file sql di dalam folder resources
  • always; selalu menjalankan file sql
  • embedded; digunakan untuk model database embed seperti H2

Pembuatan Entitas

Entitas berfungsi untuk mapping tabel yang terdapat pada database, biasanya satu entitas akan merepresentasikan satu tabel dalam database. Kode yang dapat digunakan adalah sebagai berikut

@Getter
@Setter
public class Mahasiswa {
    @NonNull
    private String nim;
    @NonNull
    private String nama;
    @NonNull
    private float ipk;
    @NonNull
    private String jurusan;

    public Mahasiswa() {
    }

    public Mahasiswa(String nim, String nama, float ipk, String jurusan) {
        this.nim = nim;
        this.nama = nama;
        this.ipk = ipk;
        this.jurusan = jurusan;
    }
}

Dari pembuatan entitas di atas, terdapat anotasi @Getter dan @Setter yang digunakan untuk menyediakan method getter dan setter. Metode tersebut disediakan oleh library Lombok, sehingga kita tidak perlu membuat methode tersebut secara manual atau generate dari editor.

Ketika menggunakan IntelliJ IDEA, jangan lupa untuk memasang plugin Lombok agar ketika memanggil method getter dan setter dapat dilakukan.

Pembuatan DAO

Tidak ada perubahan untuk DAO dari tulisan-tulisan sebelumnya, merupakan interface yang mendefinisikan operasi-operasi pada sebuah entitas. Isi dari DAO adalah sebagai berikut

public interface MahasiswaDao {
    public boolean insert(Mahasiswa mahasiswa);

    public boolean update(Mahasiswa mahasiswa);

    public boolean delete(Mahasiswa mahasiswa);

    public Mahasiswa getByNim(String nim);

    public List<Mahasiswa> getAll();
}

Setelah membuat operasi-operasinya, selalu butuh implementasi dari operasi-operasi di atas dengan membuat class yang implement class di atas. Class tersebut berisi kode seperti di bawah ini

...
@Repository
public class MahasiswaRepository implements MahasiswaDao {

    private final String INSERT = "INSERT INTO mahasiswa (nim, nama, ipk, jurusan) "
            + "	VALUES (?,?,?,?)";
    private final String UPDATE = "UPDATE mahasiswa SET nama=?, ipk=?, jurusan=? WHERE nim=?";
    private final String DELETE = "DELETE FROM mahasiswa WHERE nim=?";
    private final String SELECT_ALL = "SELECT nim,nama,ipk,jurusan FROM mahasiswa";
    private final String SELECT_BY_NIM = "SELECT nim,nama,ipk,jurusan FROM mahasiswa WHERE nim=?";

    private static Logger LOGGER = LoggerFactory.getLogger(MahasiswaRepository.class.getName());

    @Autowired
    private DataSource dataSource;

    private Connection connection;
    private PreparedStatement preparedStatement;

    @Override
    public boolean insert(Mahasiswa mahasiswa) {
        try {
            connection = dataSource.getConnection();
            preparedStatement = connection.prepareStatement(INSERT);
            preparedStatement.setString(1, mahasiswa.getNim());
            preparedStatement.setString(2, mahasiswa.getNama());
            preparedStatement.setFloat(3, mahasiswa.getIpk());
            preparedStatement.setString(4, mahasiswa.getJurusan());
            return preparedStatement.executeUpdate() > 0 ? true : false;
        } catch (SQLException e) {
            LOGGER.error(null, e);
        } finally {
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    LOGGER.error(null, e);
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    LOGGER.error(null, e);
                }
            }

        }
        return false;
    }
...

Sebenarnya class di atas mirip dengan JDBC biasa, perbedaannya adalah kita tidak perlu melewatkan objek datasource untuk mengakses database. Objek datasource tersebut telah disediakan oleh Spring, cukup dengan menambahkan anotasi @Autowired. Selanjutnya dibutuhkan anotasi @Repository untuk memberitahu Spring agar dalam class ini dilakukan scanning atau konfigurasi.

Testing Aplikasi

Waktunya ujicoba aplikasi, setelah kita konfigurasi dan mendefinisikan kebutuhkan untuk menjalankan aplikasi CRUD menggunakan Spring Boot. Saya menggunakan unit test untuk melakukan hal tersebut, kodenya kurang lebih seperti ini

@RunWith(SpringRunner.class)
@SpringBootTest
public class JdbcApplicationTests {

    @Autowired
    private MahasiswaDao mahasiswaDao;

    @Test
    public void getAll() {
        Mahasiswa mahasiswa = new Mahasiswa("075410099", "Noprianto", 3.99F, "Teknik Informatika");
        assertTrue(mahasiswaDao.insert(mahasiswa));
    }

}

Silakan dijalankan kode di atas, jika semuanya normal seharusnya unit test tersebut statusnya Tests passed. Jika dilihat dari kode di atas, untuk melakukan menambahkan data mahasiswa ke database hanya dibutuhkan anotasi @Autowired untuk meng-instance MahasiswaDao. Kode program dapat didapatkan di sini.

Demikianlah artikel saya mengenai operasi CRUD menggunakan Spring Boot JDBC, semoga dapat menambahkan pengetahuan temen-temen untuk belajar Spring Boot. Kritik dan saran sangat dibutuhkan untuk memberikan motivasi perbaikan blog ini. Happy coding. ^_^

Referensi

comments powered by Disqus