La verdad es que no sabía nada de este Ibatis (framework de persistencia de datos basado en archivos xml), si no te lo enseñan hay que aprender sólo para poderse dar una idea de las diferentes  opciones que hay en cuanto al manejo de la Data Base. Aquí les dejo un pequeño ejemplo de como sería la configuración de Ibatis con Spring y que esta en java, ya que también se puede hacer con Ruby. Ibatis tiene sus ventajas y desventajas, así que sólo queda probarlo.

1.- El ejemplo se basa en almacenar las recetas de una farmacia.

2.- Creamos los DTO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.serunix.model;
 
import java.util.List;
 
/**
 * @author serunix
 *
 */
public class Recipe {
 
	private int recipeId;
	private String patientName;
	private List<?> medicaments;	
}
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.serunix.model;
 
/**
 * @author serunix
 *
 */
public class Medicament  {
 
	private int medicamentId;
	private String name;
	private String description;
	private Recipe recipe;
}

2.- Los servicios

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.serunix.model.services;
 
import java.util.List;
 
import com.serunix.model.Recipe;
 
/**
 * @author serunix
 *
 */
public interface RecipeDaoImpl {
 
	List<?> getAllRecipes();
 
	Recipe getRecipeById(Integer id);
 
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.serunix.model.services;
 
import java.util.List;
 
import com.serunix.model.Medicament;
 
/**
 * @author serunix
 * 
 */
public interface MedicamentDaoImpl {
 
	List<?> getAllMedicaments();
 
	Medicament getMedicamentById(Integer id);
 
	int update(Medicament medicament);
 
	Boolean insert(Medicament medicament);
 
	int delete(Integer id);
}

3.- Los Daos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.serunix.model.daos;
 
import java.util.List;
 
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
 
import com.serunix.model.Recipe;
import com.serunix.model.services.RecipeDaoImpl;
/**
 * @author serunix
 *
 */
public class RecipeDao extends SqlMapClientDaoSupport implements RecipeDaoImpl {
 
 
	public List<?> getAllRecipes() {
		return (List<?>)getSqlMapClientTemplate().queryForList("Recipe.getAllRecipes", null);
	}
 
	public Recipe getRecipeById(Integer id) {		
	    return (Recipe)getSqlMapClientTemplate().queryForObject("Recipe.getRecipeById", id);	    
	 }
}
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
package com.serunix.model.daos;
 
import java.util.List;
 
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
 
import com.serunix.model.Medicament;
import com.serunix.model.services.MedicamentDaoImpl;
/**
 * @author serunix
 *
 */
public class MedicamentDao extends SqlMapClientDaoSupport implements MedicamentDaoImpl {
 
	 public List<?> getAllMedicaments() {
	        return (List<?>) getSqlMapClientTemplate().queryForList("getAllMedicaments", null);
	    }
	    public Medicament getMedicamentById(Integer id) {
	        return ((Medicament)getSqlMapClientTemplate().queryForObject("getMedicamentById", id));
	    }
	    public int update(Medicament medicament) {
	        return getSqlMapClientTemplate().update("update", medicament);
	    }
	    public Boolean insert(Medicament medicament) {
	        return (Boolean)getSqlMapClientTemplate().insert("insert", medicament);   
	    }
	    public int delete(Integer id) {
	        return (int)getSqlMapClientTemplate().delete("delete", id);
	    }
}

4.- Los mapeos.

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
<?xml version="1.0" encoding="UTF-8"?>
 
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
 
<sqlMap namespace="Medicament">
 
    <cacheModel id="recipeCache" type="MEMORY" readOnly="false" >
        <flushInterval hours="24"/>
    </cacheModel>
 
    <resultMap class="com.serunix.model.Medicament" id="medicamentsMap">
      <result property="medicamentId"
              column="medicamentId"/>
      <result property="name"
              column="name"/>  
      <result property="description"
              column="description"/> 
 
    </resultMap>
 
 
    <select id="findMedicaments"  parameterClass="java.lang.Integer" resultMap="medicamentsMap" cacheModel="recipeCache">
    	SELECT * FROM tcmedicaments  WHERE recipeId = #id#;
    </select>
 
</sqlMap>
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
<?xml version="1.0" encoding="UTF-8"?>
 
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
 
<sqlMap namespace="Recipe">
 
    <cacheModel id="recipeCache" type="MEMORY" readOnly="false" >
        <flushInterval hours="24"/>
    </cacheModel>
 
	<resultMap class="com.serunix.model.Recipe" id="recipeMap">
      <result property="recipeId"
              column="recipeId"/>
      <result property="patientName"
              column="patientName"/>  
      <result property="medicaments"
              column="recipeId" select="Medicament.findMedicaments" />                                
    </resultMap>
 
    <select id="getRecipeById" parameterClass="java.lang.Integer"  resultMap="recipeMap" cacheModel="recipeCache">
 
        SELECT * FROM trrecipes  WHERE recipeId = #id#;
 
    </select>    
 
</sqlMap>

5.- Y bueno lo más importante creo yo, el spring-context.xml

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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd">
 
<beans>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
        <property name="url"><value>jdbc:mysql://127.0.0.1/SU BASE</value></property>
        <property name="username"><value>SU USUARIO</value></property>
        <property name="password"><value>SU PASSWORD</value></property>
    </bean>
 
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="dataSource"><ref bean="dataSource"/></property>
        <property name="configLocation">
            <value>classpath:SqlMapConfig.xml</value>
        </property>
        <property name="useTransactionAwareDataSource">
            <value>true</value>
        </property>
    </bean>
 
