目录
  • resultMap的Colum和property属性
    • 1: resultMap标签
    • 2:使用情况
      • 2.1 简单查询
      • 2.2 一对一
      • 2.3 一对多
  • resultMap对column和property的理解
    • select元素有很多属性(这里说用的比较多的)
      • 什么时候我们知道使用resultMap,什么时候又使用resultType呢?
        • 最后说下

        resultMap的Colum和property属性

        1: resultMap标签

        当我们的数据库字段与实体类的属性不一致时,就需要使用该标签进行一一映射。

        2:使用情况

        2.1 简单查询

         <resultMap id="这个resultMap的id" type="对应实体类的全限定类名">
                 <id column="id" property="id"></id>
                <result column="username" property="name"></result>
                <result column="author" property="author"></result>
                <result column="number" property="number"></result>
               .............
               colum对应数据库的字段,property对应实体类的属性
            </resultMap>
        

        他表示对数据按照什么样的规则进行一一映射,如:

          <!-- 根据编号查找书籍-->
            <select id="SelectbooksByNumber" parameterType="String"  resultMap="名字">
                select * from book where number=#{number};
            </select>
        

        上面的查找结果按照你给的resultMap的对应规则进行映射。

        2.2 一对一

        需要注意的是你sql语句查出来的列名称是别名,那你就要填别名,就不是你数据库的列名称了。

        返回结果:User
        User中含有Role属性集合 一对多的关系
        JavaType是用来指定pojo中属性的类型

        2.3 一对多

        同样和一对一 一样需要注意列名称。

        返回结果:User
        User中含有Role属性集合 一对多的关系
        JavaType是用来指定pojo中属性的类型,
        ofType指定的是 映射到list集合属性中pojo的类型
        其中Role属性集合为List

        pojo

        public class User implements Serializable {
            private Integer id;
            private String username;
            private String password;
            private String salt;
            private Integer status; // 用户状态 0: 正常   1:禁用   2:锁定
        
            //角色集合
            private List<Role> roles;
        

        role表

        在这里插入图片描述

        user表

        在这里插入图片描述

        user与role的映射表

        在这里插入图片描述

        resultMap对column和property的理解

        首先,先看看这张图,看能不能一下看明白:

        select元素有很多属性(这里说用的比较多的)

        • id:命名空间唯一标识,可以被用来引用这条语句
        • parameterType:将会传入这条语句的参数类的完全限定名或者别名
        • resultType:从这条语句要返回的期望类型的类的完全限定名或别名(这里注意下集合类型,应该是集合可以包含的类型,不能是集合本身),重要:使用resultType或resultMap,但不能同时使用。
        • resultMap:命名引用外部的resultMap,其名称要和外部的resultMap元素的ID名称一致,用于映射其结果到实体类指定对象中。

        什么时候我们知道使用resultMap,什么时候又使用resultType呢?

        ①当去select一张表时,可以使用resultType,这些情况下,MyBatis会在幕后自动创建一个ReusltMap,基于属性名来映射到JavaBean属性上

        ②所以在使用resultMap时,就必须要写上resultMap相对应的xml

        ③为了方便我们开发出错,在没有特别要求的情况下,column名可以完全和property名称一致,否则当我们没有对应上的时候,数据库匹配不到,会将某某参数值变为大写,导致我们本来获取小写的参数名,结果没有获取到,后台报错,得不偿失啊!

        最后说下

        sql中比如,有 andm.id = #{id ,jdbcType=VARCHAR } 要标明jdbcType为什么呢?

        解释:

        如果你映射了一个javabean,MyBatis通常可以断定类型(项目里好多都要写,我也不知道为啥),然而,如果你映射到的是比如:HashMap,那么应该明确指定的jdbcType来保证所需的行为

        以上为个人经验,希望能给大家一个参考,也希望大家多多支持本网站。

        您可能感兴趣的文章:

        • Mybatis映射文件之常用标签及特殊字符的处理方法
        • MyBatis常用标签以及使用技巧总结
        • MyBatis常用标签大全
        • MyBatis中foreach标签的collection属性的取值方式
        • 解决Mybatis plus实体类属性与表字段不一致的问题
        • mybatis主从表关联查询,返回对象带有集合属性解析
        • Mybatis常用标签及属性小结