Spring Web MVC – Simple CRUD with iBatis (Episode 5)


Persiapan:

  1. Sudah membaca artikel Spring Web MVC – Create Log File (Episode 3). Jika belum, silahkan baca artikel ini.
  2. Membaca doa sebelum memulai mengikuti artikel ini.

Note: Untuk postingan ini sudah mulai agak advance sedikit, saya coba menjelaskan secara perlahan, dan kalau anda bingung.

File-file yang dibutuhkan:

  1. jtds-1.2.4.jar —  silahkan download disini
  2. ibatis-sqlmap-2.3.4.726.jar — silahkan download disini
  3. c3p0-0.9.1.2.jar — silahkan download disini

Pada artikel ini saya akan coba memberikan contoh membuat sebuah aplikasi Simple CRUD dengan menggunakan iBatis. Untuk membuat sebuah aplikasi yang mengandung CRUD ada 2 pendekatan yang bisa biasanya saya gunakan. Yang pertama adalah membangun model Dao nya terlebih dahulu baru membangun view jsp nya, cara kedua adalah membangun flow pada view nya terlebih dahulu, setelah itu baru membangun model Dao nya. Pada contoh kali ini saya akan menggunakan cara yang kedua.

PART 1 – Membangun view

Anggap kita akan membuat data mahasiswa yang terdiri dari NIM, NAMA, dan UMUR (3 saja dulu ya, jangan terlalu banyak. :p). Lalu pada aplikasi ini kita akan membuat fasilitas untuk:

  1. Add New
  2. Edit
  3. Search
  4. Show All

