MyBatis est un excellent cadre de couche de persistance qui prend en charge les requêtes SQL ordinaires, 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 recherchez des ensembles de résultats. MyBatis utilise des XML ou des annotations simples pour la configuration et le mappage d'origine pour mapper les interfaces et les Pojos de Java (Old Java objets) en enregistrements dans la base de données.
MyBatis est un projet open source d'Apache. En 2010, ce projet a été déplacé de la Fondation du logiciel Apache à Google Code et a été renommé Mybatis.
Migré vers GitHub en novembre 2013, adresse GitHub de Mybatis: https://github.com/mybatis/mybatis-3.
Le terme ibatis vient de la combinaison de "Internet" et "Abatis", et est un cadre de couche de persistance basé sur Java. Ibatis fournit des cadres de couche de persistance, y compris les cartes SQL et les objets d'accès aux données (DAO).
Chaque application MyBatis utilise principalement des instances SQLSessionFactory, et une instance SQLSessionFactory peut être obtenue via SQLSessionFactoryBuilder. SQLSessionFactoryBuilder peut être obtenu à partir d'un fichier de configuration XML ou d'une instance d'une classe de configuration prédéfinie.
1. Utilisez un générateur pour générer automatiquement la couche DAO, la couche de modèle et la couche de mapper.
Adresse de téléchargement du générateur Mybatis: http://www.mybatis.org/generator/
Mybatis Generator Introduction chinoise: http://generator.sturgeon.mopaas.com/
Ce qui suit utilise le plug-in MyBatis-Generator-Core-1.3.2.Jar pour ajouter le package de connexion de la base de données JDBC pour exporter automatiquement le package DAO de couche de persistance, le package de modèle et le package de mappeur.
Les forfaits Java qui doivent être utilisés sont:
mybatis-generator-core-1.3.2.jar,
MySQL-Connector-Java-5.1.34.jar,
OJDBC14-10.2.0.1.0.jar,
SQLJDBC4-4.0.jar.
Fichier de configuration: générateur.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype GeneratorConfiguration public "- // Mybatis.org//dtd Mybatis Generator Configuration 1.0 // en" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <GeneratorConcure> <! - Le fichier de propriété de configuration est utilisé pour introduire des expressions EL variables dans le fichier de configuration -> <! - Si vous l'exécutez en CMD, vous devez écrire le chemin complet dans l'URL car le chemin de classe ne peut être trouvé. Pour Resource -> <! - <Properties url = "file: /// d: /workspaces/mybatisgen/bin/generatorconfig.properties" /> -> <! - Emplacement du package de pilote de base de données -> <! - Sql Server Data Driver Package <! - Oracle Data Driver Package -> <! - <CLASSPATHETRY LOCATION = "D: /java/m2/repository/com/oracle/ojdbc14/10.2.0.1.0/ojdbc14-10.2.0.1.0.jar" /> -> <! - MySQL Data Data Pilack Package -> <! - <! Location = "D: /javaproject/Generator/mysql-connector-java-5.1.34.jar" /> -> <! - Ici, spécifie ce dao pour mybatis3 -> <! - ID: doit être configuré. L'identifiant unique de ce contexte. Cette valeur sera utilisée dans certains messages d'erreur. DefaultModelType: Utilisé pour définir la stratégie de type de modèle génératif. 1. Politique par défaut conditionnelle, générer une classe de modèle pour chaque tableau 2.FlAT: générer une classe de modèle à partir de toutes les tables, c'est-à-dire que cette classe enregistrera tous les champs des tableaux 3.Hierarchical: si le tableau a une clé primaire, le modèle générera une classe de clé principale, une autre classe, qui est utilisée pour accueillir des colonnes blob dans le tableau et une autre classe, qui est utilisée pour s'adapter à la fin des fields. Il s'agit d'une bonne relation entre les classes héréditaires. TargetRuntime: cette propriété est utilisée pour spécifier le code généré par la cible d'exécution. 1.MyBatis3 Les valeurs par défaut généreront des objets compatibles avec MyBatis version 3.0 et ultérieurement, et JSE 5.0 et plus tard (par exemple, les modèles Java et les interfaces de mappel utiliseront des types génériques). La méthode "par exemple" prend en charge la dynamique presque illimitée où les clauses sur ces objets générés. De plus, les objets Java avec ces générateurs prennent en charge de nombreuses fonctionnalités JSE 5.0, y compris les types et commentaires paramétrés. 2.Ibatis2java2 3.ibatis2java5 -> <context id = "mysqltables" cibleruntime = "mybatis3" defaultModelType = "Conditional"> <! - <plugin type = "org.mybatis.generator.plugins.equalshashcodeplugin" /> -> <! La propriété est utilisée pour spécifier si des commentaires seront inclus dans le code généré. S'il est défini sur true, aucun commentaire n'est généré 2. Supprimez les défauts par défaut que cette propriété est utilisée pour spécifier si le commentaire généré comprendra l'horodatage de la génération MBG. -> <commentgenerator> <propriété name = "suppressallComments" value = "true" /> </ commentgenerator> <! - Url de liaison de base de données, nom d'utilisateur, mot de passe -> <! - MySQL Link de base de données URL, nom d'utilisateur, mot de passe -> <! - <jdbcconnection driverclass = "com.mysql.jdbc.driver" ConnectionUrl = "jdbc: mysql: //127.0.0.1: 3310 / test" userId = "test" password = "1234"> </ jdbcconnection> -> <! - Oracle Database Link URL, username, mot de passe -> <! - <JDBCConnection Driverclass = "Oracle.jdbc.Diver ConnectionUrl = "JDBC: Oracle: Thin: @ 127.0.0.1: 1521: ORCL" userId = "test" password = "1234"> </ jdbcconnection> -> <! - SQL Server Database Link URL, username, mot de passe -> <jdbcconnection DriverClass = "com.microsoft.sqlserver.jdbc.sqlServerDriver" ConnectionUrl = "jdbc: sqlServer: //127.0.0.1: 1433; databasename = test" userrid = "test" = "1234"> </ jdbcconnection> <! key = "jdbc.url"> jdbc: h2: tcp: // localhost / test </ntry> <entrée key = "jdbc.driver"> org.h2.driver </ entrée> -> <! - SqlServer2000 <entrée < key = "jdbc.url"> jdbc: Microsoft: sqlserver: // localhost: 1433; databasename = [database] </ entrée> <entrée key = "jdbc.driver"> com.microsoft.jdbc. key = "jdbc.url"> jdbc: sqlserver: //192.168.0.98: 1433; databasename = [database] </ntry> <entrée key = "jdbc.driver"> com.microsoft.sqlserver.jdbc.sqlserverdriver </1rsey> <! <entrée key = "jdbc.url"> jdbc: jtds: sqlserver: //192.168.0.102: 1433 / [database]; tds = 8.0; LastUpDateCount = true </ entry> <entrée clé = "JDBC.Driver"> Net.SourceForge.jtds.jdbc.Driver Postgresql <entrée key = "jdbc.url"> jdbc: postgresql: // localhost / [database] </ entrée> <entrée key = "jdbc.driver"> org.postgreql.driver </ntry> -> <! - Sybase <entrée key = "jdbc.url"> jdbc: sybase: tds: localhost: 5007 / [database] </ entry> <entrée key = "jdbc.driver"> com.sybase.jdbc.Sybdriver </ntry> -> <! - db2 <entrée key = "jdbc.url"> jdbc: db2: // localhost: 5000 / [database] </ entry> <entrée key = "jdbc.driver"> com.ibm.db2.jdbc.app.db2driver </ entry> -> <! - Hsqldb < key = "jdbc.url"> jdbc: hsqldb: mem: generatordb </ entry> <entrée key = "jdbc.driver"> org.hsqldb.jdbcdriver </ entrée> -> <! - Derby <entrée key = "jdbc.url"> jdbc: Derby: // localhost / databasename </ Entry> key = "jdbc.driver"> org.apache.derby.jdbc.clientdriver </ntry> -> <! - Java Type Parser Configuration facultative -> <! - <JavatyPeresolver Type = ""> Type Property: Cela peut être utilisé pour spécifier un analyse de type Java fourni par l'utilisateur. Cette classe doit implémenter l'interface org.mybatis.generator.api. JavatyPeresolver, il doit y avoir un constructeur public par défaut. La propriété peut également accepter des valeurs spéciales par défaut dans ce cas, l'implémentation par défaut sera utilisée (le même effet ne spécifie pas le type). Les propriétés prises en charge par cette balise: ForceBigDecimals: la valeur par défaut est fausse, s'il faut forcer BigDecimal pour représenter tous les champs décimaux et numériques. • Si l'échelle est grande et que la longueur est supérieure à 18, le type BigDecimal sera utilisé. • Si sa longueur est de 10 à 18, l'analyseur de type Java remplacera Java.lang.long. • Si la longueur est de 5 à 9, alors l'analyseur de type Java sera remplacé par un java.lang.integer. • Si sa longueur est inférieure à 5, l'analyseur de type Java sera remplacé par java.lang.short. -> <javatyperesolver> <propriété name = "ForceBigDecimals" value = "false" /> </ javatyperresolver> <! - générer des objets VO -> <! - <javamodelgenerator> Les éléments sont utilisés pour définir les propriétés générées par les modèles Java. Le générateur de modèle Java crée le tableau correspondant à la classe de clé primaire, à la classe d'enregistrement et à une classe d'échantillonnage de requête pour l'introspection. Cet élément est l'élément élément enfant obligatoire <context>. Propriétés prises en charge: constructeur: cette propriété est utilisée pour sélectionner si le générateur MyBatis générera un constructeur de classe, qui accepte chaque champ dans une classe de valeur. Pendant ce temps, les cartes SQL Result seront intégrées dans chaque champ à l'aide du constructeur au lieu de "setter". Cette propriété ne s'applique qu'à MyBatis3 et sera ignorée pour ibatis2. La valeur par défaut est fausse. Immutable: immuable, cette propriété est utilisée pour sélectionner si le générateur MyBatis générera une classe de modèle immuable - cela signifie que la classe n'aura pas de méthode "setter" et le constructeur acceptera la valeur de chaque champ de la classe. La valeur par défaut est fausse. TrimStrings: cette propriété est utilisée pour sélectionner si le générateur MyBatis ajoute du code pour couper l'espace vide renvoyé de la base de données. Ceci est utile si votre base de données stocke les données dans un champ de caractères au lieu d'un champ Varchar. Le générateur MyBatis inséra le code pour couper les champs de caractères. La valeur par défaut est fausse. -> <! - Générez le nom du package et l'emplacement de la classe d'entité. Ici, placez la classe d'entité générée sous le package com.ouc.model -> <javamodelgenerator targetpackage = "com.ouc.model" cibleProject = "d: / javaproject / générateur / src"> <propriété name = "activeraBpackages" value = "true" /> <propriété name = "TrimStrings" value = "Value =" true "/> </ javamodfr> <! Générer un objet de mappage pour la requête -> <! - Générez le nom du package et l'emplacement du fichier de carte SQL généré. Ici, placez le fichier de carte SQL généré sous le package com.ouc.mapping -> <sqlmapGenerator TargetPackage = "com.ouc.mapping" cibleProject = "d: / javaproject / générateur / src"> <propriété name = "activer <! - <javaclientGenerator> Les éléments sont des attributs utilisés pour définir les générateurs de code client Java. Le générateur de clients Java est utilisé pour établir des interfaces et des classes Java afin que les fichiers de mappage Java et XML générés puissent être facilement utilisés. Pour l'environnement cible IBATIS2, ces objets générés adoptent la forme des classes d'interface et d'implémentation DAO. Pour MyBatis, l'objet généré utilise une interface de mappeur. Cet élément est un élément enfant en option. Si vous ne spécifiez pas cet élément, le générateur MyBatis (MBG) ne générera pas d'interfaces et de classes de clients Java. Où Type Attribut: Si TargetRuntime est MyBatis3 XMLMapper: l'objet généré interfacera l'interface Java à l'infrastructure de mappers MyBatis 3.x. L'interface dépendra du fichier de mapper XML généré. Généralement, ce XMLMapper est utilisé. -> <! - Générez le nom et l'emplacement du package du DAO. Ici, la classe DAO générée est placée sous le package com.ouc.dao -> <javaclientGenerator type = "xmlmapper" ciblePackage = "com.ouc.dao" TargetProject = "d: / javaproject / générateur / src.> <propriété name =" perdAbPackages "value =" true "/> </ javacliEGERGERDAT Pour sélectionner une table dans la base de données. Le tableau sélectionné entraînera la génération des objets suivants pour chaque tableau: • Un fichier de mappage SQL MyBatis / Ibatis • Un ensemble de classes qui forment le tableau "modèle", y compris: • une classe à correspondre • La clé principale du tableau (si le tableau a une clé principale). • Les champs de la table ne correspondent pas à la clé primaire, pas dans le champ blob. Cette classe étendra la clé primaire s'il y en a une. • Une classe pour maintenir le champ Blob dans n'importe quelle table (le cas échéant). Cette classe prolongera les deux premières classes de une selon la configuration du tableau. • Une classe, utilisée pour générer dynamique où les clauses, dans différentes méthodes "par exemple" (selectByExample, DeleteByExample). • Interface DAO (facultative) et nom de table de classe: le nom de la table spécifiée doit être configuré. DomainObjectName: le nom de base de l'objet JavaBean généré. S'il n'est pas spécifié, MBG sera automatiquement généré en fonction du nom du tableau. Ce nom (qu'il soit spécifié ici ou généré automatiquement) sera utilisé comme nom de classe de domaine et le nom de la classe DAO. ActiverInsert: s'il faut générer une instruction d'insertion. La valeur par défaut est True ActivedElectByPrimaryKey: s'il faut générer une instruction de sélection via la clé primaire. Qu'il y ait un tel paramètre, si le tableau n'a pas de clé primaire, il ne sera pas généré. Activer upDateByPrimaryKey: s'il faut générer des instructions de mise à jour via la clé principale. Si le tableau n'a pas de clé primaire, l'instruction ne sera pas générée, que la propriété soit définie ou non. activé EleteByPrimaryKey: s'il faut générer une instruction Supprimer via la clé primaire. Si le tableau n'a pas de clé primaire, quelle que soit cette propriété est définie, l'instruction ne sera pas générée. activéSeleteByExample: s'il faut générer une instruction Delete via l'exemple de l'objet. Cette déclaration fait de nombreuses suppressions dynamiques différentes générées au moment de l'exécution. pertinerCountByExample: s'il faut générer une instruction pour calculer le nombre de lignes via l'exemple de l'objet. Cette instruction renvoie un exemple qui correspond au nombre de lignes dans une table. activerupDateByExample: s'il faut générer des instructions de mise à jour via l'exemple de l'objet. Cette déclaration mettra à jour un enregistrement correspondant dans un tableau. selectByPrimaryKeyQueryId: Cette valeur sera ajoutée à la liste de sélection pour sélectionner la déclaration par la clé principale de ce tableau: "'<value> as queryID". Cela peut être utilisé pour identifier les requêtes dans l'outil DBA à l'exécution de suivi. Si vous devez utiliser, vous devez spécifier un ID unique pour générer MBG pour chaque requête différente. selectByExampleQueryId: Cette valeur sera ajoutée à la liste de sélection pour sélectionner l'instruction par l'exemple de ce tableau: "'<value> as queryID". Cela peut être utilisé pour identifier les requêtes dans l'outil DBA à l'exécution de suivi. Si vous devez utiliser, vous devez spécifier un ID unique pour générer MBG pour chaque requête différente. ActivedElectByExample: l'instruction de sélection devrait-elle être générée par exemple? Cette déclaration rend de nombreuses requêtes dynamiques différentes générées au moment de l'exécution. ModelType: Cette propriété est utilisée pour remplacer le type de modèle par défaut si vous souhaitez le faire pour ce tableau. S'il n'est pas spécifié, MBG générera l'objet de domaine en fonction du type de modèle par défaut de contexte. Ce type de modèle définit comment la classe de domaine MBG sera générée. Certains types de modèles MBGS généreront une classe de domaine unique pour chaque table, et d'autres peuvent générer différentes classes MBGS en fonction de la structure du tableau. Cartes d'éclacept: exclure les jokers. Cela signifie que le schéma et les noms de table de Wildcards SQL ('_' et '%') doivent être évités dans les colonnes de recherche. Il s'agit de certains pilotes qui nécessitent que si le schéma ou la table contient un wildcard SQL (par exemple, si le nom d'une table est MY_TABLE, certains pilotes exigent que les caractères de soulignement soient échappés). -> <! - Pour générer ces tableaux (modifier le nom de table et domainObjectName) -> <table tableName = "v_supplyuser" domainObjectName = "vSupplyUser" apactiveCountByExample = "false" activeupdateByExample = "false" compatibleeleleByExample = "false" activerbyExample = "false" false " TableName = "WJ_GATELIST" DomainObjectName = "WJGATELIST" INABLESCUNTYEXample = "FALSE" ActiverpDateByExample = "FAUX" ENabledeleteByExample = "false" activeryElexample = "false" selectByExampleQuery = "false" /> </ context> </ generatorconfiguration> Ouvrez la ligne de commande CMD, accédez au fichier où se trouve le fichier de configuration et exécutez l'instruction de génération suivante:
java -jar mybatis-generator-core-1.3.2.jar -configfile générateur.xml -overwrite
Une fois la commande exécutée, vous pouvez voir que le package DAO, le package modèle et les fichiers de package de mappel sont générés dans le chemin d'accès correspondant.
2.Mybatis Framework Intégration
1) MyBatis utilise la configuration des paramètres: sqlmapconfig.xml.
① Configuration du cache (Cache): Cacheenabled: Global Switch: La défaut est vrai. S'il est configuré comme faux, il est inutile de configurer les autres fichiers XML mappeurs pour prendre en charge le cache.
② Chargement de retard:
LazyLoadingEnabled: True utilise le chargement paresseux, FAUX désactive le chargement paresseux, la valeur par défaut est vraie, lorsqu'il est désactivé, tous les objets associés seront chargés instantanément.
Lorsque AggressIveLyloading: True est activé, lors de l'accès à une propriété d'objet paresseux dans l'objet lorsque le chargement paresseux est activé, toutes les propriétés d'objet paresseuses de cet objet seront entièrement chargées. FAUX. Lors du chargement des retards, chargez les propriétés de l'objet selon les besoins (c'est-à-dire l'accès à une propriété d'objet paresseux dans l'objet, et d'autres propriétés d'objet paresseuses dans l'objet ne seront pas chargées). La valeur par défaut est vraie.
③ MultiplereSultSetSenabled: Autoriser et ne pas laisser une seule instruction à renvoyer plusieurs ensembles de données (selon les exigences du pilote). La valeur par défaut est vraie.
④ UseColumnLabel: utilisez des étiquettes de colonne au lieu des noms de colonnes. Différents disques ont des approches différentes. Reportez-vous à la documentation du lecteur ou testez-le avec ces deux options différentes.
⑤ UseGeneratedKeys: permet à JDBC de générer des clés primaires. La prise en charge du lecteur est requise. Si elle est définie sur true, ce paramètre forcera la clé primaire générée, certains disques sont incompatibles mais peuvent toujours être exécutés.
⑥ AutomapingBehavior: Spécifie si et comment MyBatis mlate automatiquement les champs de table de données et les propriétés des objets. Partial ne mappera automatiquement que simple, sans résultats imbriqués. Full mappera automatiquement tous les résultats complexes.
⑦ DefaultExECutOrTyPy: configure et définit l'exécuteur, et l'exécuteur simple exécute d'autres instructions. L'exécuteur de réutilisation peut réutiliser les instructions de préparation des instructions et l'exécuteur de lots peut exécuter de manière répétitive des instructions et des mises à jour par lots.
⑧ DefaultstatementTimeout: définissez un délai pour déterminer combien de temps le lecteur attendra que la base de données réponde au délai d'attente.
Le fichier de configuration complet SQLMAPConfig.xml est le suivant:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype ConfigurationPublic "- // Mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3config.dtd"> <configuration> /> <paramètre name = "LazyLoadingEnabled" value = "true" /> <setting name = "multiplereSultSetSenabled" value = "true" /> <paraming name = "multipleResulTSeSeabled" value = "true" /> <sefit name = "usecolumnLabel" value = "true" /> <setting name = "useGeneredKey Value = "Partial" /> <paraming name = "DefaultExeCutorType" value = "Simple" /> <! - Simple Reutilisation Batch -> <! - <Setting Name = "DefaultExecutOrTy value = "false" /> <setting name = "localcachescope" value = "session" /> <! - <setting name = "jdbcTypeForNull" value = "autre" /> -> <paraming name = "jdbcTypeForl /> </ Settings> <Cypealiases> <! - Module -> <tycias alias = "user" type = "com.ouc.mkhl.platform.authority.model.user" /> <tycias alias = "role" type = "com.ouc.mkhl.platform.Authority.Model.Role" /> <typeas alias = " type = "com.ouc.mkhl.platform.baseData.model.equipment" /> <typealias alias = "factory" type = "com.ouc.mkhl.platform.baseData.model.factory" /> </ typiases> <typeHandlers> <typeHandlerter handler = "com.ouc.openplatform.dao.mybatis.serializableTypeHandler" /> </ TypeHandlers> </ Configuration>
Sérialisation Traitement de la valeur spéciale: SerializableTypeHandler
package com.ouc.openplatform.dao.mybatis; import java.io.serializable; import java.sql.callablestatement; import java.sql.preparedstatement; import java.sql.resultSet; org.apache.ibatis.type.jdbcType; / *** @Author Wuping * / classe publique SerializableTypeHandler étend BasetypeHandler <Serializable> {@OverRidePublic void SetNonnullPaRaMeter (préparé Ps, int i, paramètre de sérialisable, JDBCTYPE JDBCTYPE) {Ps.SetObject (i, paramètre);} @ OverRidepublic Serializable getNullableResult (résultat Rs, String Columnname) lève Sqlexception {return (sérialisable) Rs.GetObject (Columnname);} @ OverRidepublic Serializable GetNullAlleResult (ResultSset Rs, int colonne (Serializable) Rs.GetObject (ColumnIndex);} @ OverRidePublic Serializable getNullableResult (callableStatement CS, int chlumnIndex) lance sqlexception {return (serializable) cs.getObject (ColumnIndex);}} 2) ResultMap Result Set:
Lors de la sélection du mappage dans MyBatis, le type de retour peut être utilisé avec ResultType ou ResultMap. ResultType représente directement le type de retour, tandis que le résultat est une référence au résultat externe, mais le résultat et le résultat ne peuvent pas exister en même temps. Lorsque MyBatis interroge le mappage, en fait, chaque requête d'attribut est placée dans une carte correspondante, où la clé est le nom d'attribut et la valeur est sa valeur correspondante. Lorsque l'attribut de type retour fourni est ResultType, MyBatis supprimera les paires de valeur de clé dans la carte et les attribuera aux attributs correspondants de l'objet spécifié par resultType. Ainsi, en fait, le type de retour de chaque carte de requête de MyBatis est un résultat. Cependant, lorsque l'attribut de type retour que nous fournissons est ResultType, MyBatis attribue automatiquement la valeur correspondante aux attributs de l'objet spécifié par resultType. Lorsque le type de retour que nous fournissons est ResultMap, car la carte ne peut pas bien représenter le modèle de domaine, nous devons le convertir davantage en l'objet correspondant nous-mêmes, qui est souvent très utile dans les requêtes complexes.
Exemple: userbaseresultmap
<resultMap id = "userBaseResultMap" type = "user"> <id Column = "id" propriété = "id" jdbcType = "Integer" /> <result Column = "username" propriété = "username" JDBCTYPE = " Property = "Courriel" JDBCTYPE = "VARCHAR" /> <Result Column = "TrueName" Property = "TrueName" JDBCTYPE = "VARCHAR" /> <Result Column = "Sex" Property = "Sex" JDBCTYPE = "Varchar" /> <Result Column = "Age" Property = "Age" JDBCTYPE = "INTERG propriété = "téléphone" jdbcType = "varchar" /> </ résultatmap>
Classe de modèle: utilisateur
package com.ouc.mkhl.platform.authority.model; import java.io.serializable; // informations utilisateur classe publique utilisateur implémente serializable {private static final long SerialVersionUID = 1098321123l; ID entier privé; // ID utilisateur Nom d'utilisateur de chaîne privée; // Nom d'utilisateur Mot de passe de chaîne privée; // Nom d'utilisateur e-mail de chaîne privée; // Envoyez un courriel à la chaîne privée Truename; // Real Name Private String Sex; // Âge entier privé de genre; // vieillit de chaîne privée téléphone; // Phone Mobile Public Integer getID () {return id; } public void setid (INGER ID) {this.id = id; } public String getUserName () {return username; } public void setUsername (String username) {this.username = username == null? null: username.trim (); } public String getPassword () {return mot de passe; } public void setPassword (String Password) {this.password = mot de passe == null? null: mot de passe.trim (); } public String getEmail () {return e-mail; } public void setEmail (chaîne e-mail) {this.email = email == null? NULL: email.trim (); } public String getTruename () {return truename; } public void setTruename (String truename) {this.truename = truename == null? null: truename.trim (); } public String getSEX () {return sexe; } public void setSex (String Sex) {this.sex = sexe == null? null: sex.trim (); } public Integer Getage () {Return Age; } public void Setage (entier Âge) {this.age = age; } public String gettelephone () {return téléphone; } public void Settelephone (String Telephone) {this.telephone = téléphone == null? null: téléphone.trim (); }} 3) Ajouter, supprimer, modifier et vérifier:
(1) Sélectionnez la requête:
① ID: L'identifiant unique de ce mode peut être référencé par d'autres déclarations.
② ParameterType: le nom ou l'alias de classe complet du paramètre transmis à cette instruction.
③ ResultType: L'instruction renvoie le nom ou l'alias de la classe entier du type de valeur. Notez que s'il s'agit d'une collection, le nom ou l'alias de la classe entière de l'élément de la collection est rempli ici, plutôt que le nom de classe de la collection elle-même. (ResultType et ResultMap ne peuvent pas être utilisés ensemble)
④ ResultMap: le nom de résultat externe référencé. La cartographie des résultats de résultats est la fonctionnalité la plus puissante de Mybatis. De nombreux mappages complexes peuvent être facilement résolus. (ResultType et ResultMap ne peuvent pas être utilisés ensemble)
⑤ FlushCache: Si défini sur true, le cache sera effacé chaque fois que l'instruction est appelée. L'instruction SELECT est définie sur False par défaut.
⑥ UseCache: Si défini sur true, l'ensemble de résultats de l'instruction sera mis en cache. L'instruction SELECT est définie sur False par défaut.
⑦ Timeout: Réglez le temps maximum que le lecteur attend une réponse avant de lancer une exception. La valeur par défaut est de ne pas définir la valeur et le lecteur le décide lui-même.
Exemple: interroger toutes les informations de l'utilisateur: SelectUsers
<select id = "selectUsers" resultmap = "userbaseresultmap"> Sélectionnez ID, nom d'utilisateur, e-mail à partir de l'utilisateur </lect>
(2) INSERT INSERT: SAVEUSER
Ici, le tableau de la base de données utilise la clé primaire pour augmenter lui-même et la clé principale est l'ID.
① Réfléchissez: après avoir réglé une valeur, le lecteur sera ravi de retourner après que le nombre d'ensembles de résultats atteigne cette valeur. La valeur par défaut n'est pas définie, ce qui est déterminé par le lecteur lui-même.
② StatementType: déclaration, déclaration préparée, callableStatement. Déclarations préparées, déclarations appelables.
③ UseGeneratedKeys: Utilisez la méthode GetGeneratedKeys de JDBC pour obtenir la clé principale générée par la base de données elle-même (MySQL, SQLServer et d'autres bases de données relationnelles auront des champs qui seront automatiquement générés).
④ KeyProperty: identifie une valeur renvoyée par la clé qui sera définie dans GetGeneratedKeys par MyBatis, ou utilisez un élément enfant SelectKey pour l'instruction INSERT.
<insert id = "SaveUser" ParameterType = "User"> Insérer dans l'utilisateur (nom d'utilisateur, mot de passe, e-mail, Truename, sexe, âge, téléphone) (# {nom d'utilisateur, jdbcType = varchar}, # {mot de passe, jdbcType = varchar}, # {e-mail, jdbcType = varchar}, # {truename, jdbcType = varchar}, # {sexe, jdbcType = varchar}, # {age, jdbcType = Integer}, # {téléphone, jdbctype = varchar}) </ insert> (3) Mise à jour Mise à jour: mise à jour dynamiquement SQL: Mise à jour
<update id = "UpdateUser" ParameterType = "User"> Update User <Set> <if test = "username! = null"> username = # {username, jdbcType = varchar}, </ if> <if test = "mot de passe! = null"> mot de passe = # {mot de passe! # {email, jdbcType = varchar}, </ if> <if test = "truename! = null"> truename = # {truename, jdbcType = varchar}, </ if> <if test = "sexe! = null"> sexe = # {# # # # # # # # #> cembre = null = varchar}, </f> # {Age, jdbcType = Integer}, </ if> <if test = "téléphone! = null"> téléphone = # {téléphone, jdbcType = varchar}, </f> </set> où id = # {id, jdbcType = Integer} </dated> (4) Supprimer la suppression: DeleteUser
<delete id = "DeleteUser" ParameterType = "Integer"> Supprimer de l'utilisateur id = # {id, jdbcType = Integer} </ Delete> (5) SQL: L'élément SQL est utilisé pour définir un segment d'instruction SQL réutilisable pour les autres instructions à appeler.
<SQL ID = "UserBaseColumnList"> Nom d'utilisateur, mot de passe, e-mail, téléphone </ql> <sélectionnez id = "getUsers" resultMap = "userBaseResultMap"> Sélectionner <inclure refid = "userBaseColumnList" /> From User </ Select>
(6) Paramètres: Paramètres: MyBatis peut utiliser les types de données de base et les types de données complexes de Java.
Types de données de base, chaîne, int, date, etc.
L'utilisation de types de données de base ne peut fournir qu'un seul paramètre, vous devez donc utiliser la classe d'entité Java ou le type de carte comme type de paramètre. Ses attributs peuvent être obtenus directement via # {}.
① Paramètres de type de données de base: chaîne
<select id = "getUserByName" resultType = "utilisateur" ParameterType = "String"> SELECT ID, nom d'utilisateur, e-mail dans userwhere userName = # {username, jdbcType = varchar} </lect> Code Java:
utilisateur public getUserByName (nom de chaîne); // Obtenez des informations utilisateur en fonction du nom d'utilisateur
② Paramètre de type entité Java: utilisateur
<insert id = "SaveUser" ParameterType = "User"> Insérer dans l'utilisateur (nom d'utilisateur, mot de passe, e-mail, Truename, sexe, âge, téléphone) (# {nom d'utilisateur, jdbcType = varchar}, # {mot de passe, jdbcType = varchar}, # {e-mail, jdbcType = varchar}, # {truename, jdbcType = varchar}, # {sexe, jdbcType = varchar}, # {age, jdbcType = Integer}, # {téléphone, jdbctype = varchar}) </ insert> Code Java:
public Int SaveUser (utilisateur utilisateur); // insérer des informations utilisateur
③ Paramètres de carte: map <string, objet> recordmap
<select id = "selectChildGrouptotalnum" resultType = "Integer"> SELECT COUNT (*) From GroupInfo <Trim Prefix = "Where" PrefixOverrides = "et | ou"> and Id dans <foreach Collection = "IDST Nom! = '' "> Et le nom comme concat (concat ('%', # {name}), '%') </f> <if test =" Description! = null and Description! = '' '> et description comme concat (concat ('% ', # {description}),'% ') </ if> <if test = "type! = null and type! = - 1"> et type = # {type, jdbcType = Integer} </ if> <if test = "catégorie! = null et catégorie! = - 1"> et catégorie = # {catégorie, jdbcType = Integer} </ if> </mim> </lect> Code Java:
// Obtenez le nombre total d'enregistrements dans les sous-groupes public int selectChildGrouptotalnum (map <string, objet> recordmap); Map <string, objet> enregistremap = new hashmap <string, object> (); enregistremap.put ("idstr", groupe.getchildGrouds (). Split (",")); enregistremap.put ("name", name); enregistremap.put ("description", description)) GroupDao.SelectChildGrouptotalnum (RecordMap); ④ Paramètres multiples:
Méthode 1: Passez les paramètres dans l'ordre.
<! - Des paramètres de requête basés sur le nom du paramètre -> <select id = "selectSensornOnSensorName" resultType = "Integer" useCache = "false" flushCache = "true"> SELECT SABEALNORNO à partir de sensorconfig où name = # {0} et testUnitNo = # {1} et labode = # {2} </ select> Code Java:
// interroge le paramètre idpublic int selectSensornOnSensorName (String SendatName, int TestUnitNo, String Labcode);
Méthode 2: Ajouter une annotation @param aux paramètres de l'interface.
<select id = "selectByUserAmandvcode" resultMap = "userBaseResultMap"> SELECT ID, nom d'utilisateur From User <Trim Prefix = "Where" Prefixoverrides = "et | ou"> <if test = "username! = Null and Username! = ''"> et username comme concat (ifc ('%', # # {Username}), '%' test = "fournisseuro! = null et fournisseur! = ''"> Et fournisseur comme concat (concat ('%', # {fournisseur}), '%') </ if> et fournisseur! = 'test' </mim> limit # {startIndex}, # {pagesize} </lect> Code Java:
// requête les informations utilisateur basées sur le nom d'utilisateur et le code V Liste publique <User> selectByUserAmandvCode (@param ("username") String username, @ param ("fournisseur") String FournnoNo, @ param ("startIndex") int startIndex, @Param ("PageSize") int pageSize); 4) Instruction SQL dynamique:
SELECTKEY TAG, IF TAG, Jugement conditionnel de If + Where, Mettez à jour l'instruction if + set, If + Trim remplace WHERE / SET TAG, TRIMPLACE SET SET, CHOISIR (quand, sinon), ForEach Tag. Les instructions SQL dynamiques sont la partie la plus flexible de MyBatis, et il est très pratique de les utiliser bien.
Exemple: selectTotalnumbyAccountType
<select id = "selectTotalnumbyAccountype" resultType = "Integer"> SELECT COUNT (*) From User <Trim Prefix = "Where" PrefixOverRides = "et | ou"> and Id Not in <foreach Collection = "idstr" item = "ids" open = "(" séparateur = "," close = ")"> # {ids} et nom d'utilisateur! = '' "> et nom d'utilisateur comme concat (concat ('%', # {nom d'utilisateur}), '%') </ if> <if test =" fournisseur! = null et fournisseur! = '' "> et fournisseur comme concat (concat ('%', # {# # # # #), '%') </ if> <if Test =" TRUENNE! truename! = '' "> et truename comme concat (concat ('%', # {truename}), '%') </f> et accountType = # {compteType} </mim> </lect>Ce qui précède est un résumé de la connaissance d'utilisation du cadre de couche persistant MyBatis qui vous est présenté par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!