Mybatis的一对一,一对多查询

一对一

一个问题有一个提问人,是一对一的关系,要根据提问人的id查找提问人的姓名
在问题实体类加上提问人的属性

private Student student;

mapper.xml

<mapper namespace="com.xqit.ydzhkt.answer.mapper.ListQuestionMapper">

    <resultMap id="listQuestion" type="com.xqit.ydzhkt.entity.QuestionEntity">
        <result property="questionTitle" column="question_title"/>
        <result property="questionTime" column="question_time"/>
        <result property="reply" column="reply"/>
        <association property="student" javaType="com.xqit.ydzhkt.entity.Student">
            <result property="xm" column="XM"/>
        </association>
    </resultMap>

<select id="listQuestion" resultMap="listQuestion">
    select question_title ,question_time,reply,student.XM
    from question
    join student
    on student_id=student.ID
</select>
</mapper>
一对多

查看回答,一个问题有多个回答,是一对多,根据问题查询所有的回答
在问题实体类加上回答集合字段

  private List<AnswerEntity> listAnswerEntity;
按结果嵌套
<resultMap id="questionContent" type="com.xqit.ydzhkt.entity.QuestionEntity">
        <id property="id" column="id"/>
        <result property="studentId" column="student_id"/>
        <result property="questionTime" column="question_time"/>
        <result property="questionContent" column="question_content"/>
        <result property="questionTitle" column="question_title"/>
        <collection property="listAnswerEntity" ofType="com.xqit.ydzhkt.entity.AnswerEntity">
            <result property="userId" column="user_id"/>
            <result property="answerContent" column="answer_content"/>
            <result property="answerTime" column="answer_time"/>
       </collection>
</resultMap>
 <select id="queryQuestionContent" resultMap="questionContent" parameterType="int">

     select question_title,question_content,question_time,answer_content,answer_time
      from  question q
      
	  join answer a
	  on q.id = a.question_id
  	  
  	  where q.id  = #{id}
 </select>        
按查询嵌套
<mapper namespace="com.xqit.ydzhkt.answer.mapper.TestMapper">
    <select id="listQuestionAnswer" resultMap="questionAnswer" parameterType="int">
        select * from question where question.id =#{id}
    </select>
    
<resultMap id="questionAnswer" type="com.xqit.ydzhkt.entity.QuestionEntity">
    <!--column是一对多的外键 , 写的是一的主键的列名-->
    <collection property="listAnswerEntity" javaType="arraylist"
    ofType="com.xqit.ydzhkt.entity.AnswerEntity" column="id" select="listAnswer"/>
</resultMap>

    <select id="listAnswer" resultType="com.xqit.ydzhkt.entity.AnswerEntity" >
        select * from answer where question_id = #{id}
    </select>
</mapper>

mapper返回值类型 都是 questionEntity (还有一种方法,因为回答要连接查询用户表在连接学生教师表查询用户姓名,所以可以分开查询,先查出问题,然后根据问题id查询所有的回答,在service把这个集合set到questionEntity中,这种方式写出来是一个问题,下面一列回答,上图中sql查询结果为问题+回答的集合)

QuestionEntity q = queryQuestionTitleMapper.queryQuestionContent(id);
        //把所有的回答查出来
        PageHelper.startPage(pageNum,pageSize);
        List<AnswerEntity> listAnswerEntity = listAnswerMapper.listAnswer(id);
        //ba 回答的集合传给问题实体
        q.setListAnswerEntity(listAnswerEntity)
        return q;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值