Silahkan ikuti langkah2 berikut:

  1. pada package com.firstProgram.model buat class Mahasiswa.java
     package com.firstProgram.model;
    
    public class Mahasiswa {
     private String nim;
     private String nama;
     private Integer umur;
     public String getNim() {
     return nim;
     }
     public void setNim(String nim) {
     this.nim = nim;
     }
     public String getNama() {
     return nama;
     }
     public void setNama(String nama) {
     this.nama = nama;
     }
     public Integer getUmur() {
     return umur;
     }
     public void setUmur(Integer umur) {
     this.umur = umur;
     }
    }
    
    
  2. pada folder firstProgram/WebContent/WEB-INF/pages buat file mahasiswa_show.jsp
    <!DOCTYPE html PUBLIC
     "-//W3C//DTD XHTML 1.1 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <html>
     <head>
     <title>Episode 5</title>
     <link href="<c:url value="/css/style.css"/>" rel="stylesheet" type="text/css" />
     </head>
     <body>
     <a href="<c:url value="/mahasiswa/all.asik" />">Show All</a>
     ---
     <a href="<c:url value="/mahasiswa/add.asik" />">Add New</a>
     ---
     <a href="<c:url value="/mahasiswa/search.asik" />">Search</a>
    
     <br />
     <br />
     <br />
     <table width="500" border="1" cellpadding="2" cellspacing="2">
     <tr>
     <th width="30%">NIM</th>
     <th width="50%">Nama</th>
     <th width="10%">Umur</th>
     <th width="20%" colspan="2">&nbsp;</th>
     </tr>
     <tr>
     <td>nim</td>
     <td>nama</td>
     <td>umur</td>
     <td>
     <form:form action="edit.asik">
     <input type="hidden" id="nim" name="nim" value="nim"/>
     <input type="hidden" id="nama" name="nama" value="nama"/>
     <input type="hidden" id="umur" name="umur" value="umur"/>
     <input type="submit" value="Edit" style="width:60px;"/>
     </form:form>
     </td>
     <td>
     <form:form action="delete.asik">
     <input type="hidden" id="nim" name="nim" value="nim"/>
     <input type="submit" value="Delete" style="width:60px;"/>
     </form:form>
     </td>
     </tr>
     </table>
     </body>
    </html>
    
  3. pada folder firstProgram/WebContent/WEB-INF/pages buat file mahasiswa_new.jsp
    <!DOCTYPE html PUBLIC
     "-//W3C//DTD XHTML 1.1 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <html>
     <head>
     <title>Episode 5</title>
     <link href="<c:url value="/css/style.css"/>" rel="stylesheet" type="text/css" />
     </head>
     <body>
     <a href="<c:url value="/mahasiswa/all.asik" />">Show All</a>
     ---
     <a href="<c:url value="/mahasiswa/add.asik" />">Add New</a>
     ---
     <a href="<c:url value="/mahasiswa/search.asik" />">Search</a>
    
     <h1>Please Input:</h1>
     <form:form>
     <div>
     <label for="nim">NIM</label>
     <input type="text" id="nim" name="nim" value="nim"/>
     </div>
     <div>
     <label for="nama">Nama</label>
     <input type="text" id="nama" name="nama" value="nama"/>
     </div>
     <div>
     <label for="umur">Age</label>
     <input type="text" id="umur" name="umur" value="umur"/>
     </div>
     <div>
     <label>&nbsp;</label>
     <input type="submit" value="Save"/>
     <input type="reset" value="Cancel"/>
     </div>
     </form:form>
    
     <br />
     <br />
     <br />
     <table width="500" border="1" cellpadding="2" cellspacing="2">
     <tr>
     <th width="30%">NIM</th>
     <th width="50%">Nama</th>
     <th width="10%">Umur</th>
     <th width="20%" colspan="2">&nbsp;</th>
     </tr>
    
     <tr>
     <td>nim</td>
     <td>nama</td>
     <td>umur</td>
     <td>
     <form:form action="edit.asik">
     <input type="hidden" id="nim" name="nim" value="nim"/>
     <input type="hidden" id="nama" name="nama" value="nama"/>
     <input type="hidden" id="umur" name="umur" value="umur"/>
     <input type="submit" value="Edit" style="width:60px;"/>
     </form:form>
     </td>
     <td>
     <form:form action="delete.asik">
     <input type="hidden" id="nim" name="nim" value="nim"/>
     <input type="submit" value="Delete" style="width:60px;"/>
     </form:form>
     </td>
     </tr>
     </table>
     </body>
    </html>
    
  4. pada folder firstProgram/WebContent/WEB-INF/pages buat file mahasiswa_edit.jsp
    <!DOCTYPE html PUBLIC
     "-//W3C//DTD XHTML 1.1 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <html>
     <head>
     <title>Episode 5</title>
     <link href="<c:url value="/css/style.css"/>" rel="stylesheet" type="text/css" />
     </head>
     <body>
     <a href="<c:url value="/mahasiswa/all.asik" />">Show All</a>
     ---
     <a href="<c:url value="/mahasiswa/add.asik" />">Add New</a>
     ---
     <a href="<c:url value="/mahasiswa/search.asik" />">Search</a>
    
     <h1>Please Input:</h1>
     <form:form>
     <div>
     <label for="nim">NIM</label>
     <input type="text" id="nim" name="nim" value="nim" READONLY="TRUE"/>
     </div>
     <div>
     <label for="nama">Nama</label>
     <input type="text" id="nama" name="nama" value="nama"/>
     </div>
     <div>
     <label for="umur">Umur</label>
     <input type="text" id="umur" name="umur" value="umur"/>
     </div>
     <div>
     <label>&nbsp;</label>
     <input type="submit" value="Update"/>
     <input type="reset" value="Cancel"/>
     </div>
     </form:form>
    
     <br />
     <br />
     <br />
     <table width="500" border="1" cellpadding="2" cellspacing="2">
     <tr>
     <th width="30%">NIM</th>
     <th width="50%">Nama</th>
     <th width="10%">Umur</th>
     <th width="20%" colspan="2">&nbsp;</th>
     </tr>
    
     <tr>
     <td>nim</td>
     <td>nama</td>
     <td>umur</td>
     <td>
     <form:form action="edit.asik">
     <input type="hidden" id="nim" name="nim" value="nim"/>
     <input type="hidden" id="nama" name="nama" value="nama"/>
     <input type="hidden" id="umur" name="umur" value="umur"/>
     <input type="submit" value="Edit" style="width:60px;"/>
     </form:form>
     </td>
     <td>
     <form:form action="delete.asik">
     <input type="hidden" id="nim" name="nim" value="nim"/>
     <input type="submit" value="Delete" style="width:60px;"/>
     </form:form>
     </td>
     </tr>
     </table>
     </body>
    </html>
    
  5. pada folder firstProgram/WebContent/WEB-INF/pages buat file mahasiswa_search.jsp
     <!DOCTYPE html PUBLIC
     "-//W3C//DTD XHTML 1.1 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <html>
     <head>
     <title>Episode 5</title>
     <link href="<c:url value="/css/style.css"/>" rel="stylesheet" type="text/css" />
     </head>
     <body>
     <a href="<c:url value="/mahasiswa/all.asik" />">Show All</a>
     ---
     <a href="<c:url value="/mahasiswa/add.asik" />">Add New</a>
     ---
     <a href="<c:url value="/mahasiswa/search.asik" />">Search</a>
    
     <h1>Please Input:</h1>
     <form:form>
     <div>
     <label for="nim">NIM</label>
     <input type="text" id="nim" name="nim" value="${mahasiswa.nim}"/>
     </div>
     <div>
     <label>&nbsp;</label>
     <input type="submit" value="Search"/>
     <input type="reset" value="Cancel"/>
     </div>
     </form:form>
    
     <br />
     <br />
     <br />
    
     <table width="500" border="1" cellpadding="2" cellspacing="2">
     <tr>
     <th width="30%">NIM</th>
     <th width="50%">Nama</th>
     <th width="10%">Umur</th>
     <th width="20%" colspan="2">&nbsp;</th>
     </tr>
     <tr>
     <td>nim</td>
     <td>nama</td>
     <td>umur</td>
     <td>
     <form:form action="edit.asik">
     <input type="hidden" id="nim" name="nim" value="nim"/>
     <input type="hidden" id="nama" name="nama" value="nama"/>
     <input type="hidden" id="umur" name="umur" value="umur"/>
     <input type="submit" value="Edit" style="width:60px;"/>
     </form:form>
     </td>
     <td>
     <form:form action="delete.asik">
     <input type="hidden" id="nim" name="nim" value="nim"/>
     <input type="submit" value="Delete" style="width:60px;"/>
     </form:form>
     </td>
     </tr>
     </table>
    
     </body>
    </html>
    
  6. Pada package com.firstProgram.web buat Class MahasiswaAllController.java
     package com.firstProgram.web;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.firstProgram.dao.SimpleDao;
    
    @Controller
    public class MahasiswaAllController {
    
     private SimpleDao simpleDao;
     @Autowired
     public void setSimpleDao(SimpleDao simpleDao) {
     this.simpleDao = simpleDao;
     }
    
     @RequestMapping (value="/mahasiswa/all.asik", method=RequestMethod.GET)
     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
    
     Map model = new HashMap();
    
     return new ModelAndView("mahasiswa/all", model);
     }
    
    }
    
    
  7. Pada package com.firstProgram.web buat Class MahasiswaAddController.java
    package com.firstProgram.web;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.firstProgram.dao.SimpleDao;
    import com.firstProgram.model.Mahasiswa;
    
    @Controller
    public class MahasiswaAddController {
    
     private SimpleDao simpleDao;
     @Autowired
     public void setSimpleDao(SimpleDao simpleDao) {
     this.simpleDao = simpleDao;
     }
    
     @RequestMapping (value="/mahasiswa/add.asik", method=RequestMethod.GET)
     public ModelAndView addNew(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
    
     Map model = new HashMap();
    
     return new ModelAndView("mahasiswa/add", model);
     }
    
     @RequestMapping (value="/mahasiswa/add.asik", method=RequestMethod.POST)
     public ModelAndView saveNew(@RequestParam("nim")String nim
     ,@RequestParam("nama")String nama
     ,@RequestParam("umur")Integer umur
     ,HttpServletRequest request
     ,HttpServletResponse response)
     throws ServletException, IOException {
    
     Map model = new HashMap();
    
     Mahasiswa mahasiswa = new Mahasiswa();
     mahasiswa.setNama(nama);
     mahasiswa.setNim(nim);
     mahasiswa.setUmur(umur);
    
     return new ModelAndView("mahasiswa/add", model);
     }
    }
    
    
  8. Pada package com.firstProgram.web buat Class MahasiswaEditController.java
     package com.firstProgram.web;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.firstProgram.dao.SimpleDao;
    import com.firstProgram.model.Mahasiswa;
    
    @Controller
    public class MahasiswaEditController {
    
     private SimpleDao simpleDao;
     @Autowired
     public void setSimpleDao(SimpleDao simpleDao) {
     this.simpleDao = simpleDao;
     }
    
     @RequestMapping (value="/mahasiswa/edit.asik", method=RequestMethod.POST)
     public ModelAndView saveNew(@RequestParam(value="nim", required=false)String nim
     ,@RequestParam(value="nama", required=false)String nama
     ,@RequestParam(value="umur", required=false)Integer umur
     ,HttpServletRequest request
     ,HttpServletResponse response)
     throws ServletException, IOException {
    
     Map model = new HashMap();
    
     if(nama == null){
     nama = "";
     }
     if(umur == null){
     umur = 0;
     }
    
     Mahasiswa mahasiswa = new Mahasiswa();
     mahasiswa.setNama(nama);
     mahasiswa.setNim(nim);
     mahasiswa.setUmur(umur);
    
     return new ModelAndView("mahasiswa/edit", model);
     }
    }
    
    
  9. Pada package com.firstProgram.web buat Class MahasiswaSearchController.java
    package com.firstProgram.web;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.firstProgram.dao.SimpleDao;
    import com.firstProgram.model.Mahasiswa;
    
    @Controller
    public class MahasiswaSearchController {
    
     private SimpleDao simpleDao;
     @Autowired
     public void setSimpleDao(SimpleDao simpleDao) {
     this.simpleDao = simpleDao;
     }
    
     @RequestMapping (value="/mahasiswa/search.asik", method=RequestMethod.GET)
     public ModelAndView search(HttpServletRequest request
     ,HttpServletResponse response)
     throws ServletException, IOException {
    
     Map model = new HashMap();
    
     return new ModelAndView("mahasiswa/search", model);
     }
    
     @RequestMapping (value="/mahasiswa/search.asik", method=RequestMethod.POST)
     public ModelAndView saveNew(@RequestParam(value="nim", required=false)String nim
     ,HttpServletRequest request
     ,HttpServletResponse response)
     throws ServletException, IOException {
    
     Map model = new HashMap();
    
     return new ModelAndView("mahasiswa/search", model);
     }
    }
    
    
  10. Edit file index.jsp
     <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <%-- Redirected because we can't set the welcome page to a virtual URL. --%>
    <c:redirect url="/mahasiswa/all.asik"/>
    
  11. Edit file view.properties
    pages/hello.url = /WEB-INF/pages/hello.jsp
    pages/hello.class= org.springframework.web.servlet.view.JstlView
    
    pages/excell.url = /WEB-INF/pages/excell.jsp
    pages/excell.class= org.springframework.web.servlet.view.JstlView
    
    pages/excellReport.class = com.firstProgram.report.FirstProgramExcell
    
    mahasiswa/all.url = /WEB-INF/pages/mahasiswa_show.jsp
    mahasiswa/all.class = org.springframework.web.servlet.view.JstlView
    
    mahasiswa/add.url = /WEB-INF/pages/mahasiswa_new.jsp
    mahasiswa/add.class = org.springframework.web.servlet.view.JstlView
    
    mahasiswa/edit.url = /WEB-INF/pages/mahasiswa_edit.jsp
    mahasiswa/edit.class = org.springframework.web.servlet.view.JstlView
    
    mahasiswa/search.url = /WEB-INF/pages/mahasiswa_search.jsp
    mahasiswa/search.class = org.springframework.web.servlet.view.JstlView
    
    
  12. Coba jalankan aplikasi anda. http://localhost:8080/firstProgram . Pastikan flow data dari tiap jsp nya sudah benar (jika submit makan masuk ke dalam parameter yang dimaksud.

