zoukankan      html  css  js  c++  java
  • 【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(),看看究竟是怎么回事。

  • 相关阅读:
    mysql数据库优化课程---3、数据库设计是什么
    mysql数据库优化课程---2、命令其实也就是那几个单词
    mysql数据库优化课程---1、数据库的本质是什么
    php特级课---4、网站服务监控(常用网站服务监控软件有哪些)
    php特级课---5、网络数据转发原理
    php特级课---3、常用的网站加速技术有哪些
    php特级课---2、网站大数据如何存储
    php特级课---1、网站大访问量如何解决
    网络工程师课程---7、网络通信综合实验(做网络基础综合实验 用什么软件)
    Objective-C路成魔【2-Objective-C 规划】
  • 原文地址:https://www.cnblogs.com/DoubleEggs/p/6243226.html
Copyright © 2011-2022 走看看