【Mybatis架构】输入、输出映射

前言综述:

 

      其实在我们分析Mybatis的查询缓存或者是一些简介的时候,我们就不难看到有关于Mybatis输入输出映射的东西,比如说:

但是一直没有想起来系统的来总结一下这方面的相关知识,偶然看到这块,心血来潮,总结一下:

       Mybatis的输入映射和输出映射可以是一些基本数据类型、hashmap或者是pojo的包装类型。其中输入映射相对来说比较简单,只有parameterType一种;相对来说,输出映射稍微复杂一点,存在resultType和resultMap两种方式或者说是格式,其中resultMap还涉及到Mybatis的延迟加载。接下来,我们就简单的介绍一下他们的相关内容。

 

一、输入映射:

       输入映射在mapper映射文件中(配置文件)是通过parameterType制定输入参数的类型。类型可以是Java基本数据类型,也可是自定义的hashmap、pojo的包装类型。

1、java基础数据类型:

 

2、hashmap:首先在程序里面定义map:

 

mapper配置文件:

 

3、pojo包装类型就简单了,首先我们肯定有pojo类,然后直接晒mapper配置文件了:

提示:别忘了在SqlMapperConfig.xml中配置好这个Mapper映射文件

 

然后相对应的定义mapper接口就ok了,你要是不相信就自己 测试一下吧

 

刚才已经说过了,相对于输出映射来说,输入映射是十分简单的,没有那么多弯弯绕。接下来,我们就研究一下

Mybatis的输出映射:

       上面我们说到过,对于mybatis输出映射,有两种,resultType和resultMap。而且,resultType也有很多种对象类型,但是值得提一下的是,当我们使用resultType时,查询出来的列名必须和pojo中对应的属性名要一致才能正确的映射成功,否则,就会出现映射出错这种现象。但是万一真的必须不能一一映射的时候肿么办?肿么办?这时候resultMap就隆重登场了。举个简单的例子啊,但那个我们定义的pojo类是这样的:

 

  1. <pre code_snippet_id="2055039" snippet_file_name="blog_20161216_1_6817599" name="code" class="java"><span style="font-size:18px;">public class User{  
  2.          public String id;  
  3.          public String name;  
  4.          public String key;  
  5.          ……  
  6.          public String getId(String id){  
  7.          }  
  8. }</span></pre>  
  9. <pre></pre>  
  10. <pre></pre>  

  

可是我们的sql是这样的:
Select id as userID,name,key from table where ……
首先定义resultMap:

  1. <resultMap id="userResultMap" type="user" ><!--这里的id是此resultMap的唯一标识-->  
  2.     <result column="key" property="key"/>  
  3.     <id column="userID" property="id"/><!--这里可以看成是主键-->  
  4.     <result column="name" property="name"/><!--普通属性的定义映射-->  
  5. </resultMap>  

使用上面定义的resultMap:

 

 

  1. <select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">  
  2.             SELECT id as userID,username,key from user where……  
  3. </select>  


接下来,就是我们己去定义mapper接口了进行调用了,自己接着测试一下吧。

 

     

       最后总结一下:使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。而且通过resultMap还可以实现Mybatis的延迟加载,具体的内容我们下次再来探讨。

 

小结:

       所谓是“纸上得来终觉浅,绝知此事要躬行”,纵使别人嘴里说出话来,自己不动动手试验一下,也是不知道别人说的究竟是怎样的,这句话送给我,也同样送给大家,动手试一下,大不了来一个System.out.println(),看看究竟是怎么回事。

posted @ 2017-01-02 21:20  Double-Eggs  阅读(1143)  评论(0编辑  收藏  举报