• 【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(),看看究竟是怎么回事。

  • 相关阅读:
    浅谈线性 Linear
    Github TinyRenderer渲染器课程实践记录
    蓝点无限UWB TDOA 低功耗标签 功耗测试
    UWB DW1000 BP30 测距代码架构
    C语言
    C语言
    张量tensor 和张量分解 tensor decomposition
    Manifold learning流行学习和谱聚类
    机器学习里面的核kernel, 维数灾难
    机器学习评价方法
  • 原文地址:https://www.cnblogs.com/DoubleEggs/p/6243226.html
Copyright © 2020-2023  润新知