# Java > Gnral Java > Persistance des donnes >  Utilisation d'IBATIS pour un debutant

## Kuuei

Bonjour,

Je dois faire une petite appli avec ce framework. Je n'ai encore jamais utilis de framework.
De quoi ai-je besoin ? (pour l'instant je dispose seulement d'eclipse et rien d'autre)
Faut-il du temps pour pouvoir comprendre et utiliser ce framework ?

merci

edit : je dois, par exemple, pouvoir faire un update sur une base SQL server, puis en changeant seulement 1 ou 2 fichiers Properties ou xml, pouvoir faire cet update sur une base oracle.

----------


## woodwai

J'ai effectu un projet avec IBATIS et j'ai trouv celui-ci trs facile d'accs.
Bien sr, comme toute API de mapping objet, IBATIS est indpendant de la base de donnes (je te conseil d'utiliser des datasource pour plus de flexibilit)

Eclipse est suffisant pour dvelopper, ensuite tu as bien sur besoin du JAR de IMBAIS, d'une base de donnes et de son driver.

Je te conseil d'aller chercher un petit tutoriel sur IBATIS, mais en gros la logique est : dans un fichier de configuration XML on dfinit quel requte correspond  quelle classe en mappant les rsultat de la requte avec les proprit de la classe. C'est plus simple qu'hibernate, mais donc mois puissant/complet (mlais ce n'est qu'un point de vue, je ne voudrait pas rentrer dans des discussion pour/contre).

Je ne trouve pas de tutoriel IBATIS en franais, mais si la doc qui se trouve sur le site officiel ne te suffit pas, peut tre qu'avec une recherche un peu plus pouss que la mienne tu en trouveras.

----------


## Kuuei

J'ai trouv un tuto en francais, mais j'arrive pas  le faire marcher ...
http://people.apache.org/dist/ibatis...utorial_fr.pdf

je suis pas un expert en java ... pourtant ca n'a pas l'air extremement compliqu ...

J'ai les 3 .jar d'ibatis ms je sais pas comment m'en servir 
et la classe MyAppSqlConfig du tuto ne veut pas marcher (surement a cause de jar dont je ne sais pas me servir ...)

----------


## woodwai

Il faut, pour que a marche, que tes jar soit dans le classpath de ton application.

Si tu est sous eclipse, il faut que tu place tes JAR dans un rpertoir lib par exemple, et ensuite tu fait click droit sur ton projet, properties, java build path, puis que tu ajoute ton JAR au classpath.

Jette un coup d'oeil  un petit tuto eclipse (il y en a sur developpez).

----------


## Kuuei

merci, j'ai reussi  compiler l'exemple du tuto

cependant, j'obtient un erreur quand j'envoie une requete sur la base.


```

```

dans la requete il y a un "?", logiquement c'est une valeur qui doit etre entre en parametre ... mme si je la remplace directement par un nombre, j'obtiens tjrs la meme erreur.
La requete est correcte, je l'ai excute avec succs hors du programme.

J'ai cherch sur d'autres forums, et les personnes ayant le meme probleme n'ont pas trouv de reponses ... erf ...

----------


## woodwai

Tu utilise quoi comme base de donnes et quoi comme driver de base de donnes?

----------


## martel

"ODBC Microsoft Access Driver"  = access de microsoft

et il n'aime pas la fonction "Prepared statement" car access ne prend pas ce genre de requte, ou en tout cas peut tre avec cette syntaxe.

----------


## woodwai

Effectivement, access n'est pas vraiment une base de donnes complte, et elle n'obit que de loin aux standard de base de donnes.

Donc tu risque d'avoir pas mal de problme. L je ne peut pas t'aider, je ne connait pas trop l'utilisation d'access avec JAVA (j'en ai fait une fois ou deux mais il y a trs longtemps).

----------


## josuatree

> Effectivement, access n'est pas vraiment une base de donnes complte, et elle n'obit que de loin aux standard de base de donnes.
> 
> Donc tu risque d'avoir pas mal de problme. L je ne peut pas t'aider, je ne connait pas trop l'utilisation d'access avec JAVA (j'en ai fait une fois ou deux mais il y a trs longtemps).


A cause d'un bug dans le driver JDBC-ODBC qui n'accepte pas les "longs" java (problme dans le setLong de PreparedStatement), il faut crer un "callbackHandler" (une classe java) qui va intercepter le traitement des "long" et les transformer en autre chose (j'ai choisi double) :

package dao.ibatis;

import com.ibatis.sqlmap.client.extensions.ParameterSetter;
import com.ibatis.sqlmap.client.extensions.ResultGetter;
import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;
import java.sql.SQLException;

public class LongTypeHandlerCallback implements TypeHandlerCallback {

  public void setParameter(ParameterSetter setter, Object parameter) throws SQLException {
    if (parameter != null) setter.setDouble(((Long)parameter).doubleValue());
  }
  public Object getResult(ResultGetter getter) throws SQLException {
    return getter.getString() == null ? null : new Long(getter.getString());
  }
  public Object valueOf(String val) {
    return val == null ? null : new Long(val);
  } 

}

et on utilise cela dans un parameterMap :

  <parameterMap id="crud-params" class="Etudiant">
    <parameter property="nom_etudiant" javaType="java.lang.String" jdbcType="VARCHAR" />
    <parameter property="prenom_etudiant" javaType="java.lang.String" jdbcType="VARCHAR" />
    <parameter property="option_etudiant.no_option" javaType="java.lang.Long" typeHandler="dao.ibatis.LongTypeHandlerCallback" />
  </parameterMap>

  <insert id="insert" parameterMap="crud-params">
    INSERT INTO Etudiants (nom_etudiant, prenom_etudiant, no_option) 
    VALUES (?, ?, ?)
    <selectKey resultClass="long" keyProperty="no_etudiant" > SELECT @@IDENTITY AS ID
    </selectKey>
  </insert>

J'espre que cela aidera tous ceux qui utilisent Access avec Ibatis, car j'ai cherch longtemps avant de trouver cette solution. A+
 ::D:

----------

