浅谈MyBatis之Mapper文件

今天想写一下关于Mapper文件的解读,主要流程是参考Mapper官方文档

namespace

namespace的作用就是关联对应的Mapper接口方法,特别是在接口方法在不同接口中存在重名时,用来作为一个定向防冲突的作用。

resultMap、resultType

resultType:从这条语句中返回的期望类型的类的完全限定名或别名。注意如果是集合情形,那应该是集合可以包含的类型,而不能是集合本身。使用 resultType 或 resultMap,但不能同时使用。他会直接定位到类的所有属性。

resultMap:外部 resultMap 的命名引用。结果集的映射是 MyBatis 最强大的特性,对其有一个很好的理解的话,许多复杂映射的情形都能迎刃而解。使用 resultMap 或 resultType,但不能同时使用。我们可以把它当做成一个Map,key就是property,我类的变量,value就是column,数据库的字段。

<mapper namespace="tk.mybatis.simple.mapper.UserMapper">
    <resultMap id="userMap" type="tk.mybatis.simple.model.SysUser">
        <id property="id" column="id"/>
        <result property="userName" column="user_name"/>
        <result property="userPassword" column="user_password"/>
        <result property="userEmail" column="user_email"/>
        <result property="userInfo" column="user_info"/>
        <result property="headImg" column="head_img" jdbcType="BLOB"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
    </resultMap>

    <select id="selectById" resultMap="userMap">
        SELECT * FROM sys_user WHERE id = #{id}
    </select>
    <select id="selectAll" resultType="tk.mybatis.simple.model.SysUser">
        SELECT id,
        user_name ,
        user_password ,
        user_email ,
        user_info ,
        head_img ,
        create_time
        FROM sys_user
    </select>
</mapper>

如上面给出的代码所示,我一开始就给出了SysUser这个类的全限定名,并把它包装成了一个resulMap,在里面给出了变量和表中字段的key-value关系,然后下面的selectById就是用到了这个resultMap这个结构。第二个用到的就是resultType这种方式,由于我在mybatis-config.xml文件中定义了自动匹配驼峰命名变量的方法,所以我在表字段的后面不用再去声明类的变量名称。

至于这两种方法的利弊呢?我们可以来做个比较

  优点 缺点
resultType 比较直观 要写许多实体类
resultMap 多个表关联的时候就比较方便了,不用再去写JOIN  
posted @ 2018-06-07 21:16  jolivan  阅读(288)  评论(0编辑  收藏  举报