• 浅谈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  
  • 相关阅读:
    41.js延迟加载的方式有哪些?
    39、[“1”, “2”, “3”].map(parseInt) 答案是多少
    38.null,undefined 的区别?
    35.说几条写JavaScript的基本规范?
    34.介绍js有哪些内置对象?
    问题解决Android studio遇到 java.lang.OutOfMemoryError: GC app:transformClassesWithDexForDebug解决方法 以及gradle优化
    Multiple dex files define
    Retrofit2.0+RxJava2.0问题
    【转】Android Shape绘制虚线在手机端查看是实线的问题
    极光使用整理
  • 原文地址:https://www.cnblogs.com/Jolivan/p/9118640.html
Copyright © 2020-2023  润新知