lunes, 24 de agosto de 2009

Sencillo ejemplo de implementación del Framework IBatis en Capa de Persistencia

Como complemento al Post anterior aquí va un ejemplo de Base de datos, Java, Mysql, Open Source, Programación e IBatis para poder dar una idea de las diferentes opciones que hay en cuanto al manejo de Data Base.

Es un sistema de almacenamiento de formulas en una droguería. A continuacion creamos los DTO:

package com.serunix.model;
import java.util.List;


/**
* author hgroj@s
*
*/
public class Recipe {


private int recipeId;
private String patientName;
private List medicaments;
}

_______________________________________



package com.serunix.model;


/**
* @author hgroj@s
*
*/
public class Medicament {


private int medicamentId;
private String name;
private String description;
private Recipe recipe;
}


Luego creamos los Servicios:


package com.serunix.model.services;
import java.util.List;
import com.serunix.model.Recipe;


/**
* @author hgroj@s
*
*/
public interface RecipeDaoImpl {


List getAllRecipes();
Recipe getRecipeById(Integer id);
}

_______________________________________


package com.serunix.model.services;
import java.util.List;
import com.serunix.model.Medicament;


/**
* @author hgroj@s
*
*/
public interface MedicamentDaoImpl {


List getAllMedicaments();
Medicament getMedicamentById(Integer id);
int update(Medicament medicament);
Boolean insert(Medicament medicament);
int delete(Integer id);
}


Creamos los Los Daos:


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 hgroj@s
*
*/
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);
}
}

_______________________________________


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 hgroj@s
*
*/
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);
}
}



En seguida el mapeo XML



<?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>

_______________________________________


 <?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>
 

Y no olvidemos  el spring-context.xml

 
 <?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>



Por ultimo un Main de testeo, espero les sirva….


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 hgroj@s
*
*/
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");

}
}
}

Dejo el fuente del proyecto… FarmaciaIbatis. Este es el archivo sql de la DB el proyecto se creo en eclipse, pero si importan las librerias correspondientes y crean los todos los objetos seguro no tendran problemas con Netbeans,

No hay comentarios:

Publicar un comentario