MyIbatis

Integrasi Spring-Ibatis

Masih dengan ibatis = : =
Barusan coba integrasikan ibatis dengan spring 3.0, disini saya menggunakan ibatis versi 2.3. yang belum support annotation. Ok, pertama kita akan membuat kelas pojo nya :

package org.kris.entity;

/**
 *
 * @author kris
 */
public class Mahasiswa {

 private Integer id;
 private String nim;
 private String nama;
 private String jurusan;


Nah, kemudian kita buatkan mappernya, disini kita akan mencoba dengan menggunakan xml.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="Mahasiswa">

 <insert id="save" parameterClass="org.kris.entity.Mahasiswa" >
 insert into mahasiswa (nim, nama, jurusan)
 values (#nim#, #nama#, #jurusan#)
 </insert>

 <select id="getByNim" parameterClass="string" resultClass="org.kris.entity.Mahasiswa">
 select * from mahasiswa where nim = #nim#
 </select>

 <delete id="delete" parameterClass="string">
 delete from mahasiswa where
 nim = #nim#
 </delete>

 <select id="getAll" resultClass="org.kris.entity.Mahasiswa">
 select * from mahasiswa
 </select>

</sqlMap>

 

File xml diatas(sqlMap) berfungsi untuk menempatkan query-query yang kita butuhkan, jadi seluruh query akan diletakan di file tersebut, nantinya kita akan memanggil id dari masing-masing element, kita juga bisa mengirimkan parameter sesuai dengan type data yang diinginkan. Kemudian kita buatkan SqlMapConfig nya :


<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

 <sqlMap resource="org/kris/entity/Mahasiswa.xml"/>

</sqlMapConfig>

File tersebut hanya kan menentukan resource dari file mapper yang telah kita buat sebelumnya, kemudian, karena kita menggunakan spring kita dapat melakukan konfigurasi datasource didalam spring. Setelah itu kita buat interface dao dan implementasinya :

package org.kris.dao;

import java.util.List;
import org.kris.entity.Mahasiswa;

/**
 *
 * @author kris
 */
public interface MahasiswaDao {

 public void save(Mahasiswa mahasiswa);

 public void delete(Mahasiswa mahasiswa);

 public Mahasiswa getByNim(String nim);

 public List<Mahasiswa> getAll();
}

Implementasinya :

package org.kris.impl;

import java.util.List;
import org.kris.dao.MahasiswaDao;
import org.kris.entity.Mahasiswa;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

/**
 *
 * @author kris
 */

public class MahasiswaImpl extends SqlMapClientDaoSupport implements MahasiswaDao {

 public void save(Mahasiswa mahasiswa) {
 getSqlMapClientTemplate().insert("save",mahasiswa);
 }

 public void delete(Mahasiswa mahasiswa) {
 getSqlMapClientTemplate().delete("delete",mahasiswa.getNim());
 }

 public Mahasiswa getByNim(String nim) {
 return (Mahasiswa) getSqlMapClientTemplate().queryForObject("getByNim",nim);
 }

 public List<Mahasiswa> getAll() {
 return (List<Mahasiswa>) getSqlMapClientTemplate().queryForList("getAll");
 }
}

Spring menyediakan template SqlMapClientTemplate yang dapat kita gunakan untuk melakukan proses transaksi secara otomatis di level aplikasi. Untuk menggunakannya maka kita dapat meng-extends kelas SqlMapClientDaoSupport. Setelah itu kita dapat menggunakan method getSqlMapClientTemplate(). Jadi kita tidak perlu membuat, membuka dan menutup session secara manual seperti pada artikel sebelumnya. Kemudian kita injek kelas kelas yang dibutuhkan di dalam spring :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

 <bean id="dataSource">
 <property name="driverClassName" value="org.postgresql.Driver"/>
 <property name="url" value="jdbc:postgresql://localhost:5432/crude-ibatis"/>
 <property name="username" value="root"/>
 <property name="password" value="root"/>
 </bean>

 <bean id="sqlMapClient">
 <property name="configLocation" value="classpath:SqlMapConfig.xml"/>
 <property name="dataSource" ref="dataSource"/>
 </bean>

 <bean id="mahasiswaDao">
 <property name="sqlMapClient" ref="sqlMapClient"/>
 </bean>

</beans>

File diatas merupakan konfigurasi dari datasource dengan menggunakan spring, kemudian konfigurasi tersebut akan digunakan oleh SqlMapClientFactoryBean yang nantinya akan digunakan untuk keperluan proses transaksi. Kemudia kita melakukan injeksi terhadap interface mahasiswaDao seperti biasa dan menghubungakannya ke bean sqlMapClient yang telah kita buat sebelumnya.
Sampai pada tahapan tersebut kita sudah selesai, sekarang tinggal coba :

import java.util.List;
import org.kris.dao.MahasiswaDao;
import org.kris.entity.Mahasiswa;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public final class Main {

 private MahasiswaDao mahasiswaDao;
 private Mahasiswa mahasiswa;

 public Main() {
 ApplicationContext context = new ClassPathXmlApplicationContext("SpringConfig.xml");
 mahasiswaDao = (MahasiswaDao) context.getBean("mahasiswaDao");
 initMahasiswa();
 this.save();
 this.getByNim();
 this.getAll();
 this.delete();
 }

 public void initMahasiswa() {
 mahasiswa = new Mahasiswa();
 mahasiswa.setNim("001");
 mahasiswa.setNama("Kris");
 mahasiswa.setJurusan("Sistem Informasi");
 }

 public void save() {
 System.out.println("Data Disimpan");
 mahasiswaDao.save(mahasiswa);
 }

 public void delete() {
 System.out.println("Data dihapus");
 mahasiswaDao.delete(mahasiswa);
 }

 public void getByNim() {
 System.out.println("Ambil data berdasarkan nim");
 System.out.println(mahasiswaDao.getByNim(mahasiswa.getNim()).getNama());
 }

 public void getAll() {
 System.out.println("Ambil seluruh data");
 List<Mahasiswa> kategoris = mahasiswaDao.getAll();
 for (Mahasiswa kategori : kategoris) {
 System.out.println(kategori.getNim());
 System.out.println(kategori.getNama());
 System.out.println(kategori.getJurusan());
 }
 }

 public static void main(String[] args) {
 Main main = new Main();
 }
}

Didalam kelas diatas kita hanya tinggal melakukan load terhadap spring. Hasilnya :

run:
May 22, 2010 8:10:50 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@be2358: startup date [Sat May 22 08:10:50 PDT 2010]; root of context hierarchy
May 22, 2010 8:10:50 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [SpringConfig.xml]
May 22, 2010 8:10:50 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons

INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@10655dd: defining beans [dataSource,sqlMapClient,mahasiswaDao]; root of factory hierarchy
May 22, 2010 8:10:50 AM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
INFO: Loaded JDBC driver: org.postgresql.Driver
Data Disimpan
Ambil data berdasarkan nim
Kris
Ambil seluruh data
001
Kris
Sistem Informasi
Data dihapus
BUILD SUCCESSFUL (total time: 1 second)

Ok, mudah bukan , dengan menggunakan spring maka otomatis akan sangat membantu kita dalam penanganan transaksi dalam menggunakan ibatis, sekian dulu …terimakasih
DOWNLOAD SOURCE

Advertisement

Discussion

2 Responses to “Integrasi Spring-Ibatis”

  1. wah, ganti template nih…
    terima kasih banyak untuk krissadewo.com
    oleh-olehnya dari solo belum saya kasihkan.
    (^_^)d

    Posted by Mudzakkir | July 1, 2010, 9:25 pm
  2. Sama-sama mas mudzakkir :D

    Posted by krissadewo | July 2, 2010, 3:06 pm

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.