Maison Java javaDidacticiel Notions de base pour démarrer avec mybatis (4) ---- mappage d'entrée et mappage de sortie

Notions de base pour démarrer avec mybatis (4) ---- mappage d'entrée et mappage de sortie

Dec 21, 2016 pm 02:31 PM

Bases de démarrage de Mybatis (4) ----Mappage d'entrée et mappage de sortie 1 : Mappage d'entrée

Spécifiez le type de paramètres d'entrée via ParameterType. Le type peut être un type simple, un hashmap ou un pojo. type d'emballage.

1.1. Transmettre l'objet d'emballage de pojo

1.1.1. Description de l'exigence

Pour compléter la requête complète des informations utilisateur, les conditions de requête qui doivent être transmises peut être complexe (peut inclure des informations sur l'utilisateur, d'autres informations, telles que des produits, des commandes, etc.).

1.1.2. Définir le pojo de type d'emballage

En réponse aux exigences ci-dessus, il est recommandé d'utiliser un pojo de type d'emballage personnalisé et d'envelopper les conditions de requête complexes dans le pojo de type d'emballage.

Classe Pojo Code de classe UserQueryVo qui encapsule les conditions de requête :

1 package com.mybatis.entity ; 2 3 /**4 * 5 * @ClassName : UserQueryVo 6 * @Description : TODO (type de package) 7 * @author warcaft 8 * @date 2015-6-30 00:00:41 AM 9 *10*/11 classe publique UserQueryVo {12 //Here Pack autres conditions de requête 13 //Conditions de requête utilisateur 14 PRivate UserCustom userCustom;15 16 public UserCustom getUserCustom() {17 return userCustom;18 }19 20 public void setUserCustom(UserCustom userCustom) {21 this.userCu stom = userCustom;22 }23 / /D'autres conditions de requête peuvent être empaquetées... 24 25 }
Afficher le code

Code de classe UserCustom

1 package com.mybatis.entity 2 /**3 * 4 * @ClassName : UserCustom 5 * @Description : TODO (classe d'extension de l'utilisateur) 6 * @author warcaft 7 * @date 2015-6-30 00:02:37 AM 8 * 9*/ 10 classe publique UserCustom extends User{11 //Peut étendre les informations utilisateur 12}
Afficher le code

Code de UserMapper.xml

Définir les utilisateurs dans UserMapper.xml Requête d'informations complète (en supposant que les conditions de requête sont complexes, requêtes associées complexes via des requêtes avancées)

1 <!-- Requête de combinaison de types d'emballage simulée 2 #{userCustom.sex} : Supprimez la valeur de genre 3 dans l'objet d'emballage pojo $ {userCustom.username} : supprimez la valeur du nom 4 dans l'objet pojo -->5 <select id="findUserList" ParameterType="com.mybatis.entity.UserQueryVo" 6 resultType="com.mybatis.entity. UserCustom" >7   où sex=#{userCustom.sex} et nom d'utilisateur LIKE '%${userCustom.username}%'8  </select>
Afficher le code

Code du Classe UserMapper.java

1 /**2 * 3 * @ClassName : UserMapper 4 * @Description : TODO (interface de mappage de gestion des utilisateurs) 5 * @author warcaft 6 * @date 2015-6-30 00:14:56 AM 7 * 8*/ 9 interface publique UserMapper {10 // Requête complète des informations utilisateur 11 public List<UserCustom> findUserList(UserQueryVo userQueryVo);12 >
View Code

Code de test unitaire Junit

1 paquet com.mybatis.dao.test ; 2  3 importer java.io.InputStream ; 4 importer java.util.Date ; 5 importer java.util.List ; 6  7 importer org.apache.ibatis.io.Resources ; 8 importer org.apache.ibatis.session.SqlSession; 9 importer org.apache.ibatis.session.SqlSessionFactory;10 importer org.apache.ibatis.session.SqlSessionFactoryBuilder;11 importer org.junit.Before;12 importer org.junit.Test;13 14 importer com.mybatis.entity.User ;15 import com.mybatis.entity.UserCustom;16 import com.mybatis.entity.UserQueryVo;17 import com.mybatis.mapper.UserMapper;18 19 public class UserMapperTest {20 21     private SqlSessionFactory sqlSessionFactory;22 23     // 此方法是在执行findUserByIdTest之前执行24     @Before25     public void setUp() renvoie une exception {26         String resource = "SqlMapConfig.xml";27          // 创建SqlSessionFcatory29         sqlSessionFactory = new SqlSessionFactoryBuilder().build (inputStream);30     }31     32     @Test33     public void testFindUserList() {34         SqlSession sqlSession = sqlSessionFactory.openSession();35         //创造查询条件36        UserQueryVo userQueryVo = new UserQueryVo();37         UserCustom userCustom = new UserCustom(); 38         userCustom.setSex("2");39         userCustom.setUsername("小");40         userQueryVo.setUserCustom(userCustom);41         //象42         UserMapper mapper = sqlSession.getMapper(UserMapper .class);43         List<UserCustom>list=mapper.findUserList(userQueryVo);44         System.out.println(list);45         sqlSession.commit();46         sqlSession.close();47     }48 }
View Code二:输出映射

1.resultType

  使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。

  如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。

  只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。

1.1.输出简单类型

  需求:用户信息的综合查询列表,通过查询总数才能实现分页功能。'

  UserMapper.xml的代码 

1 <?xml version="1.0" encodage="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!-- namespace命名空间,作用就是对sql进行分类化的管理,理解为sql隔离 6     :使用mapper代理开发时,namespace有特殊作用,namespace等于mapper接口地址 7  --> 8 <!-- 用户信息综合查询总数 9      parameterType:指定输入类型,et findUserList一致。10      resultType:输出结果类型.    11   -->12 <mapper namespace="com.mybatis.mapper.UserMapper">13     <select id="findUserCount" ParameterType="com.mybatis.entity.UserQueryVo" resultType="int">14 sélectionnez count(*) depuis t_user où  sex=#{userCustom.sex} et un nom d'utilisateur comme '%${userCustom.username}%'15     </select>16 </mapper>

UserMapper.java的代码

1 interface publique UserMapper {2     //用户信息综合查询总数3     public int findUserCount(UserQueryVo userQueryVo);4 }

Junit测试代码

1 paquet com.mybatis.dao.test ; 2  3 importer java.io.InputStream ; 4 importer java.util.Date ; 5 importer java.util.List ; 6  7 importer org.apache.ibatis.io.Resources ; 8 importer org.apache.ibatis.session.SqlSession; 9 importer org.apache.ibatis.session.SqlSessionFactory;10 importer org.apache.ibatis.session.SqlSessionFactoryBuilder;11 importer org.junit.Before;12 importer org.junit.Test;13 14 importer com.mybatis.entity.User ;15 import com.mybatis.entity.UserCustom;16 import com.mybatis.entity.UserQueryVo;17 import com.mybatis.mapper.UserMapper;18 19 public class UserMapperTest {20 21     private SqlSessionFactory sqlSessionFactory;22 23     // 此方法是在执行findUserByIdTest之前执行24     @Before25     public void setUp() renvoie une exception {26         String resource = "SqlMapConfig.xml";27          // 创建SqlSessionFcatory29         sqlSessionFactory = new SqlSessionFactoryBuilder().build (inputStream);30     }31     32     @Test33     public void findUserCountTest() {34         SqlSession sqlSession = sqlSessionFactory.openSession();35         //创造查询条件36      UserQueryVo userQueryVo = new UserQueryVo();37         UserCustom userCustom = new UserCustom(); 38         userCustom.setSex("2");39         userCustom.setUsername("小");40         userQueryVo.setUserCustom(userCustom);41         //象42         UserMapper mapper = sqlSession.getMapper(UserMapper .class);43         int count=mapper.findUserCount(userQueryVo);44         System.out.println(count);45         sqlSession.commit();46         sqlSession.close();47     }48 >
Afficher le code

小结:查询出来的结果集只有一行一列,可以使用简单类型进行输出映射。

1.2.输出po jo对象和pojo列表  

  不管是输出的pojo单个对象还是一个列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的。

  在mapper.java指定的方法返回值类型不一样。

 1.2. 1.输出单个pojo对象,方法返回值是单个对象类型

1 interface publique UserMapper {2     /**Interroger les informations utilisateur en fonction de l'ID*/3     public User findUserById(int id);4 }

 1.2.2.输出pojo对象list,方法返回值是List<pojo>

1 interface publique UserMapper {2     /**Requête floue des informations utilisateur basée sur le nom d'utilisateur*/3     public List<User> findUserByName(String username);4 antecedents Un(返回单个对象调用)还是selectList(返回集合对象调用)

1.3.输出类型resultMap

    mybatis中使用resultMap完成高级输出结果映射。

 1.3.1.resultMap使用方法

    ( 1) .定义resultMap

    (2). (1).需求:将下面的sql使用User完成映射

    select id id_,username username_ from t_user Where id=?

    User类中属性名和上边的列名不一致。

  (2).定义resultMap   

1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http ://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!-- espace de noms d'espace de noms, sa fonction est de classer SQL, compris comme isolement SQL 6 Remarque : utiliser le développement d'agent de mappage Quand, l'espace de noms a un rôle spécial, l'espace de noms est égal à l'adresse de l'interface du mappeur 7 ---> 8 <!-- Nombre total de requêtes complètes d'informations utilisateur 9 ParamètreType : spécifie le type d'entrée, cohérent avec findUserList. 10 resultType : type de résultat de sortie. 11 -->12 <mapper namespace="com.mybatis.mapper.UserMapper">13 <!-- Définir resultMap 14 sélectionnez l'identifiant id_, le nom d'utilisateur username_ de t_user et la classe User. l'attribut est utilisé comme relation de mappage 15 type : le type d'objet Java finalement mappé par resultMap, vous pouvez utiliser un alias 16 id : l'identification unique de resultMap 17 -->18 <resultMap type="user" id=" userResultMap"> 19 <!--id représente l'identifiant unique dans le résultat de la requête, 20 colonne : le nom de la colonne interrogée 21 propriété : le nom de l'attribut dans le type pojo spécifié par le type 22 Enfin, resultMap établit une relation de mappage (correspondance relation) entre la colonne et la propriété 23                                                                                                                                                                                                                    Le nom de l'attribut dans le type de pojo spécifié 28 Le résultat finalM ap établit une relation de mappage (correspondance) entre la colonne et la propriété 29 -->30 <result column="username_" property="username" />31 </resultMap&gt ;32 </mapper>


  (3) Utilisez resultMap comme mappage de type de sortie de l'instruction

<.>1 <!-- Utiliser resultMap comme mappage de sortie 2 resultMap : Spécifiez l'identifiant du resultMap défini. Si ce resultMap se trouve dans un autre fichier mapper.xml, vous devez ajouter l'espace de noms 3 devant -->4 < ;select id="findUserByIdResultMap" ParameterType="int " resultMap="userResultMap" >5 sélectionnez l'identifiant id_, le nom d'utilisateur username_ de t_user où id=#{id}6 </select>


Code UserMapper.java

interface publique UserMapper { /**Interrogez les informations utilisateur en fonction de l'ID et utilisez resultMap pour la sortie*/ public User findUserByIdResultMap(int id);}


Code de test Junit :

1 package com.mybatis.dao.test; 2 3 importer java.io.InputStream; 4 importer java.util.Date; 5 importer java.util.List; 6 7 importer org.apache.ibatis.io.Resources; org.apache.ibatis.session.SqlSession; 9 importer org.apache.ibatis.session.SqlSessionFactory;10 importer org.apache.ibatis.session.SqlSessionFactoryBuilder;11 importer org.junit.Before;12 importer org.junit.Test; 13 14 importer com.mybatis.entity.User; 15 importer com.mybatis.entity.UserCustom;16 importer com.mybatis.entity.UserQueryVo;17 importer com.mybatis.mapper.UserMapper;18 19 classe publique UserMapperTest {20 21 privé SqlSessionFactory sqlSessionFactory;22 23 // Cette méthode est en exécution 24 avant d'exécuter findUserByIdTest @Before25 public void setUp() renvoie une exception {26 String resource = "SqlMapConfig.xml";27 InputStream inputStream = Resources.getResourceAsStream(resource);28 // Créer SqlSessionFcatory29 sqlSessionFactory = new SqlSessionFactoryBuilder().build( inputStream);30 }31 32 @Test33 public void testFindUserByIdResultMap() {34 SqlSession sqlSession = sqlSessionFactory.openSession();35 // Créer un objet Usermapper, mybatis génère automatiquement un objet proxy mapper 36 UserMapper mapper = sqlSession.getMapper(UserMapper.class) ;37         User user = mapper.findUserByIdResultMap(1); 38         System.out.println(user); 39       sqlSession.close(); 🎜>

Résumé :

Utilisez resultType pour le mappage de sortie Ce n'est que lorsque le nom de la colonne interrogé est cohérent avec le nom de l'attribut dans le pojo que la colonne peut être mappée avec succès.

Si le nom de la colonne interrogé est incohérent avec le nom de l'attribut pojo, définissez un resultMap pour établir une relation de mappage entre le nom de la colonne et le nom de l'attribut pojo.

Ce qui précède présente les bases pour démarrer avec mybatis (4) - le contenu du mappage d'entrée et du mappage de sortie. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

iBatis vs MyBatis : lequel vous convient le mieux ? iBatis vs MyBatis : lequel vous convient le mieux ? Feb 19, 2024 pm 04:38 PM

iBatis vs MyBatis : lequel vous convient le mieux ?

Explication détaillée de la fonction Définir la balise dans les balises SQL dynamiques MyBatis Explication détaillée de la fonction Définir la balise dans les balises SQL dynamiques MyBatis Feb 26, 2024 pm 07:48 PM

Explication détaillée de la fonction Définir la balise dans les balises SQL dynamiques MyBatis

Différentes manières de mettre en œuvre des opérations de suppression par lots dans MyBatis Différentes manières de mettre en œuvre des opérations de suppression par lots dans MyBatis Feb 19, 2024 pm 07:31 PM

Différentes manières de mettre en œuvre des opérations de suppression par lots dans MyBatis

Analyse comparative des fonctions et performances de JPA et MyBatis Analyse comparative des fonctions et performances de JPA et MyBatis Feb 19, 2024 pm 05:43 PM

Analyse comparative des fonctions et performances de JPA et MyBatis

Explication détaillée de la façon d'utiliser les instructions de suppression par lots MyBatis Explication détaillée de la façon d'utiliser les instructions de suppression par lots MyBatis Feb 20, 2024 am 08:31 AM

Explication détaillée de la façon d'utiliser les instructions de suppression par lots MyBatis

Explication détaillée du cache de premier niveau MyBatis : Comment améliorer l'efficacité de l'accès aux données ? Explication détaillée du cache de premier niveau MyBatis : Comment améliorer l'efficacité de l'accès aux données ? Feb 23, 2024 pm 08:13 PM

Explication détaillée du cache de premier niveau MyBatis : Comment améliorer l'efficacité de l'accès aux données ?

Interprétation des paramètres de configuration de MyBatis Generator et bonnes pratiques Interprétation des paramètres de configuration de MyBatis Generator et bonnes pratiques Feb 23, 2024 am 09:51 AM

Interprétation des paramètres de configuration de MyBatis Generator et bonnes pratiques

Analyser le mécanisme de mise en cache de MyBatis : comparer les caractéristiques et l'utilisation du cache de premier niveau et du cache de deuxième niveau Analyser le mécanisme de mise en cache de MyBatis : comparer les caractéristiques et l'utilisation du cache de premier niveau et du cache de deuxième niveau Feb 25, 2024 pm 12:30 PM

Analyser le mécanisme de mise en cache de MyBatis : comparer les caractéristiques et l'utilisation du cache de premier niveau et du cache de deuxième niveau

See all articles