Tutorial de Ibatis
Lo primero, como bien dice la wikipedia ibatis es un marco de trabajo desarrollado por apache que se ocupa de la capa de persistencia, situándose entre la capa de negocio y la base de datos. Ibatis esta disponible para java .net y ruby on rails.
Ibatis cumple una función similar a la de hibernate, algunos desarrolladores consideran a ibatis una alternativa por su sencillez y por no presentar un lenguaje específico para consultas.
En la página web del proyecto ibatis enlace proyecto ibatis

Recordar que este ejemplo esta realizado en linux ubuntu pero que es totalmente compatible con windows.
Descargar la versión 2.3.0 o la versión 2.3.4 con las que se ha probado el ejemplo, una vez descargado y desempaquetado el proyecto dentro de la carpeta lib tenemos un fichero .jar con la versión correspondiente. Ese fichero debemos del importarlo el directorio lib de nuestro proyecto web dinámico de eclipse.
Partimos de la situación del ejemplo jdbc eclipse, nos habíamos descargado mysql, y el jar driver para jdbc creando la base de datos libros_jdbc, con una tabla llamada libros. En ese ejemplo creabamos un servlet que por método get mostraba un formulario para enviar después los datos por método post, insertar los datos y mostrar un listado de lo almacenado en la tabla.
Enlace al ejemplo anterior Conexión a bases de datos j2ee jdbc eclipse
Clase Bean Libro.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package conexion; public class Libro { private int id_libro; private String titulo_libro; private String autor_libro; private String tematica_libro; public int getId_libro() { return id_libro; } public void setId_libro(int id_libro) { this.id_libro = id_libro; } public String getTitulo_libro() { return titulo_libro; } public void setTitulo_libro(String titulo_libro) { this.titulo_libro = titulo_libro; } public String getAutor_libro() { return autor_libro; } public void setAutor_libro(String autor_libro) { this.autor_libro = autor_libro; } public String getTematica_libro() { return tematica_libro; } public void setTematica_libro(String tematica_libro) { this.tematica_libro = tematica_libro; } } |
Ficheros de configuración para ibatis son tres y los pondremos en un package ibatisMap

