cxh1299543968
KaisonChen
采纳率23.5%
2017-06-02 07:18

mybatis 一对一关联 association 返回空值

10
  • 编程语言
  • mybatis
  • java
已采纳

在mybatis做association的关联时,后台执行了association的 查询语句,但是得到的结果中association关联的对象为null。
代码截图如下
图片说明
图片说明

xml配置如下:
图片说明

debug结果时recruitType为null
图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

9条回答

  • u013154152 Rains_ 4年前

    好像只限于association的select返回resultMap类型,之前也用过resultType,返回的也是null,改成Map就没事了,不知道是不是bug

    点赞 1 评论 复制链接分享
  • qq_17782085 qq_986223663 4年前




    点赞 评论 复制链接分享
  • qq_17782085 qq_986223663 4年前

    要不就用多表查询吧,你这个用N+1查询,本身也就影响效率的,left join 一哈,后面写多写个association映射吧,类似下面



    点赞 评论 复制链接分享
  • u012370537 51区 4年前

    association里面需要配置recruitType属性的jdbcType和javaType的映射。

    点赞 评论 复制链接分享
  • laogao01200 laogao01200 4年前

    我跟楼上感觉差不多,通过嵌套结果查询的需要加上resultMap, 不行你用嵌套查询来做一遍, association column=xxid javaType=实体类 property=recruiType select=你命名空间下的那个查询的方法 你试试看这个好不好用

    点赞 评论 复制链接分享
  • LIUSHAOBO0 涩慕年华 4年前

    http://cczakai.iteye.com/blog/1276722 可以参考这篇文章

    点赞 评论 复制链接分享
  • luciferian luciferian 2年前

    这个问题是源于resultMap和resultType的区别。
    resultMap是必须手动指定表字段名和POJO类里面属性的映射关系

    而resultType则是当POJO类里面的属性名称和表字段的名称一模一样的时候,可以自动匹配一一对应的关系,
    所以说你这个使用了resultType,当程序执行完,虽然查到了结果,但是由于你POJO类的属性名称和表字段名不匹配
    这就造成了查出的结果集不能装进POJO类,所以最后这个POJO类实例就会为Null

    改法除了改用resultMap手动指定对应关系外,那就只能改POJO类里属性的命名了。

    点赞 评论 复制链接分享
  • Android_app kk1924 4年前
    <resultMap id="BaseResultMap" type="com.mk.dao.vo.Position">
        <id column="ID" property="ID" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <association column="person" property="person"
            javaType="com.mk.dao.vo.Person">
            <id column="id" property="id" jdbcType="VARCHAR" />
            <result column="name" property="name" jdbcType="VARCHAR" />
            <result column="age" property="age" jdbcType="INTEGER" />
        </association>
    </resultMap>
    
    点赞 评论 复制链接分享
  • Android_app kk1924 4年前

    mybatis官网文档不是说明,不要使用这种方式吗?
    推荐使用以下样式:



    javaType="com.mk.dao.vo.Person">




    <sql id="base">
        p.id,p.name,p.age,p.position,po.pId AS ID,po.pName AS name
    </sql>
    <!-- -->
    <select id="selectByPrimaryKey" resultMap="BaseResultMap"
        parameterType="java.lang.String">
        SELECT
        <include refid="base" />
        FROM tbl_person AS p
        JOIN tbl_position AS po
        ON p.position=po.pName
    </select>
    
    点赞 评论 复制链接分享

为你推荐