浅谈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  

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/12410.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论