Laissez-moi vous donner une brève introduction à mybatis
MyBatis est un excellent cadre de couche de persistance qui prend en charge les requêtes SQL simples, les procédures stockées et la cartographie avancée. MyBatis élimine les paramètres manuels de presque tous les code et paramètres JDBC et l'encapsulation de recherche de l'ensemble de résultats. MyBatis peut utiliser du XML ou des annotations simples pour la configuration et la cartographie originale, les interfaces de cartographie et les Pojos de Java (Old Java objets) en enregistrements dans la base de données.
Cet article est en fait un résumé de l'opération Java Oracle Type XMLTYPE Résumé 2: Utilisation de MyBatis.
MyBatis implémente un convertisseur personnalisé, ce qui est très simple. Ses étapes principales sont divisées en trois étapes. Ici, nous prenons l'exemple de types XMLType en fonctionnement.
premier pas
Créez une nouvelle classe de conversion pour implémenter l'interface TypeHandler. Les génériques de l'interface spécifient le type de paramètre, et s'il n'est pas spécifié, il est objet:
Classe publique XMLTYPETYPEHHANDLER IMPLIMENT
Cette interface a les 4 méthodes suivantes:
public void SetParameter (préparé PS, int i, paramètre de chaîne, jdbcType jdbcType) public String getResult (resultSet Rs, string columnname) lance sqlexceptionpublic string getResult (resultset RsAlmIndex)
La fonction de la méthode doit être comprise par le nom. SetParameter est une opération lors du passage des paramètres. Le code qui doit être traité avant que les paramètres ne soient transmis dans la base de données peuvent être écrits dans cette méthode. Les trois autres sont des méthodes d'obtention du résultat de la requête. Après avoir obtenu le résultat de la requête de JDBC, il peut être converti en tout type que vous souhaitez.
Étape 2
Dans Mapper-Config, enregistrez la classe de convertisseur que vous avez implémentée, où le type que JDBCTYPE peut spécifier est clairement défini dans la classe d'énumération de MyBatis org.apache.ibatis.type.jdbcType. Il ne peut pas être une valeur autre que l'énumération, sinon une erreur se produira. Ici, parce que l'énumération n'a pas le type XMLTYPE dont nous avons besoin, il est spécifié comme non défini. (Vous ne pouvez pas non plus spécifier des types spécifiques. Vous pouvez utiliser TypeHandler pour spécifier des classes spécifiques à l'utilisation):
<TypeHandlers> <TypeHandler javatype = "String" jdbcType = "Undefined" handler = "com.tyyd.dw.context.xmltypetypehandler" /> </ typeHandlers>
Étape 3
Utilisez le convertisseur de type dans votre fichier de mappage de mappeur:
Insérer dans les valeurs t_content (<include refid = "fullColumns" />) (# {ControlId, jdbcType = bigInt}, # {xmlfile, javatype = string, jdbcType = undefined, typeHandler = com.tyyd.dw.context.xmltypetypeHandler}, # {drmfile, jdbcType = Blob}))Faites attention aux paramètres XMLFile entrants, en spécifiant Javatype, JdbcType et TypeHandler, indiquant quel type de processeur que nous voulons utiliser. Bien sûr, vous ne pouvez spécifier que l'un d'eux, mais l'existence de cet élément doit être unique. Si plusieurs sont exactement les mêmes et que la spécification n'est pas claire, MyBatis provoquera une erreur car elle ne peut pas distinguer.
À ce stade, un convertisseur de type personnalisé pour MyBatis a été implémenté. Il convient de noter que le processeur de type spécifié ci-dessus ne fonctionne que lors de l'insertion de données. Si vous souhaitez utiliser un processeur de type personnalisé pendant la requête, vous devez le spécifier dans les balises des attributs dans le résultat. Les noms et les méthodes d'utilisation des balises Javatype, JDBCType et TypeHandler sont les mêmes, donc je ne les répéterai pas ici.
Joignez le code de convertisseur de type complet. Étant donné que lorsque le type XMLTYPE doit être interrogé, vous pouvez utiliser le XMLType.getClobval () de la base de données pour retourner directement en tant que chaîne pour fonctionner, de sorte que les méthodes retournées n'ont pas été traitées spécialement. (Vous pouvez également utiliser la fonction xmlType.getStringVal () pour retourner la chaîne, mais pendant l'utilisation réelle, il est constaté que lorsque le champ est nul, getStringval () aura une erreur d'Ora-06502: Erreur numérique ou de valeur: le tampon de chaîne de caractères trop petit, getClobval () n'aura pas d'erreur, donc il est recommandé d'utiliser getClobVal () fonction):
/ *** Oracle Sys.xmltype Type Processeur personnalisé * * Utilisateur: Liyd * Date: 13-12-27 * Heure: 4:53 PM * / public class XmlTypeTyPyTyPhandler implémente TypeHandler <string> {@OverridePublic void SetParameter (préparés Création de xmlType lorsque null est nécessaire si (stringUtils.isnotblank (paramètre)) {déléguant Connection Connection = (DelegatingConnection) ps.GetConnection (). GetMetAdata (). GetConnection (); xmlType Xmltype = XmlType.CreatExMl (connexion. paramètre); ps.SetObject (i, xmlType);} else {ps.setsString (i, null);}} @ OverRidepublic string getResult (resultSet rs, String columnname) lève sqlexception {// le champ xmltype utilise xmlType.getClobval () pour renvoyer Rs.getString (ColumnName);} @ OverRidePublic String getResult (resultSet rs, int colonnedIndex) lève SQException {return Rs.getString (ColumnIndex);} @ OverRidePublic String GetResult (CallableStatement CS, int columnIndex) ThrowCe qui précède est la méthode d'implémentation de TypeHandler pour MyBatis pour implémenter le convertisseur de type personnalisé par TypeHandler. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!