    <bean id="recipeDao" class="com.serunix.model.daos.RecipeDao">
        <property name="sqlMapClient">
            <ref bean="sqlMapClient"/>
        </property>
    </bean>
</beans>

y bueno aquí les dejo mi clase main….

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
package test;
 
import java.util.Iterator;
 
import org.apache.log4j.Logger;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
import com.serunix.model.Medicament;
import com.serunix.model.Recipe;
import com.serunix.model.daos.RecipeDao;
 
/**
 * @author serunix
 *
 */
public class TestDaos {
	protected static Logger logger = Logger.getLogger(TestDaos.class);
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ClassPathXmlApplicationContext ctxt = new ClassPathXmlApplicationContext("spring-context.xml");
		RecipeDao repl = (RecipeDao) ctxt.getBean("recipeDao");
		Recipe recipe = (Recipe)repl.getRecipeById(1);
		Iterator<?> iteRecipe = recipe.getMedicaments().iterator();
		logger.info(" Recipe No. " + recipe.getRecipeId() + " \n");
		logger.info(" Patient Name: " + recipe.getPatientName() + " \n");
		while (iteRecipe.hasNext())
		{
			Medicament medicament = (Medicament)iteRecipe.next();
			logger.info(" ----- Medicaments ------------- \n");
			logger.info(medicament.getMedicamentId() + ".- Name: "+ medicament.getName() +" \n");
			logger.info( "\t Description: "+ medicament.getDescription() +" \n");
 
		}
 
	}
 
}

aquí les dejo el proyecto completo por si tienen algúna duda… PROYECTO TESTIBATIS
n

n
¿Qué framework de percistencia utilizas para la DB?
View Results

G2ZXWXZKCVA3



11 Comentarios en “Base de datos: Un ejemplo de Ibatis con Spring en java”

  1. Bitacoras.com | 22/12/2009 a las 18:11:37

    Información Bitacoras.com…

    Valora en Bitacoras.com: La verdad es que no sabía nada de este Ibatis (framework de persistencia de datos basado en archivos xml), si no te lo enseñan hay que aprender sólo para poderse dar una idea de las diferentes  opciones que hay en cuanto al m…..

  2. Ivan | 14/01/2010 a las 15:07:18

    Y si al ejecutar “getRecipeById” el campo medicamentId viene nulo, la aplicación se caería, al ejecutar el setter
    public void setMedicamentId (int medicamentId ) {
    this.medicamentId = medicamentId ;
    }
    porque el tipo “int” primitivo no soporta nulo.
    No debería declararse el campo medicamentId como Integer?

  3. sergio | 14/01/2010 a las 16:32:10

    Gracias por dejar un comentario…

    mmm tienes razón, la verdad es que debería ser un integer, en cuanto el campo… es una primary key así que no debería ser null, o tu crees que sip??? en que casos…???

    saludos

  4. Ivan | 15/01/2010 a las 08:11:22

    En el caso de primary key no. Pero en el resto de campos de la tabla que sean numéricos me parece que si.

  5. sergio | 16/01/2010 a las 07:53:07

    Ha claro, estoy de acuerdo pero, si los declaras como obligatorios no debería pasar eso, de lo contrarío tienes toda la razón.

  6. Alan | 19/01/2010 a las 17:24:03

    con que programa puedo abrir tu proyecto ya q el netbeans no me lo reconoce.. xfavor

  7. Alan | 19/01/2010 a las 17:29:51

    y la BD tambien, es q mejor aprendo con ejemplos, para analizar el codigo y aprender

  8. sergio | 20/01/2010 a las 07:46:57

    Gracias por dejar un comentario en serunix.com

    Creo que lo has podido abrir… jajajaj ok.. si quieres te mando la DB por email??… si tienes mas dudas me dices…

    saludos

  9. Alan | 21/01/2010 a las 12:53:46

    la verdad no lo he podido abrir aun y xfa si puedes me mandas la bd mi correo es alcaba@hotmail.com, como te comente anteriormente el netbeans no me lo reconoce

  10. sergio | 23/01/2010 a las 08:29:19

    Hola¡¡

    Disculpa la tardanza aquí tienes el link del archivo del sql de la DB mmm yo creé el ´proyecto con eclipse, pero si tu tienes Netbeans, píes debería reconocerlo ya que es un proyecto Java no es un proyecto Web. Si aún así nada de nada, crea un proyecto en Netbeans y ve creando la estructura a mano, es lo que se me ocurre de momento… si tienes más problemas me dices y yo lo reviso.

    saludos

  11. Emanuel | 19/07/2010 a las 16:44:37

    Muy buena info, Felicitaciones.

    Dejo más info en :

    http://emanuelpeg.blogspot.com/2010/06/myibatis.html

    Saludos!!

Dejar un comentario

http://www.wikio.es BlogESfera - Directorio de Blogs Hispanos blogarama - the blog directory Mi Ping en TotalPing.com
Internet blogs Programming Blogs - Blog Catalog Blog Directory Internet blogs Buzzear (ES) Publicidad por tu blog con Boosterblog directorio de blogs
Agregar Web - Directorio de webs Directorio webs Directorio Web
Anuncios Gratis Blog Directory Technology Blogs - Blog Rankings