Maison  >  Article  >  Java  >  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

黄舟
黄舟original
2016-12-21 14:31:031253parcourir

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 5
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 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         Listlist=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 2 5 8 12 13     16

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

1 interface publique UserMapper {2     /**Requête floue des informations utilisateur basée sur le nom d'utilisateur*/3     public List 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 2 5 8 12 13 18 19 30 31


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

<.>1 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


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:
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