El fichero basedatos.java es el servlet del anterior ejemplo jdbc el utilizado para ibatis es BaseDatosIbatis.java
En el propio proyecto de apache ibatis tienen tutoriales indicando la funcionalidad de cada uno de los ficheros necesarios para ibatis
Creamos un fichero xml para el mapeo del bean Libro “Libro.xml”, este fichero contiene el conjunto de consultas que van a ser utilizadas para el bean asociado a la tabla libros
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?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="Libro"> <select id="getLibro" parameterClass="int" resultClass="conexion.Libro"> SELECT id as id_libro, titulo as titulo_libro, autor as autor_libro, tematica as tematica_libro FROM libros WHERE id = #value# </select> <insert id="introducirLibro" parameterClass="conexion.Libro"> INSERT INTO libros (id,titulo,autor,tematica) VALUES (#id_libro#,#titulo_libro#,#autor_libro#,#tematica_libro#) </insert> <select id="getLibros" resultClass="conexion.Libro"> SELECT id as id_libro, titulo as titulo_libro, autor as autor_libro, tematica as tematica_libro FROM libros </select> </sqlMap> |
fichero de propiedades para el ejemplo, sustituye a lo que se hacia en el anterior ejemplo jdbc al cargar el driver
1 2 3 4 | driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/libros_jdbc username=root password=root |
Fichero de configuración de Sql Map
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <properties resource="ibatisMap/sqlMapConfig.properties" /> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" /> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="${driver}"/> <property name="JDBC.ConnectionURL" value="${url}"/> <property name="JDBC.Username" value="${username}"/> <property name="JDBC.Password" value="${password}"/> </dataSource> </transactionManager> <sqlMap resource="ibatisMap/Libro.xml"/> </sqlMapConfig> |
Imagen de los jars utilizados
Creamos una clase dentro del package conexion con el nombre BaseDatosIbatis.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | package conexion; import java.io.IOException; import java.sql.SQLException; import java.io.Reader; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; import com.ibatis.common.resources.Resources; import java.io.PrintWriter; import java.util.List; import java.util.Iterator; /** * Servlet implementation class for Servlet: BaseDatosIbatis * */ public class BaseDatosIbatis extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { static final long serialVersionUID = 1L; private SqlMapClient sqlMap = null; /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#HttpServlet() */ public BaseDatosIbatis() { super(); } public void init() throws ServletException { super.init(); try { String recursos = "ibatisMap/SqlMapConfigLibro.xml"; Reader leer = Resources.getResourceAsReader(recursos); sqlMap = SqlMapClientBuilder.buildSqlMapClient(leer); } catch ( Exception e) { System.out.print("error mapeo: "+e.getMessage()); } } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //mostramos el listado con el método get response.setContentType("text/html"); //preparamos el objeto de salida PrintWriter salida = response.getWriter(); //creamos la salida salida.print("<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n"); salida.print("<html>\n"); salida.print("<head>\n"); salida.print("<link rel='stylesheet' type='text/css' href='css/estilo.css'/>\n"); salida.print("</head>\n"); salida.print("<body>\n"); salida.print("<div id='contenedor'>\n"); salida.print("<h2> Libros jdbc </h2>"); salida.print("<div id='imagen'>"); salida.print("<img src='imagenes/registro.png' title='carpeta'/>"); salida.print("</div>"); salida.print("<form action='BaseDatosIbatis' method='post'>\n<br/>"); salida.print("<label>Titulo</label>\n<br/>"); salida.print("<input type='text' name='titulo'/>\n<br/>"); salida.print("<label>Autor</label>\n<br/>"); salida.print("<input type='text' name='autor'/>\n<br/>"); salida.print("<label>Tematica</label>\n<br/>"); salida.print("<input type='text' name='tematica'/>\n<br/>"); salida.print("<input class='boton' type='submit' value='enviar'/>\n<br/>"); salida.print("</form>\n<br/>"); salida.print("<div id='pie'>"); salida.print("<p> www.railsymas.com </p>"); salida.print("</div>"); salida.print("</div>\n"); salida.print("</body>\n<br/>"); salida.print("</html>"); } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String titulo = request.getParameter("titulo"); String autor = request.getParameter("autor"); String tematica = request.getParameter("tematica"); response.setContentType("text/html"); PrintWriter salida = response.getWriter(); //creamos el objeto libro Libro libro = new Libro(); libro.setAutor_libro(autor); libro.setTematica_libro(tematica); libro.setTitulo_libro(titulo); libro.setId_libro(0); //insertamos en la base de datos el objeto libro try { //insertamos los datos recibidos de sqlMap.insert("introducirLibro", libro); //recuperamos los datos de la base de datos List <Libro> resultado = sqlMap.queryForList("getLibros"); //mostramos el resultado salida.print("<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n"); salida.print("<html>\n"); salida.print("<head><title>Mostramos los datos</title></head>\n"); salida.print("<link rel='stylesheet' type='text/css' href='css/estilo.css'/>\n"); salida.println("<body>"); salida.print("<div id='contenedor'>\n"); salida.print("<h2> Libros jdbc </h2>"); salida.println("<table id='tabla'>"); salida.println("<tr>"); salida.println("<th>titulo</th><th>autor</th><th>tematica</th>"); salida.println("</tr>"); Iterator <Libro> iterador = resultado.iterator(); while (iterador.hasNext()) { Libro auxLibro = (Libro) iterador.next(); salida.println("<tr>"); salida.println("<td class='impar'>"+auxLibro.getTitulo_libro()+"</td>"); salida.println("<td class='par'>"+auxLibro.getAutor_libro()+"</td>"); salida.println("<td class='impar'>"+auxLibro.getTematica_libro()+"</td>"); salida.println("</tr>"); } salida.println("</table>"); salida.print("<div id='pie'>"); salida.print("<p> www.railsymas.com </p>"); salida.print("</div>"); salida.print("</div>\n"); salida.println("</body>"); salida.println("</html>"); } catch (SQLException e) { System.out.print("error de consulta "+e.getMessage()); } } } |
