auto mapping column name to POJO property using mapUnderscoreToCamelCase setting

pengguna mybatis yang budiman, fitur yang cukup membantu dalam tahap development aplikasi yang anda bangin dengan iBatis maupun myBatis adalah mapUnderscoreToCamelCase, fitur ini dapat anda tambahkan pada mybatis-config.xml bersama configuration yang lainnya berikut adalah contoh settingan saya:


<configuration>

<settings>
 <setting name="cacheEnabled" value="false"/>
 <setting name="lazyLoadingEnabled" value="true"/>
 <setting name="multipleResultSetsEnabled" value="true"/>
 <setting name="useColumnLabel" value="true"/>
 <setting name="useGeneratedKeys" value="true"/>
 <setting name="autoMappingBehavior" value="PARTIAL"/>
 <setting name="defaultExecutorType" value="SIMPLE"/>
 <setting name="safeRowBoundsEnabled" value="false"/>
 <setting name="mapUnderscoreToCamelCase" value="false"/>
 <setting name="localCacheScope" value="SESSION"/>
 <setting name="jdbcTypeForNull" value="OTHER"/>
 <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
 <strong><setting name="mapUnderscoreToCamelCase" value="true"/></strong>
 </settings>

...

</configuration>

kegunaan settingan diatas adalah untuk mengotomatisasikan nama kolom yang ada pada table anda ke property java bean anda. seperti contoh nama kolom anda pada table adalah user_name, akan direpresentasikan pada bean anda adalah userName. jadi anda tidak repot-repot lagi menulis SQL di xml seperti ini

select
user_name as userName
from
table_user
semoga membantu

fixed error : Mapped Statements collection does not contain value for yourClassName

to fixed problem if you see error like this “Mapped Statements collection does not contain value for , you need check your code and make sure the three names have to match:
– interface = your.Path.dao.YourClassInterface
– mapper file = /your/path/dao/YourClassInterface.xml
– mapper namespace = your.Path.dao.YourClassInterface

in .xml my batis mapper file, make sure namespace is your interface path and name, not your model/bean.

happy coding! :P

fixed org.postgresql.jdbc4.Jdbc4PreparedStatement.setQueryTimeout(int) is not yet implemented.

i tried integrating spring, struts2 and myBatis framework, i’ve found many error when trying to start application. one of that errors is failed querying to database cause SQLFeatureNotSupportedException.

if you see Cause: java.sql.SQLFeatureNotSupportedException: Method org.postgresql.jdbc4.Jdbc4PreparedStatement.setQueryTimeout(int) is not yet implemented. error on your application log, its mean you need to reconfigure your apps. there properties on your config use query time out, but the jdbc driver not yet implement.

that problem will be fixed if you remove/comment your properties configuration. see my config before and after.

mybatis-config.xml (before)


<configuration>
 <settings>
 <setting name="cacheEnabled" value="true"/>
 <setting name="lazyLoadingEnabled" value="true"/>
 <setting name="multipleResultSetsEnabled" value="true"/>
 <setting name="useColumnLabel" value="true"/>
 <setting name="useGeneratedKeys" value="false"/>
 <setting name="autoMappingBehavior" value="PARTIAL"/>
 <setting name="defaultExecutorType" value="SIMPLE"/>
<strong><setting name="defaultStatementTimeout" value="25000"/></strong>
 <setting name="safeRowBoundsEnabled" value="false"/>
 <setting name="mapUnderscoreToCamelCase" value="false"/>
 <setting name="localCacheScope" value="SESSION"/>
 <setting name="jdbcTypeForNull" value="OTHER"/>
 <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
 </settings>

</configuration>

mybatis-config.xml (after)


<configuration>
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<strong><!--<setting name="defaultStatementTimeout" value="25000"/>--></strong>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

</configuration>

then start your apps, this error should be gone.

see postgres and jdk version miss match in this link http://jdbc.postgresql.org/download.html

hope this post will help you, thanks

Masalah Upload File pada Struts2 versi 2.0.6

saat membuat fasilitas untuk mengupload file dengan menggunakan Struts2 versi 2.0.6, terjadi masalah ketika sesaat action untuk upload file tersebut, bahkan tidak bisa di debug karena memanggil method yang ditujupun tidak dapat dilakukan. setelah telusur punya telusur, ternyata ada bugs di class bawaan struts tersebut yaitu class org.apache.struts2.dispatcher. pada method prepareDispatcherAndWrapRequest.

Ada beberapa solusi untuk ini, solusi pertama mengganti class bawaan struts dengan cara update/perbaharui class tersebut silahkan ambil disini, buat di project anda package sesuai class itu berada org.apache.struts2. jadi anda haru membuat packet org-apache-dst, ini tujuannya agar file class bawaan struts akan digantikan dengan yang anda buat tadi.

cara kedua yaitu di tinggal menambahkan pada web.xml baris berikut:

<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>

<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

dan silahkan anda coba lagi upload file anda. pada kasus saya, masalah ini terselesaikan!

#masalahnya dari 1 bulan kemarin damn!

Contoh Mudah Menggunakan jQueryUI