PART 2 – Membangun model Dao

Database yang saya gunakan adalah MS SQL Server 2000. Coba anda perhatikan 3 library yang dibutuhkan diatas:

  1. jtds-1.2.4.jar – ini adalah driver yang dibutuhkan untuk koneksi ke database MS SQL Server
  2. ibatis-sqlmap-2.3.4.726.jar – ini adalah library iBatis yang akan digunakan untuk mapping database ke class java.
  3. c3p0-0.9.1.2.jar – ini adalah library yang digunakan untuk connection pooling. Dengan menggunakan connection pooling artinya kita tidak perlu create connection ke database setiap kali transaksi. Pada aplikasi Web, umumnya koneksi ke database hanya di create pada saat server Start Up saja.

Anggap database yang saya gunakan:

  • Server:     localhost
  • Database:   testing

Pertama create table pada database:


CREATE TABLE [dbo].[MAHASISWA_2011] (

[NIM] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,

[NAMA] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,

[UMUR] [int] NULL
 ) ON [PRIMARY]

Silahkan ikuti langkah2 berikut:

  1. Download library-library yang saya sebutkan pada awal artikel lalu diinclude ke dalam project firstProgram
  2. Edit web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.4"
     xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    
     <display-name>firstProgram</display-name>
    
     <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>/WEB-INF/applicationContext*.xml</param-value>
     </context-param>
     <listener>
     <listener-class>
     org.springframework.web.context.ContextLoaderListener
     </listener-class>
     </listener>
    
     <filter>
     <filter-name>LoggerContextFilter</filter-name>
     <filter-class>ch.qos.logback.classic.selector.servlet.LoggerContextFilter</filter-class>
     </filter>
     <filter-mapping>
     <filter-name>LoggerContextFilter</filter-name>
     <url-pattern>/*</url-pattern>
     </filter-mapping>
    
     <servlet>
     <servlet-name>tjong</servlet-name>
     <servlet-class>
     org.springframework.web.servlet.DispatcherServlet
     </servlet-class>
     <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
     <servlet-name>tjong</servlet-name>
     <url-pattern>*.asik</url-pattern>
     </servlet-mapping>
     <servlet-mapping>
     <servlet-name>tjong</servlet-name>
     <url-pattern>*.xls</url-pattern>
     </servlet-mapping>
    
     <welcome-file-list>
     <welcome-file>index.jsp</welcome-file>
     </welcome-file-list>
    </web-app>
    
  3. Pada folder firstProgram/WebContent/WEB-INF create file applicationContext-ibatis.xml
    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:context="http://www.springframework.org/schema/context"
     xmlns:jee="http://www.springframework.org/schema/jee"
     xmlns:tx="http://www.springframework.org/schema/tx"
     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
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
     http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    
     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="exampleDataSource"/>
     </bean>
    
     <context:property-placeholder location="classpath:jdbc.properties"/>
    
     <bean id="sqlMapClient"  class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
     <property name="configLocation" value="classpath:sql-map-config.xml"/>
     </bean>
    
     <bean id="exampleDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
     <property name="driverClass" value="${jdbc.driverClassName}"/>
     <property name="jdbcUrl" value="${jdbc.url}"/>
     <property name="user" value="${jdbc.username}"/>
     <property name="password" value="${jdbc.password}"/>
     </bean>
    
     <bean id="simpleDao" class="com.firstProgram.dao.SimpleDaoImpl">
     <property name="dataSource" ref="exampleDataSource"/>
     <property name="sqlMapClient" ref="sqlMapClient"/>
     </bean>
    
    </beans>
    
  4. Pada folder firstProgram/resources, create file sql-map-config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
     "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
    
    <sqlMapConfig>
     <sqlMap resource="sqlmaps/simple.xml" />
    </sqlMapConfig>
    
  5. Pada folder firstProgram/resources, create file jdbc.properties
    jdbc.driverClassName=net.sourceforge.jtds.jdbc.Driver
    jdbc.url=jdbc:jtds:sqlserver://localhost/testing
    jdbc.username=admin
    jdbc.password=andreas
    
  6. Pada folder firstProgram/resources, create folder sqlmaps
  7. Pada folder firstProgram/resources/sqlmaps, create file simple.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="simple">
    
     <typeAlias alias="Mahasiswa" type="com.firstProgram.model.Mahasiswa"/>
     <resultMap id="Mahasiswa">
     <result property="nim" column="nim"/>
     <result property="nama" column="nama"/>
     <result property="umur" column="umur"/>
     </resultMap>
    
     <select id="getAllMahasiswa" resultMap="Mahasiswa">
     SELECT nim, nama, umur
     FROM MAHASISWA_2011
     ORDER BY nim
     </select>
    
     <select id="getMahasiswa" resultMap="Mahasiswa" parameterClass="java.util.HashMap">
     SELECT nim, nama, umur
     FROM MAHASISWA_2011
     WHERE NIM = #nim#
     ORDER BY nim
     </select>
    
     <delete id="deleteMahasiswa" parameterClass="java.util.HashMap">
     DELETE FROM MAHASISWA_2011
     WHERE NIM = #nim#
     </delete>
    
     <update id="updateMahasiswa" parameterClass="java.util.HashMap">
     UPDATE MAHASISWA_2011
     SET NIM = #nim#
     , NAMA = #nama#
     , UMUR = #umur#
     WHERE NIM = #nim#
     </update>
    
     <insert id="addMahasiswa" parameterClass="java.util.HashMap">
     INSERT into MAHASISWA_2011(NIM, NAMA, UMUR)
     VALUES(#nim#,#nama#,#umur#)
     </insert>
    
    </sqlMap>
    
  8. Create package com.firstProgram.dao
  9. Pada package com.firstProgram.dao, create file SimpleDao.java
    package com.firstProgram.dao;
    
    import java.util.List;
    
    import com.firstProgram.model.Mahasiswa;
    
    public interface SimpleDao {
     public Mahasiswa getMahasiswa(String nim);
     public List<Mahasiswa> getAllMahasiswa();
    
     public void insertMahasiswa(Mahasiswa mahasiswa);
     public void updateMahasiswa(Mahasiswa mahasiswa);
     public void deleteMahasiswa(Mahasiswa mahasiswa);
    }
    
    
  10. Pada package com.firstProgram.dao, create file SimpleDaoImpl.java
    package com.firstProgram.dao;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
    
    import com.firstProgram.model.Mahasiswa;
    
    public class SimpleDaoImpl extends SqlMapClientDaoSupport implements SimpleDao {
    
     public void deleteMahasiswa(Mahasiswa mahasiswa) {
     Map input = new HashMap();
     input.put("nim", mahasiswa.getNim());
    
     getSqlMapClientTemplate().delete("deleteMahasiswa", input);
     }
    
     public List<Mahasiswa> getAllMahasiswa() {
     return (List<Mahasiswa>) getSqlMapClientTemplate().queryForList("getAllMahasiswa");
     }
    
     public Mahasiswa getMahasiswa(String nim) {
     Map input = new HashMap();
     input.put("nim", nim);
    
     return (Mahasiswa) getSqlMapClientTemplate().queryForObject("getMahasiswa", input);
     }
    
     public void updateMahasiswa(Mahasiswa mahasiswa) {
     Map input = new HashMap();
     input.put("nim", mahasiswa.getNim());
     input.put("nama", mahasiswa.getNama());
     input.put("umur", mahasiswa.getUmur());
    
     getSqlMapClientTemplate().update("updateMahasiswa", input);
     }
    
     public void insertMahasiswa(Mahasiswa mahasiswa) {
     Map input = new HashMap();
     input.put("nim", mahasiswa.getNim());
     input.put("nama", mahasiswa.getNama());
     input.put("umur", mahasiswa.getUmur());
    
     getSqlMapClientTemplate().insert("addMahasiswa", input);
     }
    }
    
    
  11. Pada package com.firstProgram.web, edit file MahasiswaAddController.java
    package com.firstProgram.web;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.firstProgram.dao.SimpleDao;
    import com.firstProgram.model.Mahasiswa;
    
    @Controller
    public class MahasiswaAddController {
    
     private SimpleDao simpleDao;
     @Autowired
     public void setSimpleDao(SimpleDao simpleDao) {
     this.simpleDao = simpleDao;
     }
    
     @RequestMapping (value="/mahasiswa/add.asik", method=RequestMethod.GET)
     public ModelAndView addNew(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
    
     Map model = new HashMap();
    
     return new ModelAndView("mahasiswa/add", model);
     }
    
     @RequestMapping (value="/mahasiswa/add.asik", method=RequestMethod.POST)
     public ModelAndView saveNew(@RequestParam("nim")String nim
     ,@RequestParam("nama")String nama
     ,@RequestParam("umur")Integer umur
     ,HttpServletRequest request
     ,HttpServletResponse response)
     throws ServletException, IOException {
    
     Map model = new HashMap();
    
     Mahasiswa mahasiswa = new Mahasiswa();
     mahasiswa.setNama(nama);
     mahasiswa.setNim(nim);
     mahasiswa.setUmur(umur);
    
     simpleDao.insertMahasiswa(mahasiswa);
    
     return new ModelAndView("mahasiswa/add", model);
     }
    }
    
    
  12. Pada package com.firstProgram.web, edit file MahasiswaAllController.java
    package com.firstProgram.web;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.firstProgram.dao.SimpleDao;
    
    @Controller
    public class MahasiswaAllController {
    
     private SimpleDao simpleDao;
     @Autowired
     public void setSimpleDao(SimpleDao simpleDao) {
     this.simpleDao = simpleDao;
     }
    
     @RequestMapping (value="/mahasiswa/all.asik", method=RequestMethod.GET)
     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
    
     Map model = new HashMap();
     model.put("mahasiswas", simpleDao.getAllMahasiswa());
    
     return new ModelAndView("mahasiswa/all", model);
     }
    
    }
    
    
  13. Pada package com.firstProgram.web, edit file MahasiswaEditController.java
    package com.firstProgram.web;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.firstProgram.dao.SimpleDao;
    import com.firstProgram.model.Mahasiswa;
    
    @Controller
    public class MahasiswaEditController {
    
     private SimpleDao simpleDao;
     @Autowired
     public void setSimpleDao(SimpleDao simpleDao) {
     this.simpleDao = simpleDao;
     }
    
     @RequestMapping (value="/mahasiswa/edit.asik", method=RequestMethod.POST)
     public ModelAndView saveNew(@RequestParam(value="nim", required=false)String nim
     ,@RequestParam(value="nama", required=false)String nama
     ,@RequestParam(value="umur", required=false)Integer umur
     ,HttpServletRequest request
     ,HttpServletResponse response)
     throws ServletException, IOException {
    
     Map model = new HashMap();
    
     if(nama == null){
     nama = "";
     }
     if(umur == null){
     umur = 0;
     }
    
     Mahasiswa mahasiswa = new Mahasiswa();
     mahasiswa.setNama(nama);
     mahasiswa.setNim(nim);
     mahasiswa.setUmur(umur);
    
     simpleDao.updateMahasiswa(mahasiswa);
     mahasiswa = simpleDao.getMahasiswa(nim);
     model.put("mahasiswa", mahasiswa);
    
     model.put("mahasiswas", simpleDao.getAllMahasiswa());
    
     return new ModelAndView("mahasiswa/edit", model);
     }
    }
    
    
  14. Pada package com.firstProgram.web, edit file MahasiswaSearchController.java
    package com.firstProgram.web;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.firstProgram.dao.SimpleDao;
    import com.firstProgram.model.Mahasiswa;
    
    @Controller
    public class MahasiswaSearchController {
    
     private SimpleDao simpleDao;
     @Autowired
     public void setSimpleDao(SimpleDao simpleDao) {
     this.simpleDao = simpleDao;
     }
    
     @RequestMapping (value="/mahasiswa/search.asik", method=RequestMethod.GET)
     public ModelAndView search(HttpServletRequest request
     ,HttpServletResponse response)
     throws ServletException, IOException {
    
     Map model = new HashMap();
    
     return new ModelAndView("mahasiswa/search", model);
     }
    
     @RequestMapping (value="/mahasiswa/search.asik", method=RequestMethod.POST)
     public ModelAndView saveNew(@RequestParam(value="nim", required=false)String nim
     ,HttpServletRequest request
     ,HttpServletResponse response)
     throws ServletException, IOException {
    
     Map model = new HashMap();
    
     Mahasiswa mahasiswa = new Mahasiswa();
     mahasiswa = simpleDao.getMahasiswa(nim);
     model.put("mahasiswa", mahasiswa);
    
     return new ModelAndView("mahasiswa/search", model);
     }
    }
    
    
  15. Edit file mahasiswa_edit.jsp
    <!DOCTYPE html PUBLIC
     "-//W3C//DTD XHTML 1.1 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <html>
     <head>
     <title>Episode 5</title>
     <link href="<c:url value="/css/style.css"/>" rel="stylesheet" type="text/css" />
     </head>
     <body>
     <a href="<c:url value="/mahasiswa/all.asik" />">Show All</a>
     ---
     <a href="<c:url value="/mahasiswa/add.asik" />">Add New</a>
     ---
     <a href="<c:url value="/mahasiswa/search.asik" />">Search</a>
    
     <h1>Please Input:</h1>
     <form:form>
     <div>
     <label for="nim">NIM</label>
     <input type="text" id="nim" name="nim" value="${mahasiswa.nim}" READONLY="TRUE"/>
     </div>
     <div>
     <label for="nama">Nama</label>
     <input type="text" id="nama" name="nama" value="${mahasiswa.nama}"/>
     </div>
     <div>
     <label for="umur">Umur</label>
     <input type="text" id="umur" name="umur" value="${mahasiswa.umur}"/>
     </div>
     <div>
     <label>&nbsp;</label>
     <input type="submit" value="Update"/>
     <input type="reset" value="Cancel"/>
     </div>
     </form:form>
    
     <br />
     <br />
     <br />
     <table width="500" border="1" cellpadding="2" cellspacing="2">
     <tr>
     <th width="30%">NIM</th>
     <th width="50%">Nama</th>
     <th width="10%">Umur</th>
     <th width="20%" colspan="2">&nbsp;</th>
     </tr>
    
     <c:forEach items="${mahasiswas}" var="mahasiswa" varStatus="status">
     <c:if test="${status.index % 2 == 0}">
     <tr>
     </c:if>
     <c:if test="${status.index % 2 == 1}">
     <tr>
     </c:if>
     <td>${mahasiswa.nim}</td>
     <td>${mahasiswa.nama}</td>
     <td>${mahasiswa.umur}</td>
     <td>
     <form:form action="edit.asik">
     <input type="hidden" id="nim" name="nim" value="${mahasiswa.nim}"/>
     <input type="hidden" id="nama" name="nama" value="${mahasiswa.nama}"/>
     <input type="hidden" id="umur" name="umur" value="${mahasiswa.umur}"/>
     <input type="submit" value="Edit" style="width:60px;"/>
     </form:form>
     </td>
     <td>
     <form:form action="delete.asik">
     <input type="hidden" id="nim" name="nim" value="${mahasiswa.nim}"/>
     <input type="submit" value="Delete" style="width:60px;"/>
     </form:form>
     </td>
     </tr>
     </c:forEach>
     </table>
     </body>
    </html>
    
  16. Edit file mahasiswa_new.jsp
    <!DOCTYPE html PUBLIC
     "-//W3C//DTD XHTML 1.1 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <html>
     <head>
     <title>Episode 5</title>
     <link href="<c:url value="/css/style.css"/>" rel="stylesheet" type="text/css" />
     </head>
     <body>
     <a href="<c:url value="/mahasiswa/all.asik" />">Show All</a>
     ---
     <a href="<c:url value="/mahasiswa/add.asik" />">Add New</a>
     ---
     <a href="<c:url value="/mahasiswa/search.asik" />">Search</a>
    
     <h1>Please Input:</h1>
     <form:form>
     <div>
     <label for="nim">NIM</label>
     <input type="text" id="nim" name="nim" value="${mahasiswa.nim}"/>
     </div>
     <div>
     <label for="nama">Nama</label>
     <input type="text" id="nama" name="nama" value="${mahasiswa.nama}"/>
     </div>
     <div>
     <label for="umur">Age</label>
     <input type="text" id="umur" name="umur" value="${mahasiswa.umur}"/>
     </div>
     <div>
     <label>&nbsp;</label>
     <input type="submit" value="Save"/>
     <input type="reset" value="Cancel"/>
     </div>
     </form:form>
    
     <br />
     <br />
     <br />
     <table width="500" border="1" cellpadding="2" cellspacing="2">
     <tr>
     <th width="30%">NIM</th>
     <th width="50%">Nama</th>
     <th width="10%">Umur</th>
     <th width="20%" colspan="2">&nbsp;</th>
     </tr>
    
     <c:forEach items="${mahasiswas}" var="mahasiswa" varStatus="status">
     <c:if test="${status.index % 2 == 0}">
     <tr>
     </c:if>
     <c:if test="${status.index % 2 == 1}">
     <tr>
     </c:if>
     <td>${mahasiswa.nim}</td>
     <td>${mahasiswa.nama}</td>
     <td>${mahasiswa.umur}</td>
     <td>
     <form:form action="edit.asik">
     <input type="hidden" id="nim" name="nim" value="${mahasiswa.nim}"/>
     <input type="hidden" id="nama" name="nama" value="${mahasiswa.nama}"/>
     <input type="hidden" id="umur" name="umur" value="${mahasiswa.umur}"/>
     <input type="submit" value="Edit" style="width:60px;"/>
     </form:form>
     </td>
     <td>
     <form:form action="delete.asik">
     <input type="hidden" id="nim" name="nim" value="${mahasiswa.nim}"/>
     <input type="submit" value="Delete" style="width:60px;"/>
     </form:form>
     </td>
     </tr>
     </c:forEach>
     </table>
     </body>
    </html>
    
  17. Edit file mahasiswa_search.jsp
    <!DOCTYPE html PUBLIC
     "-//W3C//DTD XHTML 1.1 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <html>
     <head>
     <title>Episode 5</title>
     <link href="<c:url value="/css/style.css"/>" rel="stylesheet" type="text/css" />
     </head>
     <body>
     <a href="<c:url value="/mahasiswa/all.asik" />">Show All</a>
     ---
     <a href="<c:url value="/mahasiswa/add.asik" />">Add New</a>
     ---
     <a href="<c:url value="/mahasiswa/search.asik" />">Search</a>
    
     <h1>Please Input:</h1>
     <form:form>
     <div>
     <label for="nim">NIM</label>
     <input type="text" id="nim" name="nim" value="${mahasiswa.nim}"/>
     </div>
     <div>
     <label>&nbsp;</label>
     <input type="submit" value="Search"/>
     <input type="reset" value="Cancel"/>
     </div>
     </form:form>
    
     <br />
     <br />
     <br />
    
     <c:if test = "${!(empty mahasiswa)}">
     <table width="500" border="1" cellpadding="2" cellspacing="2">
     <tr>
     <th width="30%">NIM</th>
     <th width="50%">Nama</th>
     <th width="10%">Umur</th>
     <th width="20%" colspan="2">&nbsp;</th>
     </tr>
     <tr>
     <td>${mahasiswa.nim}</td>
     <td>${mahasiswa.nama}</td>
     <td>${mahasiswa.umur}</td>
     <td>
     <form:form action="edit.asik">
     <input type="hidden" id="nim" name="nim" value="${mahasiswa.nim}"/>
     <input type="hidden" id="nama" name="nama" value="${mahasiswa.nama}"/>
     <input type="hidden" id="umur" name="umur" value="${mahasiswa.umur}"/>
     <input type="submit" value="Edit" style="width:60px;"/>
     </form:form>
     </td>
     <td>
     <form:form action="delete.asik">
     <input type="hidden" id="nim" name="nim" value="${mahasiswa.nim}"/>
     <input type="submit" value="Delete" style="width:60px;"/>
     </form:form>
     </td>
     </tr>
     </table>
     </c:if>
     </body>
    </html>
    
  18. Edit file mahasiswa_show.jsp
    <!DOCTYPE html PUBLIC
     "-//W3C//DTD XHTML 1.1 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <html>
     <head>
     <title>Episode 5</title>
     <link href="<c:url value="/css/style.css"/>" rel="stylesheet" type="text/css" />
     </head>
     <body>
     <a href="<c:url value="/mahasiswa/all.asik" />">Show All</a>
     ---
     <a href="<c:url value="/mahasiswa/add.asik" />">Add New</a>
     ---
     <a href="<c:url value="/mahasiswa/search.asik" />">Search</a>
    
     <br />
     <br />
     <br />
     <table width="500" border="1" cellpadding="2" cellspacing="2">
     <tr>
     <th width="30%">NIM</th>
     <th width="50%">Nama</th>
     <th width="10%">Umur</th>
     <th width="20%" colspan="2">&nbsp;</th>
     </tr>
    
     <c:forEach items="${mahasiswas}" var="mahasiswa" varStatus="status">
     <c:if test="${status.index % 2 == 0}">
     <tr>
     </c:if>
     <c:if test="${status.index % 2 == 1}">
     <tr>
     </c:if>
     <td>${mahasiswa.nim}</td>
     <td>${mahasiswa.nama}</td>
     <td>${mahasiswa.umur}</td>
     <td>
     <form:form action="edit.asik">
     <input type="hidden" id="nim" name="nim" value="${mahasiswa.nim}"/>
     <input type="hidden" id="nama" name="nama" value="${mahasiswa.nama}"/>
     <input type="hidden" id="umur" name="umur" value="${mahasiswa.umur}"/>
     <input type="submit" value="Edit" style="width:60px;"/>
     </form:form>
     </td>
     <td>
     <form:form action="delete.asik">
     <input type="hidden" id="nim" name="nim" value="${mahasiswa.nim}"/>
     <input type="submit" value="Delete" style="width:60px;"/>
     </form:form>
     </td>
     </tr>
     </c:forEach>
     </table>
     </body>
    </html>
    
  19. Silahkan testing aplikasi anda, http://localhost:8080/firstProgram

Kira-kira result nya seperti ini:

26 thoughts on “Spring Web MVC – Simple CRUD with iBatis (Episode 5)

  1. artikelnya bagus..saya coba langkah demi langkah..tetapi error ketika di run.. saya pake netbean dgn glasfish sbg servernya.. menurut saya errornya itu karena salah letak lokasi filenya..
    errornya : Error creating bean with name ‘transactionManager’ defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.IllegalStateException: No bean class specified on bean definition
    beberapa file yg saya masih bingung letaknya :
    – applicationContext-ibatis.xml,
    – sql-map-config.xml,jdbc.properties,
    – simple.xml,
    – index.jsp,
    – view.properties
    karena mungkin struktur lokasinya antara eclipse dengan netbean berbeda..
    mohon tanggapannya

    • Hi andi,
      Ini letak file2 yang ditanyakan:
      – applicationContext-ibatis.xml –> di folder WEB-INF
      – sql-map-config.xml,jdbc.properties –> di folder resource yang didefinisikan, coba liat artikel kedua yang ini https://andreastjong.wordpress.com/2010/12/20/spring-web-mvc-%E2%80%93-quick-start-with-eclipse-episode-2/
      – simple.xml –> ?? kayaknya nggak ada
      – index.jsp, –> di folder Web-Content
      – view.properties –> di folder resource, sama dengan sql-map-config.xml

      Tidak ada masalah menggunakan Netbeans dan Eclipse (seharusnya sih) walaupun saya juga blum coba.
      Kalau dari error log yang kamu kirim. Sepertinya di web.xml nya kamu ada salah ketik, kurang tanda bintang setelah “applicationContext” seharusnya “applicationContext*.xml”. Coba diperbaiki dulu dan dicoba lagi.

  2. Mas boleh minta aplikasi yang udah jadinya / tidak error ??
    kalo boleh tlg dikirimkan ke email sya mas.
    soalnya contoh yg mas jelaskan di artikel ini, waktu sya coba berkali” selalu muncul error ini :

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘transactionManager’ defined in ServletContext resource [/WEB-INF/applicationContext-ibatis.xml]: Instantiation of bean failed; nested exception is java.lang.IllegalStateException: No bean class specified on bean definition

    nb : saya menggunakan db oracle 10g express xe

  3. klo errornya seperti ini, cara ngatasinnya gmana ya??
    mohon bantuannya 🙂

    C:\Users\User\Documents\NetBeansProjects\Kelola\nbproject\build-impl.xml:738:
    The module has not been deployed.
    at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:210)
    at org.netbeans.modules.j2ee.ant.Deploy.execute(Deploy.java:106)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor82.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:390)
    at org.apache.tools.ant.Target.performTasks(Target.java:411)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
    at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:284)
    at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:539)
    at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153)

    • Trick untuk nge-trace error, cukup lihat line – 1 + line -2.
      Kalau dari stack trace error yang kamu kirim, ada masalah di File C:\Users\User\Documents\NetBeansProjects\Kelola\nbproject\build-impl.xml line number 738.
      Coba kamu check dulu, di line tersebut ada command apa yang buat project kamu jadi error.

  4. Pak andreas ini saya mencoba mengikuti source yang bapak postingkan ini, setelah saya coba running ternyta form/halaman web tidak terjadi apa-apa ketika tekan tombol “search” pada requestmapping “/mahasiswa/search.asik.
    apa ada yang kurang dari tag –> mahasiswa_search.jsp
    Please Input:
    // APA PADA LINE INI TIDAK DITAMBAHKAN LAGI TAg “action atau method = “post” ”

    NIM

     

    mohon penjelasannya,

    • By default tag form akan menggunakan method=”post” walaupun tidak di deklarasikan. Tapi boleh saja jika mau ditambahkan biar lebih yakin.

      Kalau tidak terjadi apa2. Coba check beberapa hal berikut:
      1. di file mahasiswa_search.jsp apakah sudah ditambahkan taglib c dan taglib form
      2. apakah file jstl-X.X.jar sudah ada di library?
      3. coba check di file MahasiswaSearchController.java apakah sudah sama seperti step no.14

  5. Pak andreas disini saya menggunakan eclipse indigo. saya sudah cek dari yang bapak maksudkan diatas, sudah ada semua.cuma pada point 3, ketika saya kopikan program bapak(step 14), disini ada tanda warning warna kuning, dan harus ditambahkan beberapa tag disana. berikut dibawah ini TAMBAHANNYA : (dan “@ autowired” tidak bisa digunakan disini pak)

    ….
    @Controller
    public class MahasiswaSearchController {

    @SuppressWarnings(“unused”) // INI TAMBAHANNYA
    private SimpleDao simpleDao;

    public void setSimpleDao(SimpleDao simpleDao) {
    this.simpleDao = simpleDao;
    }
    @SuppressWarnings({ “rawtypes”, “unchecked” }) // INI TAMBAHANNYA
    @RequestMapping (value=”/mahasiswa/search.asik”, method=RequestMethod.GET)
    public ModelAndView search(HttpServletRequest request
    ,HttpServletResponse response)
    throws ServletException, IOException {

    Map model = new HashMap();

    return new ModelAndView(“mahasiswa/search”, model);
    }

    @SuppressWarnings({ “rawtypes”, “unchecked” }) // INI TAMBAHANNYA
    @RequestMapping (value=”/mahasiswa/search.asik”, method=RequestMethod.POST)
    public ModelAndView saveNew(@RequestParam(value=”nim”, required=false)String nim
    ,HttpServletRequest request
    ,HttpServletResponse response)
    throws ServletException, IOException {

    Map model = new HashMap();

    return new ModelAndView(“mahasiswa/search”, model);
    }
    }
    mohon penjelasannya pak?
    thanks

    • Annotation itu adalah comment untuk bahasa mesin. Analoginya seperti ini:
      Kalau di code anda masukkan
      \\Yang ini di skip
      Nanti akan di skip pada saat di compile, tapi bisa dibaca oleh manusia kan.
      Sedangkan annotation itu digunakan untuk komunikasi dengan mesin, hi mesin yang ini autowired yah, yang ini surpress warning yah.

      Kalau @autowired nya tidak bisa digunakan, coba check ke application-context-ibatis.xml, step no.4. Apakah sudah ada bean untuk SimpleDao?

  6. Pak andreas, maaf ini ada satu lagi yang tertinggal mau saya tanyakan. untuk tag pada mahasiswa_search.jsp dan yang lainnya untuk “${mahasiswa.nim};${mahasiswa.nama};${mahasiswa.umur}” ini mengambil fungsi dari mana? apakah dari simple.xml :

    <!– –> //AWALNYA PAKE TAG INI TAPI ADA WARNING. JADI PAKE TAG DIATASNYA.

    …..

    NB: pake awalan “m” kecil ato “M” besar atas nama “{mahasiswa.nim}” ato “{Mahasiswa.nim}” apa berpengaruh?
    mohon pejelasannya.
    terima kasih pak.

    • Di step no.14, pada Class MahasiswaSearchController.java, line terakhir dideklarasikan untuk mengirimkan sebuah model mahasiswa ke dalam view kan?
      Nah object mahasiswa itu lah yang digunakan di file jsp. Hurus besar dan huruf kecilnya, tergantung dari kamu deklarasikan HashMap nya, menggunakan huruf besar atau huruf kecil. Mudah2 an lebih jelas.

  7. pak andreas, disini saya menemukan error,yang waktu itu diklik tidak terjadi apa2 (klik tombol (search)”mahasiswa_search.jsp”), sekarang waktu di klik muncul error seperti di bawah ini :

    HTTP Status 500 – Request processing failed; nested exception is com.ibatis.sqlmap.client.SqlMapException: There is no statement named getMahasiswa in this SqlMap.

    nb: sebelumnya saya terimaksih banyak atas situs yang bapak andreas postingkan ini. ini sangat membantu saya sekali dalam mempelajari program j2ee.

    • Berarti Permasalah yang di klik tidak terjadi apa-apa sudah solved ya?
      Sekarang ke permasalahan yang baru, begitu di klik muncul HTTP Error 500 dengan error code seperti diatas, nah kalau seperti ini, sudah bagus. Sudah selangkah lebih dekat mendekati berhasil.

      Terima Kasih atas error code nya, memang ada kesalahan di file simple.xml yang saya posting sebelumnya. Sebelumnya resultClass, koreksi nya menjadi resultMap. Sudah saya perbaiki di step no.7.

      Sekarang coba kamu check di file SimpleDaoImpl.java, di method getMahasiswa line 28. Dia memanggil query dengan id “getMahasiswa”, sekarang kamu coba check di file simple.xml, apakah ada query dengan id tersebut? Coba di check lagi penulisan nya, mungkin ada perbedaan huruf besar dan huruf kecil.

      nb: sama-sama.

  8. Akhirnya sudah berhasil pak andreas, 🙂

    terimkasih banyak. tapi disni saya menggunakan eclipse indigo, databse SQLserver 2008R2. dan berhasil juga.
    dan ini juga ada sedikit tambahan dari codingan pada “SimpleDaoImpl.java” perlu ditambahkan disni :


    getSqlMapClientTemplate().delete(“simple.deleteMahasiswa”, input); // DITAMBAHKAN KATA “simple.”
    ….
    begitu juga dengan yang lainnya pada “SimpleDaoImpl.java”.

    sekali lagi terimakasih pak 🙂

    • Ok Sip.

      Tambahan:
      1. Versi Eclipse Indigo atau versi eclipse lain nya, tidak ada pengaruh nya dengan code di atas.
      2. MS.SQL Server 2008 R2 atau versi MS.SQL Server lainnya –> akan tetap jalan, selama library jtds yang dipakai men-support versi database tersebut

      Semoga semakin tertarik belajar JAVA. 🙂

  9. org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘mahasiswaAllController’: Autowiring of methods failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.app.web.mahasiswa2.MahasiswaAllController.setSimpleDao(com.app.web.mahasiswa2.SimpleDao); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.app.web.mahasiswa2.SimpleDao] is defined: Unsatisfied dependency of type [interface com.app.web.mahasiswa2.SimpleDao]: expected at least 1 matching bean

    Dear Pak Andreas
    saya sudah mengikuti contoh tetapi tetap saja error

    kira2 error’a seperti di atas

    apa kah ada yg salah..??

  10. di aplicationContext-ibatis.xml sudah ada bean degna id SimpleDao, klo dilihat tutorial yg diatas class’a mengacu ke SimpleDaoImpl
    itu benar atau tidak?

    tapi saya sudah ganti ke class SimpleDao tetap saja errornya seperti diatas.

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 )

Google+ photo

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

Connecting to %s