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

来源:互联网 发布:sql 修改 primary key 编辑:程序博客网 时间:2024/05/22 17:44


前言综述:


      其实在我们分析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类是这样的:

public class User{         public String id;         public String name;         public String key;         ……         public String getId(String id){         }}

  

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

首先定义resultMap:

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

使用上面定义的resultMap:

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

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

     

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


小结:

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




1 0
原创粉丝点击