jQuery ini sebenernya keumpulan javaScript yang jlimet dibuat oleh mereka-mereka untuk mempermudah dalam melakukan penulisan untuk java script, seperti misalanya kita membuat sebuah animasi transisi pada layer di HTML, tidak perlu menuliskan dari awal transisinya yang saya yakin sangat panjang, setelah adanya jQuery hal-hal yang panjang tadi dapat dipersingkat kita tinggal menuliskan “.slideDown()”. Apalagi ada turunannya bernama jQueryUI — sangat membantu anda dalam mengindahkan halaman web.

IMPLEMENTASI

Disini saya tidak akan membahas tentang dasar-dasar HTML, CSS dan Java Script ya. Kita langsung mengimplementasikan penggunaan jQuery dan jQueryUI (karena jQueryUI membutuhkan jQuery :P).

ok, saya memiliki sebuah halaman sederhana sebagai berikut:

<html>
<head><title>jQueryUI sample </title></head>

<body>
<h1>Test jQueryUI</h1>
<form action="#" method="post" id="formTest">
Tanggal (dd/mm/yyyy) : <input type="text" id="tanggal" name="tanggal">  <br>
<input type="button" id="Simpan" value="Simpan">
</form>
</body>
</html>

gambar 1:

sekarang kita sudah memiliki halaman tanpa “bumbu”, karena kita menggunakan jQueryUI maka kita harus meng-include-kan file pendukung jQueryUI, seperti jQuery, jQueryUI, dan CSS sehingga kita menambahkan tag seperti berikut setelah tag </head>:

<link rel="Stylesheet" href="pathAnda/page/css/cupertino/jquery-ui-1.8.13.custom.css" type="text/css" />
<script type="text/javascript" src='pathAnda/page/script/jquery/jquery-1.5.1.min.js'></script>
<script type="text/javascript" src='pathAnda/page/script/jquery/jquery-ui-1.8.13.custom.min.js'></script>

setelah itu tinggal kita gunakan tag-tag jQueryUInya. kita gunakan jQueryUInya seperti javaScript biasa, berikut implementasinya:

<script type="text/javascript">

$(document).ready(function() {
$("#Simpan").button();
});
</script>

gambar 2:

perhatikan text #Simpan, itu merupakan ID dari tambolm yang kita buat, anda dapat mengimplementasikannya juga pada tag <div> sesuai dengan kebutuhan. selain ID anda jg dapat menggunakan CLASSnya biasanya pada <div class=”bla-bla”>. setelah itu perhatikan tombol yang kita buat, setidaknya nilai estetikanya lebih daripada sebelumnya. sekarang kita tambahkan lagi date picker untuk textfield tanggal. kita hanya menambahkan :

$("#tanggal").datepicker({
showOn: "button",
buttonImage: 'pathAnda/page/'+"images/calendar.gif",
showAnim:"show",
dateFormat:"dd-mm-yy",
buttonImageOnly:true
});

sekarang di samping text field terdapat gambar kalender yang dapat anda gunakan untuk menentukan tanggal. mudah bukan??? :D

“silahkan dipelajari mas hasan” :P

ini lengkapnya:

<html>
<head><title>jQueryUI sample </title></head>
<link rel="Stylesheet" href="pathAnda/page/css/cupertino/jquery-ui-1.8.13.custom-without-tabs.css" type="text/css" />
<script type="text/javascript" src='pathAnda/page/script/jquery/jquery-1.5.1.min.js'></script>
<script type="text/javascript" src='pathAnda/page/script/jquery/jquery-ui-1.8.13.custom.min.js'></script>
<script type="text/javascript">

$(document).ready(function() {
$("#Simpan").button();
$("#tanggal").datepicker({
showOn: "button",
buttonImage: 'pathAnda/page/'+"images/calendar.gif",
showAnim:"show",
dateFormat:"dd-mm-yy",
buttonImageOnly:true
});
});
</script>
<body>
<h1>Test jQueryUI</h1>
<form action="#" method="post" id="formTest">
Tanggal (dd/mm/yyyy) : <input type="text" id="tanggal" name="tanggal">  <br>
<input type="button" id="Simpan" value="Simpan">
</form>
</body>
</html>
</script>

Kemana semangat menulis itu pergi??

2 tahun belakangan ini menulis adalah hal yang mahal, terang saja, sekarang sudah berkutit dengan project-project yang menambah ilmu, ilmu batiniah dan ilmu rohaniah meskipun fisikiahNya mash blum ada perubahan ke arah “besar” :p

saya kadang iri gmn gtu, ngunjungin halaman blog teman-teman yang aktif nulis. semangat nulis ilang-timbul-ilang-timbul, sebenarnya yang terjadi pada diri saya saat ini adalah fenomena kosmik yang negatif, negatif saya asumsikan disini sebagai personal yang hidup dalam “sangkar emas”  dan haus dengan kebebasan jiwa, kebebasan berekspresi, kebebasan pribadi (keluarga dan sosial).

eh tapi jangan salah, buku catatan harian tetap terisi meskipun berisikan intisari kejadian sehari-hari, baik ide, moment, dan rencana hidup. :p

semoga anda bisa membaca catatan harian saya…. :D