Intégration de ibatis dans esup-mondossierweb

Nous allons voir comment utiliser ibatis au sein du projet esup-mondossierweb, en l’intégrant à Spring. Nous allons travailler sur un projet ‘esup-mondossierweb’ qui appelle la méthode ‘test’ d’un controller ‘MonController’ lorsque l’on clic sur un lien du type :

<h:commandLink id=”lientest” action=”#{MonController.test}”>
LienTest
</h:commandLink
>

Le but est qu’en cliquant sur ce lien, on puisse lister le contenu d’une table de la base de données. Pensez tout d’abord à importer les librairie utiles pour utiliser ibatis au sein de spring(ibatis-common-2.jar, ibatis-dao-2.jar, ibatis-sqlmap-2.jar). Voici maintenant comment il faut procéder :

Tout d’abord, il faut créer votre objet java, calqué sur la table que vous souhaitez afficher

package test.ibatis;

public class MonObjet {

private String cod_obj;
private String lib_obj;

public MonObjet() {
super();
}

public String getCod_obj() {
return cod_obj;
}

public void setCod_obj(String cod_obj) {
this.cod_ obj = cod_obj;
}

public String getLib_obj() {
return lib_ obj;
}

public void setLib_obj(String lib_ obj) {
this.lib_ obj = lib_ obj;
}

}

Ensuite nous allons créer les fichiers de configuration pour le mapping de ibatis. On créé tout d’abord le fichier ibatis.config.xml dans properties/dao/ibatis

<?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>
<settings useStatementNamespaces=”true”/>
<sqlMap resource=”properties/dao/ibatis/mapping/Objet.xml”/>
</sqlMapConfig>

A noter que la syntaxe change suvant la dtd choisie dans le DOCTYPE. En version 1, on écrit sql-map par exemple.

Puis, on créé le fichier Objet.xml dans properties/dao/ibatis/mapping

<?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 &raquo;
>
<sqlMap namespace= »Objet »><resultMap id= »resultobjet » class= »test.ibatis.Objet »>
<result property= »cod_obj » column= »cod_obj »/>
<result property= »lib_obj «  column= »lib_obj « />
</resultMap>

<select id= »getObjets » resultMap= »resultobjet »>
SELECT COD_OBJ as cod_obj, LIB_OBJ as lib_ obj FROM OBJET
</select>

</sqlMap>

On peut ensuite créer l’interface de notre service :

package test.ibatis;

import java.util.List;

public interface IBatisService {

public List getObjets();

}

Et la classe qui l’implémente :

package test.ibatis;

import java.util.List;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

public class IBatisServiceImpl extends SqlMapClientDaoSupport implements IBatisService{

public IBatisServiceImpl(){

super();

}

public List getObjets(){

return getSqlMapClientTemplate().queryForList(« Objet.getObjets »,null);

}

}

On peut ensuite configurer notre dao.xml pour qu’il intègre ibatis à String :

<?xml version= »1.0″ encoding= »UTF-8″ ?>

<beans

xmlns= »http://www.springframework.org/schema/beans &raquo;

xmlns:xsi= »http://www.w3.org/2001/XMLSchema-instance &raquo;

xsi:schemaLocation= »http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd &raquo;>

<bean id= »dataSource »

class= »org.springframework.jdbc.datasource.DriverManagerDataSource »>

<property name= »driverClassName »>

<value>nom du driver pour accéder à votre base de données ex: oracle.jdbc.driver.OracleDriver </value>

</property>

<property name= »url »>

<value>url pour accéder à votre base de données</value>

</property>

<property name= »username »>

<value>votre login</value>

</property>

<property name= »password »>

<value>votre password</value>

</property>

</bean>

<bean id= »service » class= »test.ibatis.IBatisServiceImpl »>

<property name= »dataSource »><ref local= »dataSource »/></property>

<property name= »sqlMapClientTemplate » ref= »sqlMapClientTemplate » />

</bean

<bean id= »sqlMapClientTemplate »

class= »org.springframework.orm.ibatis.SqlMapClientTemplate »>

<property name= »sqlMapClient » ref= »sqlMapClient » />

</bean>

 

<bean id= »sqlMapClient »

class= »org.springframework.orm.ibatis.SqlMapClientFactoryBean »>

<property name= »configLocation »

value= »/WEB-INF/classes/properties/dao/ibatis/ibatis.config.xml » />

<property name= »dataSource » ref= »dataSource » />

</bean>

<bean id= »transactionManager »

class= »org.springframework.jdbc.datasource.DataSourceTransactionManager »>

<property name= »dataSource »><ref local= »dataSource »/></property>

</bean>

<bean id= »databaseManagerStore »

class= »org.esupportail.commons.services.database.EmptyDatabaseManagerStoreImpl »>

<description>

This bean is the sore of database managers.

</description>

</bean>

<bean id= »daoService »

class= »org.esupportail.mondossierweb.dao.DaoServiceEmptyImpl »>

<description>

This bean is the DAO service, the interface used by the domain service to access

the database. It must implement interface org.esupportail.mondossierweb.dao.DaoService.

</description>

</bean>

</beans>

 

Il ne reste maintenant qu’a créer le controller qui va appeler la méthod getObjets du service. Il faut penser à injecter le service dans le controller. On ajoute donc dans properties/web/controllers.xml

<bean id= »MonController »

class= »org.esupportail.mondossierweb.web.controllers.MonController »

parent= »abstractContextAwareController »

scope= »session »>

<property name= »service » ref= »service »>

<description>Le service</description>

</property>

</bean>

Il suffit ensuite d’avoir l’attribut suivant dans le controller :

/**

* Le service.

*/

private IBatisServiceImpl service;

avec les getters et setters correspondant :

public IBatisServiceImpl getService() {

return service;

}

public void setService(IBatisServiceImpl service) {

this.service = service;

}

Et on peut enfin créer la méthode test qui sera appelée lors du clic sur le lien ‘lientest’

public String test() {

List<Objet> lobjets = (List) service.getObjets();

System.out.println(lobjets.size()+ » objets »);

for(Objet objet : lobjets){

System.out.println( » – « +objet.getCod_obj()+ » : « +objet.getLib_obj() );

}

//on retourne à la vue

return « navigationPage »;

}

Et voila, on peut maintenant lancer l’application pour tester. Il ne reste qu’à s’inspirer de cet exemple pour simplement effectuer des insert ou des update dans la base ou encore pour afficher le résultat de la requête dans la page html.

Publié dans iBATIS. Leave a Comment »

Laisser un commentaire