1. Présentation
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 de retour fourni est ResultType, MyBatis supprimera les paires de valeurs de clé dans la carte et les affectera 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 ResultMap. Cependant, lorsque l'attribut de type retour fourni est ResultType, MyBatis attribue automatiquement la valeur correspondante aux attributs de l'objet spécifié par resultType.
② Lorsque le type de retour fourni est ResultMap, car la carte ne peut pas bien représenter le modèle de domaine, il doit le convertir davantage en l'objet correspondant lui-même, qui est souvent très utile dans les requêtes complexes.
2. ResultSype
Blog.javapublic classe blog {private int id; title de chaîne privée; contenu de la chaîne privée; propriétaire de chaîne privée; liste privée <commentaire> commentaires;}La table de données de données correspondante stocke ID, le titre, le contenu et les attributs du propriétaire.
<typealias alias = "blog" type = "com.tiantian.mybatis.model.blog" /> <select id = "selectBlog" ParametType = "int" resultType = "Blog"> SELECT * FROM T_BLOG WHERE ID = # {id} </ select>MyBatis créera automatiquement un objet ResultMap, puis encapsulera la paire de valeurs de clé en fonction du nom d'attribut trouvé. Ensuite, vous verrez que le type de retour est un objet de blog, puis retirez la paire de valeurs de clé correspondant à l'objet de blog à partir du résultat et attribuez-le.
3. ResultMap
Il est également très utile lorsque le type de retour est directement un résultat de résultat, qui est principalement utilisé pour les requêtes conjointes complexes, car il n'est pas nécessaire de mener des requêtes simples. Regardons d'abord une requête simple avec un type de rendement de résultat MAP, puis examinons l'utilisation de requêtes complexes.
①Sédition d'une question simple
<resultMap type = "blog" id = "blogResult"> <id colonnel = "id" propriété = "id" /> <résultat chronn = "title" propriété = "title" /> <result Column = "contenu" propriété = "contenu" /> <result Column = "propriétaire" Property = "propriétaire" /> <résultat Column = "propriétaire" propriété = "propriétaire" /> <sult Column = "propriétaire" Property = "Property =" propriétaire " propriété = "propriétaire" /> << / resultMap> <sélectionnez id = "selectBlog" ParameterType = "int" resultMap = "BlogResult"> SELECT * FROM T_BLOG WHERE ID = # {id} </ select>La valeur de ResultMap dans la carte de sélection est l'ID d'un résultat externe, indiquant quel résultat est mappé. L'attribut de type du résultat externe indique quel type le résultat du résultat est. Voici le type de blog, donc Mybatis le supprimera comme un objet de blog. L'ID du nœud enfant du nœud ResultMap est utilisé pour identifier l'ID de l'objet, tandis que le nœud enfant résultat est utilisé pour identifier certaines propriétés simples. La propriété de colonne représente les attributs interrogés à partir de la base de données, et la propriété représente la propriété que la valeur correspondante de la propriété interrogée est attribuée à l'objet entité. C'est comment écrire ResultMap pour une requête simple.
② requête complexe
Il y a une classe de commentaires, qui a une référence de blog, indiquant à quel blog il s'agit. Lors de l'interrogation des commentaires, le blog correspondant doit également être trouvé et affecté à son attribut de blog.
Classe publique Commentaire {private int id; contenu de chaîne privée; Date privée commentaire = new Date (); blog privé blog;} <! - De commentmapper.xml fichier -> <resultMap type = "comment" id = "commentResult"> <association propriété = "blog" select = "selectBlog" column = "blog" javatype = "blog" int "introdmap> <SelectCol resultMap = "commentResult"> SELECT * FROM T_COMMment où id = # {id} </ select> <select id = "selectBlog" ParameterType = "int" resultType = "Blog"> SELECT * FROM T_BLOG WHERE ID = # {id} </ select>Tout d'abord, demandez la carte sélectionnée avec ID en tant que SelectComment, puis obtenez un objet ResultMap avec ID comme commentaire. Vous pouvez voir que le type de retour du résultat correspondant est un objet de commentaire, qui n'a qu'un seul nœud d'association, et il n'y a pas de nœuds enfants d'identification et de résultat correspondant à la question simple mentionnée ci-dessus. Cependant, il attribuera toujours l'ID correspondant et d'autres attributs à l'objet de commentaire. C'est ce que le mybatis a mentionné plus tôt qu'il a une fonction d'encapsulation automatique. Tant que le type de retour est fourni, MyBatis utilisera les résultats de la requête pour encapsuler l'objet correspondant en fonction de son propre jugement. Par conséquent, dans la question simple ci-dessus, si elle n'indique pas clairement quel champ correspond à ID et quel champ correspond au titre dans le résultat Mybatis aidera également à le résumer en fonction de son propre jugement. Le jugement de Mybatis est de comparer le champ de la requête ou son alias correspondant aux attributs de l'objet de retour. S'il correspond et que le type correspond également, MyBatis l'affectera. Un attribut de blog est associé dans le résultat correspondant ci-dessus, et son type Java correspondant est un blog. Dans la méthode d'écriture ci-dessus, l'objet associé est associé à des sous-requêtes, et bien sûr, il peut également être associé directement par le biais de la requête d'association. Dans le nœud enfant d'association ci-dessus, l'attribut de propriété indique quelle propriété associée est le type de retour ResultMap. Pour l'exemple ci-dessus, l'attribut de blog géré par commentaire; SELECT indique quelle sélection de la carte pour mapper l'attribut associé correspondant, c'est-à-dire qu'il demandera une carte de sélection avec la valeur correspondant à sélectionner pour interroger l'objet d'attribut associé; La colonne indique la paire de valeurs de clé correspondant au résultatmap avec id commentResult. Cette paire de valeurs clés sera utilisée comme paramètre pour la sous-requête de l'objet associé, c'est-à-dire que la valeur de la requête d'attribut de blog dans SelectComment est transmise en tant que paramètre à la sous-requête du blog d'objets associé à la sous-requête du blog d'objets associé; Javatype indique le type de l'objet associé actuel en Java.
Ce qui précède introduit une requête de relations un à un ou un à plusieurs dans le cas d'un à un. Dans les applications réelles, il existe une autre application qui utilise plus fréquemment. C'est pour découvrir les plus parties correspondantes par le biais d'un à un. Lorsque vous éliminez les plus parties, il doit également s'associer un à un: lors de la suppression de l'objet du blog, éliminez tous les commentaires correspondants et lors de la suppression du commentaire, il doit encore éliminer le blog correspondant, qui est supprimé en Java par demande.
<! - From BlogMapper.xml File -> <resultMap type = "blog" id = "blogResult"> <id column = "id" propriété = "id" /> <collection propriété = "commentaires" select = "selectCommentsByBlog" colonnes = " javatype = "blog" column = "blog" select = "selectBlog" /> </ resultMap> <select id = "selectBlog" ParameterType = "int" resultMap = "BlogResult"> Select * from t_blog où id = # {id} </ select> <select id = "selectCommentsByBlog" ParametType = "int" resultmap = "commentResult"> select * parametType = "int" resultmap = "commentResult" = # {blogid} </lect>L'entrée de la demande ci-dessus est une carte sélectionnée avec ID SelectBlog, et le résultat de retour est un résultat avec ID BlogResult. Le type d'ID BlogResult est le blog, qui spécifie les attributs et les champs de l'ID. La spécification de l'ID aura un grand effet sur la construction interne de Mybatis. Il est associé à un objet de commentaires. Parce qu'un blog peut avoir de nombreux commentaires, qui sont une collection, il est donc cartographié avec une collection de collection. Le Select indique toujours quelle sous-requête est effectuée pour interroger les commentaires correspondants. La colonne signifie quelle valeur de champ trouvée ci-dessus est transmise à la sous-requête en tant que paramètre. OFTYPE représente également le type de retour. Le type de retour ici est le type à l'intérieur de la collection. La raison pour laquelle le type OFF est utilisé à la place du type est qu'il est utilisé dans Mybatis pour le distinguer de l'association d'association.
public void SelectCommentsByBlogTest () {SqlSession Session = util.getsqlSessionFactory (). OpenSession (); commentmapper commentmapper = session.getMapper (commentmapper.class); liste <commentaire> commentaire = commentmapper.selectCommentsByBlog (6); pour (commentaire commentaire) System.out.PrintLn (commentaire); session.); TestSelectone () {SqlSession Session = util.getsqlSessionFactory (). OpenSession (); blogmapper blogmapper = session.getMapper (blogmapper.class); blog blog = blogmapper.selectblog (6); list <commentaire> commentaire = blog.getComments (); if (commentaire! = null) {pour (commentaire commentaire: commentaires) System.out.println (commentaire);} session.close ();}Ce qui précède est le résultat et le résultat dans Mybatis vous a 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!