Programmation en opération d'interface
D'une manière générale, lorsque nous construisons des classes qui mappent les interfaces SQL, cela ressemble généralement à ceci:
public static void testBasicQuery (int id) {SqlSession Session = mybatisUtils.getsqlSession (); essayez {/ * * le david.mybatis.demo.ivisitorOperation.basicQuery ici doit correspondre à l'espace de noms dans la configuration de la figure ci-dessous * / visiteur Visitor = (Visitor) session.selectone ("David.mybatis.demo.ivisitoroperation.basicquery", id); Mybatisutils.closesession (session); System.out.println (visiteur); } catch (exception e) {// todo: gère l'exception}} <!-- Here namespace corresponds to the String parameter you passed --><mapper namespace="david.mybatis.demo.IVisitorOperation"><!-- Here resultType corresponds to the alias you just specified in the typeAlias node--> <select id="basicQuery" parameterType="int" resultType="Visitor"> select * from visitor where id=#{id} and Status>0 Commandez par id </lect> </naupper>De cette façon, si les noms des deux côtés ne correspondent pas accidentellement pendant le processus de développement réel, une exception se produira. Afin d'éviter une telle situation, nous pouvons utiliser la méthode d'interface pour effectuer des opérations correspondantes. Modifions cet article ci-dessous.
Tout d'abord, nous créons une nouvelle classe IvisitOperation sous le nom du package David.mybatis.demo, indiquant que les interfaces de toutes les méthodes de base de données seront exploitées à l'avenir, comme indiqué ci-dessous:
Package David.mybatis.demo; Importer java.util.list; importer david.mybatis.model.pagenateargs; import david.mybatis.model.visitor; interface publique iVisitorOperation {/ * * Basic Query * / Public Visitor BasicQuery (int id);} public static testbasicQuery session = mybatisUtils.getsqlSession (); try {iVisitorOperation Voperation = session.getMapper (iVisitorOperation.class); Visiteur Visiteur = Voperation.BasicQuery (ID); Mybatisutils.closesession (session); System.out.println (visiteur); } catch (exception e) {// todo: gère l'exception}}Cela se fait, nous n'avons donc pas à nous soucier de l'inadéquation qui peut résulter de noms de méthodes d'écriture manuelle.
Opération CRUD
Ce qui suit expliquera la création d'opérations CRUD et GetList basées sur les opérations de table unique. Afin de créer des données de test, obtenons d'abord une méthode d'ajout.
Continuez à ajouter des méthodes d'interface ajouter, supprimer, mettre à jour, requérir et getList dans la dernière classe d'interface IvisitorOperation, comme indiqué ci-dessous:
/ * * Basic Query * / Public Visitor BasicQuery (int id); / * * Add Visitor * / public int Add (Visitor Visitor); / * * Supprimer le visiteur * / public int Delete (int id); / * * Mise à jour Visitor * / public int mettrate (visiteur visiteur); / * * Requête Visitor * / Public Visitor Query (int id); / * * Liste des visiteurs de requête * / Liste publique <Sisitor> getList ();
Pour les opérations CRUD correspondantes, les nœuds d'insertion, de mise à jour, de suppression et de sélection sont respectivement sous le nœud <mappel> de VisitorMapper.xml. Pour les détails de configuration détaillés, veuillez vous référer au site officiel http://mybatis.github.io/mybatis-3/sqlmap-xml.html.
La configuration de cet exemple est la suivante: utilisez # {paramètre_name} pour passer les paramètres, et bien sûr, vous pouvez également utiliser $ {paramètre_name} directement.
De la manière ancienne, MyBatis le convertira en formulaire paramétré, par exemple Insérer dans les valeurs du tableau (nom) (# {nom}) => Insérer dans les valeurs du tableau (nom) (?) (Dans le cas de MySQL)
Dans la dernière manière, MyBatis passera les paramètres sans faire d'opérations, tels que Insérer dans les valeurs de la table (Name) ($ {name}) => Insérer dans les valeurs de la table (Name) ([La valeur que vous avez passé]), passe aa, voici aa, passe 'aa', voici 'aa'.
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappep Public "- // Mybatis.org//dtd Mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><Mapper namespace = "david.mybatis.demo.ivisitoroperation"> <! - useGeneratedKeys = "true" signifie s'il faut utiliser une séquence d'auto-croissance, keyproperty = "id" spécifie la colonne est la colonne de la définition dans la définition de l'interface Ivisitor Visitor ResultMap dans la requête. Le type de retour personnalisé est le meilleur choix pour retourner des types complexes et est également l'arme la plus puissante de MyBatis -> <insert id = "add" ParameterType = "Visitor" useGeneratedKeys = "true" keyproperty = "id"> INSERT IN Visitor (Name, Email, Status, CreateTime) Valeurs (# {name}, # {e-mail}, # # # {Status}, # # {}) </ insert> <delete id = "delete" ParameterType = "int"> Delete du visiteur où status> 0 et id = # {id} </preaking> <update id = "update" ParameterType = "Visitor"> mettrait à jour le visitor set name = # {name}, email = # {email}, status = # # status} où id = # {id} et statut> 0; </datedate> <sélectionnez id = "query" ParameterType = "int" resultType = "Visitor"> SELECT ID, nom, e-mail, statut, CreateTime depuis Visitor où id = # {id} et status> 0 Commande par id </lect> <sélectionnez id = "BasicQuery" ParamEterType = "int" ResultType = "Visitor"> SELECT * FROM VOIR </ select> <select id = "getList" resultMap = "Visitorrs"> <inclure refid = "getListsql" /> </ Select> <resultMap type = "Visitor" id = "Visitorrs"> <id Column = "id" Property = "id" /> <Result Column = "name" Property = "Name" /> <Result Column = "e-mail" Property = "Courriel" /> <Result Clumn = "Statut =" Statut = "STATERNE" <result Column = "CreateTime" Property = "CreateTime" /> </ ResultMap> <Sql id = "getListsQL"> Sélectionner * chez Visitor Where Status> 0 </ql> </ Mapper>Une chose à noter ici est que l'ID dans le nœud de fonctionnement doit correspondre au nom de l'interface dans la définition de l'interface, et le type de paramètre doit également lui correspondre. Par exemple, l'interface est ADD (visiteur du visiteur). Ensuite, lors de la configuration du nœud d'insertion, id = "add" et paramètreType = "Visitor"
Sinon, une exception correspondante sera signalée. Par exemple, si le nœud ID ne correspond pas au nom de l'interface, l'exception suivante apparaît:
Vous pouvez remarquer que lorsque vous obtenez une liste dans le fichier de configuration VisitorMapper.xml, vous utilisez ResultMap. Lorsque vous utilisez ResultMap, vous pouvez spécifier quels champs de vos propres cartes de déclaration SQL, car parfois vous n'avez pas besoin de autant de colonnes, vous n'avez donc pas besoin de configurer autant de cartes lors de la configuration de la cartographie, ou de votre colonne a été aliasée, vous ne pouvez donc pas utiliser directement le nom d'attribut de résultat de l'attribut du nom de la javabean avec la table de la table. Vous pouvez également contrôler l'opportunité de cartographier en configurant la valeur d'attribut <paramètres> sous le nœud <FIFIGITION> pour contrôler l'opportunité de cartographier avec la dénomination de camel dans JavaBean comme suit.
<mestriels> <setting name = "MapundersCoretoCamelCase" value = "false" /> </daits>
Pour d'autres configurations qui modifient le mappeur, vous pouvez les visualiser sur http://mybatis.github.io/mybatis-3/configuration.html#settings.
Pour la classe de mappeur du visiteur est la suivante:
<mapper namespace = "david.mybatis.demo.ivisitoroperation"> <sql id = "getListSQL"> Sélectionnez ID comme visitor_id, nom, e-mail, statut, CreateTime from Visitor où le statut> 0 </sql> <sélection est la propriété de la propriété. Les champs doivent être les mêmes que les propriétés que vous définissez dans l'entité. Ceci est sensible à la casse, sinon le secteur par défaut ne trouvera pas la propriété correspondante lors de l'attribution de valeurs à la propriété. Vous pouvez essayer la propriété de colonne correspondant au nom de l'ensemble de résultats renvoyé par l'instruction de requête. Si un alias est donné au champ correspondant, par exemple, l'ID devient Visitor_id, alors le nom de colonne correspondant doit également correspondre à -> <résultatmap type = "id" /> <résultat column = "name" property = "name" /> <result Column = "e-mail" Property = "e-mail" /> <sult "collumn =" statut = "statut =" statut = "statut =" status "status" colonnes = "CreateTime" Property = "CreateTime" /> </ ResultMap> </naupper>
Ici, vous remarquerez également qu'il y a un nœud Node <SQL>. Ceci est utilisé pour extraire des instructions ou des champs SQL publics à réutiliser dans d'autres endroits. Pour d'autres instructions détaillées, veuillez vous référer à http://mybatis.github.io/mybatis-3/sqlmap-xml.html.
Le reste est la même opération que tout à fait. Vous pouvez créer une classe Demorun dans le programme de démonstration pour stocker diverses méthodes de test, comme suit:
Package David.mybatis.demo; Importer java.util.arrays; import java.util.list; import org.apache.ibatis.session.sqlsession; importer david.mybatis.model.basicqueryargs; David.mybatis.model.pagenateargs; import david.mybatis.model.visitor; import david.mybatis.model.website; classe publique Demorun {public static void testBasicQuery (int id) {SqlSession Session = MybatisUtiles.getsQLSession (); essayez {/ * * le david.mybatis.demo.ivisitorOperation.basicQuery ici doit correspondre à l'espace de noms dans la configuration de la figure ci-dessous * / visiteur Visitor = (Visitor) session.selectone ("David.mybatis.demo.ivisitoroperation.basicquery", id); Mybatisutils.closesession (session); System.out.println (visiteur); } catch (exception e) {// todo: gère l'exception e.printStackTrace (); }} public static void testBasicQueryByInterfaceway (int id) {SQLSession Session = MyBatisUtils.getsQlSession (); try {iVisitorOperation Voperation = session.getMapper (iVisitorOperation.class); Visiteur Visiteur = Voperation.BasicQuery (ID); Mybatisutils.closesession (session); System.out.println (visiteur); } catch (exception e) {// todo: gère l'exception e.printStackTrace (); }} / * * Ajouter un enregistrement des visiteurs en lots * / public static void addVisitors () {sqlSession session = mybatisUtils.getsqlSession (); Liste <Visitor> visiteurs = arrays.aslist (nouveau visiteur [] {nouveau visiteur ("MongoDB", "[email protected]"), nouveau visiteur ("redis", "[email protected]"), nouveau visiteur ("Couchdb", "[email protected]"), nouveau visiteur ("Couchdb", "[email protected]"), nouveau visiteur ("Couchdb", "[email protected]"), New Visitor ("Couchdb", "[email protected]"), New Visitor ("Couchdb", "couchdb@gmai Visitor ("hbase", "[email protected]"), nouveau visiteur ("bigTable", "[email protected]"), nouveau visiteur ("Hive", "[email protected]"), nouveau visiteur ("MapReduce", "[email protected]"),}); pour (visiteur visiteur: visiteurs) {addVisitor (visiteur, session); } Mybatisutils.closeSession (session); MybatisUtils.showMessages (crud_enum.list, visiteurs.size ()); } / * * Ajouter des informations sur les visiteurs * / @SuppressWarnings ("inutilisé") AddVid Void statique privé (Visitor Visitor, SQLSession Session) {if (session == null) Session = MyBatisUtils.getsQLSession (); IVisitorOperation Voperation = session.getMapper (iVisitorOperation.class); int enregistreCount = voperation.add (visiteur); session.Commit (); if (session == null) mybatisutils.closeSession (session); MybatisUtils.showMessages (crud_enum.add, recordCount); } / * * Surcharge Ajouter le visiteur * / public static void addVisitor (visiteur du visiteur) {addVisitor (visiteur, null); } / * * Supprimer les informations sur les visiteurs * / public static void deletevitor (int id) {SqlSession Session = mybatisUtils.getsqlSession (); IVisitorOperation Voperation = session.getMapper (iVisitorOperation.class); int enregistreCount = voperation.delete (id); session.Commit (); Mybatisutils.closesession (session); MybatisUtils.showMessages (crud_enum.delete, recordCount); } / * * Mise à jour des informations sur les visiteurs * / public static void UpdateVisitor (int id) {SQLSession Session = mybatisUtils.getsqlSession (); IVisitorOperation Voperation = session.getMapper (iVisitorOperation.class); Visiteur Visitor = Voperation.Query (ID); System.out.println ("Objet original:" + Visiteur); String name = visitor.getName (); if (name.contains ("mis à jour"))) {visitor.setName (name.substring (0, name.indexof ("mis à jour"))); } else {visitor.setName (name + "updated"); } int enregistreCount = voperation.update (visiteur); session.Commit (); Mybatisutils.closesession (session); MybatisUtils.showMessages (crud_enum.update, recordCount); System.out.println ("Update Object:" + Visitor); } / * * Informations sur les visiteurs de requête * / public static void queryVisitor (int id) {sqlSession session = mybatisUtils.getsqlSession (); IVisitorOperation Voperation = session.getMapper (iVisitorOperation.class); Visiteur Visitor = Voperation.Query (ID); Mybatisutils.closesession (session); MybatisUtils.showMessages (crud_enum.query, 1); System.out.println (visiteur); } / * * Interroger la liste des visiteurs * / public static void queryVisitorList () {sqlSession session = mybatisUtils.getsqlSession (); IVisitorOperation Voperation = session.getMapper (iVisitorOperation.class); List <Visitor> visiteurs = voperation.getList (); pour (visiteur visiteur: visiteurs) {System.out.println (visiteur); } Mybatisutils.closeSession (session); MybatisUtils.showMessages (crud_enum.list, visiteurs.size ()); }} La classe Demorun exécute un simple crud de table unique et la démonstration est terminée.